モダンPerlの世界へようこそ
第9回 Jifty:一足早いクリスマスプレゼント
Perl 6チームからのクリスマスプレゼント
この連載でも何度か名前が出てきたPerl 6ですが,「クリスマスまでにはリリースされることになっている」という話はみなさん先刻ご承知のことと思います。
もちろんこの話には「どのクリスマスかは秘密です」というオチがつくわけですが,2000年の設計開始以降,これまでにも何度か「今年こそはひょっとするとひょっとするかも」という期待を持たれた年がありました。
オードリー・タン(唐鳳)氏がHaskellの勉強がてらわずか2ヶ月でPerl 6の処理系(Pugs)を実装して話題になった2005年は,まさにその筆頭格といってよいでしょう。
実際,この年はPerl 6とその関係者にとって非常に大きな意味を持つ年になったのですが,この年はまたRuby on Railsが本格的にブームになった年でもありました。ただでさえPerlからRubyに転向する人が後をたたなかったというのに,「クリスマスプレゼント」のひとつもないようでは,ますますPerl離れが加速するおそれがあったわけです。
この年前任のアリソン・ランダル(Allison Randal)氏からPerl 6のプロジェクトマネージャーの職を引き継いだジェシー・ヴィンセント氏は,世の父親がよくするように,それとなく「クリスマスプレゼント」の希望を聞いてまわりました。なかには「お父さん,私ポニーを飼いたいの!」という現実離れした要望もありましたが,そのような無茶振りにもなんとか応えてしまうのがドラえもんもといPerl使いの真骨頂。
残念ながらPerl 6そのものではありませんでしたが,その年のクリスマスに,氏は「ごちゃごちゃとデータベースをいじり回す必要のない」「Ajaxに対応した」「クリーンでシンプルな」「CPANを活用した」「バズワード満載の」クリスマスプレゼントを公開します。
それが,Jiftyというウェブアプリケーションフレームワークの始まりでした。
どこまで本当の言語らしく書けるか
Maypoleという既存の成功したフレームワークからユーザを引き継いだCatalystに比べると,ほとんどまっさらなところから生まれたJiftyは最初からそれほど多くのユーザを引きつけたわけではありません。
が,Jiftyのドメイン特化言語(DSL)を多用した宣言的なプログラミングは,モダンPerlの世界に大きな衝撃を与えました。翌2006年春に登場したMooseがいまのような形になった背景には,あきらかにJiftyの影響が見られます。
2007年のYAPC::Asiaでも紹介されていましたが(※1),Jiftyのドメイン特化言語は,Mooseの世界で見られるような「わかりやすい名前がついている(だけの,ふつうの)関数」ではありません。ソースフィルタリング以外のありとあらゆるPerlの黒魔術を駆使して,なるべく自然言語に近い書き方ができるように工夫されています。
その背景にある技術についてはまた次回以降取り上げますが,今回はまず,筆者が2006年にまるごとPerl! Vol.1にJiftyの入門記事を寄稿したあとでJiftyの世界で起こった変化をふまえながら,TwitterやWassrのようなサンプルアプリケーションをひとつつくってみましょう。コードはgithubに置いておきますので,必要ならcloneしてお使いください。
環境を構築する
ご多分に洩れず,Jiftyも多くのモジュールに依存しているので環境によってはインストールに苦労するかもしれません。Windowsユーザの方は筆者が管理しているPPMリポジトリなどを駆使して環境を構築してください。また,Jiftyのリポジトリから最新版をチェックアウトしたい方は下記のコマンドを実行してください。
> svn co http://svn.jifty.org/svn/jifty.org/jifty/trunk
Jiftyのインストールが済んだら,適当な作業ディレクトリでひな形をつくりましょう。
> jifty app --name MyApp
新しくできたMyAppディレクトリのなかには,設定ファイルや管理用のスクリプトなどが用意されています。
ログインまわりはプラグインを使えば簡単
今回は自分だけではなく,ほかのユーザも使えるものを目指したいので,Jiftyに同梱されている認証用のプラグインを利用することにしましょう。エディタでこのような内容のetc/site_config.ymlを用意してください。
framework:
Database:
Version: 0.0.1
Plugins:
- LetMe: {}
- User: {}
- Authentication::Password:
login_by: username
内容については直感的にわかると思いますので特に説明しませんが,CPAN版のAuthentication::Passwordプラグインにはバグがあるので,そちらを使っている方はlogin_byの値をemailに変えてください(リポジトリのほうでは修正済みです)。
続いて,シェルからこのようなコマンドを実行します。
> jifty model --name User
lib/MyApp/Model/User.pmにひな形ができるので,エディタで下のほうに次の3行を追加してください。最後の sub check_read_rights { 1 } は「このモデルのデータはだれでも読み取り可能」という意味です。
use Jifty::Plugin::User::Mixin::Model::User;
use Jifty::Plugin::Authentication::Password::Mixin::Model::User;
sub check_read_rights { 1 }
この段階で一度サーバを起動してみましょう。
> jifty server --start
これで自動的にデータベースの設定が行われて,「サインアップ」と「ログイン」というメニューが追加された初期画面にアクセスできるようになります。
モダンPerlの世界へようこそ
- 第27回 Test::Most:Test::Moreでは物足りなくなってきたら
- 第26回 ShipIt:モジュールのリリースをもっと手軽に
- 第25回 Module::Starter:モジュールを書くためのテンプレート
- 第24回 CPAN:Perl界の水先案内人
- 第23回 Module::Build:MakeMakerの後継者を目指して
- 第22回 Mojolicious::Lite:本当に簡単なウェブアプリがあればいいときは
- 第21回 KiokuDB:マッピングが複雑すぎると感じたら
- 第20回 Email::Sender:メールを送信する
- 第19回 Who's Who on IRC:Perl界の紳士録(IRC編)
- 第18回 local::lib:ふだんと違う環境でPerlを使う


