アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 特集 » Mojoを使って自作ウェブアプリをよりポータブルに! » 第4回 Mojoの歴史と展望

Mojoを使って自作ウェブアプリをよりポータブルに!

第4回 Mojoの歴史と展望

MojoとHTTP::Engine

ここまでMojoとそのサンプルフレームワークであるMojoliciousについて見てきましたが,国内でもYappoこと大沢和宏さんとtokuhiromこと松野徳大さんが中心となって,HTTP::Engineという同じような趣旨のフレームワークが開発されていることをご存知の方も多いと思います。今回はそのHTTP::EngineとMojoを比較しながら,Mojoの歴史や展望を見ていきましょう。

HTTP::Engineの誕生

HTTP::Engineも,もとをただせばMojoの作者ゼバスティアン・リーデル(Sebastian Riedel)氏が4年ほど前にリリースしたCatalystというフレームワークから派生したものです。だから,Mojoとは義理のおじ,あるいは いとこ・はとこ くらいの関係になるでしょうか。

CatalystもCPANモジュールをつなぐ「触媒」と言われていたくらいで,もとよりWSGI的なミドルウェアになる素質は持っていました。ところが,原作者リーデル氏や,その後メンテナンスを引き継いだ開発チームがコミュニティを根底から揺るがすような方針変更を繰り返したため,Catalystの周辺モジュールに対する期待感や信頼感はがた落ちしていきます。あれもだめ,これもだめという具合にブラックリストに載る周辺モジュールの数が増えていった結果,結局コアのエンジン部分だけあればよいのではないかという話になったのがHTTP::Engine誕生のきっかけでした。

アプリケーションの書き方に大差はありません

そのインタフェースについては紆余曲折がありましたが,いまではCatalyst(や,Mojo)とは多少異なったものになっています。比較のために連載第1回でとりあげたHelloWorldアプリケーションをHTTP::Engineで書き直してみましょう。lib/HelloWorld.pmからコンテキスト(トランザクション)オブジェクトが消えているのがわかるでしょうか(ここではあえて冗長に書いていますが,実際にはもう少しコンパクトに書くこともできます)。

package HelloWorld;

use strict;
use warnings;
use HTTP::Engine::Response;

sub handler {
    my $req = shift;
    my $res = HTTP::Engine::Response->new;
    $res->status(200);
    $res->headers->content_type('text/plain');
    $res->body('Hello HTTP::Engine!');
    return $res;
}

1;

スタンドアロンサーバを起動するためのスクリプトはこんな感じです。

#!perl
use strict;
use warnings;
use lib 'lib';
use HTTP::Engine;
use HelloWorld;

HTTP::Engine->new(interface => {
    module => 'ServerSimple',
    args => {
        port => 3000,
    },
    request_handler => 'HelloWorld::handler',
})->run;

このくらいのアプリケーションであればlib/HelloWorld.pmの中身をスクリプト内部に書いてしまうこともできるのですが,それはさておき,HTTP::Engineのアプリケーションの書き方も,基本的にはMojoの場合と大差ありません。開発コミュニティが日本人に偏っていたとはいえ,Catalystの開発チームからはおおむね好意的に迎えられた結果,HTTP:EngineのIRCチャンネルには海外の開発者の姿も見られるようになっていました。リーデル氏にはHTTP::Engineの改善を進めるという道もあったはずです。

それなのに,なぜリーデル氏はあえてMojoを生み出したのでしょうか。

DRYとDIY

MojoとHTTP::Engineのもっとも顕著な違いは,CPANモジュールに対する態度といえます。

HTTP::Engineや,そのもととなったCatalystは,Perl界の定石にのっとって,定番のCPANモジュールがあればなるべくそちらを利用するような形で開発が行われてきました。

ただし,定番のモジュールといっても,かならずしもインターネットの標準に準拠しているとは限りません。速度や手間とのトレードオフを考えて手抜きが行われていたり,そもそも標準が制定される前の実装であったりと,理由はさまざまですが,どこかしら不完全な部分を抱えているものです。

たとえば,HTTP::EngineやCatalystが利用しているHTTP::BodyやCGI::Simpleには,いまなおRFCに準拠していない箇所があるというバグレポートが届いていますし(※1),スタンドアロンサーバに利用しているHTTP::Server::SimpleもHTTP/1.1の機能をフルに実装しているわけではありません。

※1

http://rt.cpan.org/Public/Bug/Display.html?id=34310
http://rt.cpan.org/Public/Bug/Display.html?id=41407

そんなHTTP::EngineやCatalystを反面教師に生まれたMojoは,一部のコアモジュールを除いて外部のモジュールは利用していません。フォームデータのパースも,URLの操作も,リクエストやレスポンスの取り扱いも,すべて自前で行っています。

リーデル氏のねらいは,ともすれば標準が定まる前からあるような古いモジュール,実装の不十分なモジュールを一掃することで,つもりつもったバッドノウハウや古びたインタフェースに引きずられることなく,より現代的な,標準に準拠した,統一感のある実装を行うことにありました(これまで詳しく取り上げませんでしたが,paramメソッドひとつとってもCGI.pmなどのparamメソッドとは細かな挙動が異なっています)。

リーデル氏は現在CPANにあがっているモジュールのなかでMojoだけがクッキーを正しく処理できると主張していますが,その是非はさておき,インターネットの標準に対する意識が高いことはリポジトリにRFCのテキストが含まれていることからもうかがえます。

著者プロフィール

石垣憲一(いしがきけんいち)

あるときは翻訳家。あるときはPerlプログラマ。先日『カクテルホントのうんちく話』(柴田書店)を上梓。最新刊は『ガリア戦記』(平凡社ライブラリー)。

URLhttp://d.hatena.ne.jp/charsbar/

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス