Perl日記

PerlとかRubyとかPHPとかPythonとか

Catalystやってみた

土曜日が休みだと心に余裕ができるなあ。
WEB+DB PRESSを初めて買って読んでたらCatalystMoose使ってたコードが載ってて自分でもやってみたくなったのでやってみたのでその記録。
WEB+DB PRESS Vol.54
とりあえずCatalystを自分のMacに入れて、適当に雛形を作る。

% mkdir catalyst_test
% cd catalyst_test
% catalyst.pl MyTest::Web
created "MyTest-Web"
created "MyTest-Web/script"
created "MyTest-Web/lib"
.....
Change to application directory and Run "perl Makefile.PL" to make sure your install is complete

なんかいっぱいできた。
中にはCPAN形式でちゃんともう揃ってある。

% ls
Changes       README   mytest_web.conf  script
Makefile.PL   lib      root             t
% ls lib
MyTest
% ls lib/MyTest/
Web  Web.pm
% ls lib/MyTest/Web
Controller  Model     View

あーこれがMVCの三つなのか。
初めて知ったよ…。
まあとにかく記事にあるようにテストサーバを起動してみる。

% ./script/mytest_web_server.pl

http://localhost:3000/」にアクセス!
見れた!
これだけでテンションが上がる僕はまだ初心をいろいろ忘れていないと思う。
Ctrl-Cで切ってから、今のサンプルページって変えられないのかなと思って、「モダンPerl入門」(まだ全部読んでない)に書いてあった。
モダンPerl入門 (CodeZine BOOKS)
Catalyst::View::TTがなかったのでCPANから入れて、テンプレートのキット準備。
レンダリング用のViewを作成(よく分かってません)。

% ./script/mytest_web_create.pl view TT TT
 exists "/........./catalyst_test/MyTest-Web/script/../lib/MyTest/Web/View"
 exists "/........./catalyst_test/MyTest-Web/script/../t"
created "/........./catalyst_test/MyTest-Web/script/../lib/MyTest/Web/View/TT.pm"
created "/........./catalyst_test/MyTest-Web/script/../t/view_TT.t"

lib/MyTest/Web/Controller/Root.pm にページ表示処理があるみたい。
以下、PODだけちょっと削ったRoot.pm。

package MyTest::Web::Controller::Root;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller' }
__PACKAGE__->config(namespace => '');
=head2 index
The root page (/)
=cut
sub index :Path :Args(0) {
    my ( $self, $c ) = @_;
    # Hello World
    $c->response->body( $c->welcome_message );
}
=head2 default
Standard 404 error page
=cut
sub default :Path {
    my ( $self, $c ) = @_;
    $c->response->body( 'Page not found' );
    $c->response->status(404);
}
=head2 end
Attempt to render a view, if needed.
=cut
sub end : ActionClass('RenderView') {}
__PACKAGE__->meta->make_immutable;
1;

ってここでMooseが出てくるのか。
CatalystってMooseが使われてたんだ。
このindex()の中をまずは消して

sub index :Path :Args(0) {}

モダンPerl入門」より、

この変更を加えることにより、rootディレクトリ内のindex.ttをレンダリングしてくれるようになりました。しかしroot/index.ttは自動生成されないので自分でエディタを使って"Hello, World"と書いたファイルを用意し、root/index.ttに保存します。

されば。

% cat > ./root/index.tt << \EOF
> Hello, Catalyst and Moose!!
> EOF

テストサーバをもう一度起動して、

% ./script/mytest_web_server.pl

http://localhost:3000/」にアクセス!

見れた!
ターミナルにはこんなログが出てた。

[info] *** Request 1 (0.050/s) [33093] [Sat Dec 26 23:06:18 2009] ***
[debug] "GET" request for "/" from "127.0.0.1"
[debug] Path is "/"
[debug] Rendering template "index.tt"
[info] Request took 0.050711s (19.720/s)
.------------------------------------------------------------+-----------.
| Action                                                     | Time      |
+------------------------------------------------------------+-----------+
| /index                                                     | 0.000207s |
| /end                                                       | 0.046326s |
|  -> MyTest::Web::View::TT->process                         | 0.044836s |
'------------------------------------------------------------+-----------'

ちゃんとindex.tt使ってるって出てるな。すごい。


とまあこんな感じで初めてCatalyst使ってみた。
なんでこんなにやりたいことはいっぱいあるのに自由と体調が追いつかないんだ?