Catalystやってみた
土曜日が休みだと心に余裕ができるなあ。
WEB+DB PRESSを初めて買って読んでたらCatalystとMoose使ってたコードが載ってて自分でもやってみたくなったのでやってみたのでその記録。
とりあえず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入門」(まだ全部読んでない)に書いてあった。
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使ってみた。
なんでこんなにやりたいことはいっぱいあるのに自由と体調が追いつかないんだ?