モダンPerlの世界へようこそ

第9回 Jifty:一足早いクリスマスプレゼント

この記事を読むのに必要な時間:およそ 5.5 分

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の世界で起こった変化をふまえながら,TwitterWassrのようなサンプルアプリケーションをひとつつくってみましょう。コードはgithubに置いておきますので,必要ならcloneしてお使いください。

※1

Abusing Domain Specific Languages for Fun and Profit

環境を構築する

ご多分に洩れず,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プログラマ。先日『カクテルホントのうんちく話』(柴田書店)を上梓。最新刊は『ガリア戦記』(平凡社ライブラリー)。

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

コメント

コメントの記入