2005/10/18
Catalyst入門 と お作法について
id:naoyaの技術発表(10月15日の技術勉強会 - はてな技術発表会日記 - 機能変更、お知らせなど)。
これを聞いて、Catalyst面白そうということに気づいて触ってみています。
インストールと簡単な動作
Perl の MVC フレームワーク Catalyst に入門してみた : NDO::Weblogを一通り読めば分かると思います。
私の環境だと
sudo perl -MCPAN -e 'install Class::DBI::mysql'
を追加で行う必要がありました。
お作法
Catalystではどう書くのが正しいか等、迷う部分が多々あります。
いろいろ調べた結果、これだと思うものを紹介していき、標準化(?)のたたき台になればよいかなと。
URLマッピング
CatalystのURLマッピングはとても柔軟です。たくさん種類があってこまりますw。
sub hoge : Path('foo/bar') {}
sub hoge : Global {}
sub username : Regex('^user/(\w+)$') {}
マッチした文字列は、snippetsで取れる。
my $username = $c->req->snippets->[0];
追記:
Controllerを細かく作るというのを書き忘れてました。
forwardの種類
$c->forward('メソッド名')
$c->forward('パス')
$c->forward(qw/MyApp::M::Hello say_hello/); # クラスへのフォワード
Viewへのforward
毎回、Viewへ forward するのはとても面倒なので end を定義しておくと楽。
sub end : Private {
my ( $self, $c ) = @_;
$c->forward('MyApp::V::TT') unless $c->res->output;
}
静的なコンテンツをどう扱うか?
/images/hoge.png という画像にアクセスされたときは、root/images/hoge.png を返したいという場合。
cssやJavaScriptなどもこの部類だろう。
これも統一的な手法が見つからなかったので、以下の方法を提案してみるテスト。
Webサーバに依存しない方法となるとこんな感じかなぁ。(ディレクトリ単位でRegexもありかと思います。)
sub static : Regex('\.(jpg|jpeg|gif|png|css|js|ico)$') {
my ( $self, $c ) = @_;
$c->serve_static;
}
templateの include
[% include templates/user/username.tt %]
CDBIでテーブルのリレーションを使う
Catalystのヘルパースクリプトで自動生成される、CDBI用ののコードのままではリレーションが使えません。
自分で、ファイルに追記してあげないと駄目です。
たとえば collectionテーブルとcollectiontypeテーブルのリレーションならば
__PACKAGE__->columns(Primary => qw/type name/); __PACKAGE__->has_a(type => "MyAPP::M::CDBI::CollectionType");
こんな感じ。
くれぐれも、テーブル追加時ヘルパースクリプトを安易に起動しないように・・・(上書きされちゃいます)
おまけ Catalystとはてなフレームワーク
はてな社内ではCatalystの良いところは、はてなフレームワークに積極的に取り入れようという雰囲気になっています。
昨日も、「エラー発生時にブラウザにスタックとレースなどを表示する機能」を id:naoya が作っていました。
これまでは、Apacheのエラーログを tail -f などしていたのですが、他の開発者のエラーと混じるのでかなり困っていたのが大改善。
技術的には、mod_perlのハンドラでごにょごにょするだけなのですが、かなり開発効率が上がると思います。
最後に
Catalystのお作法について、「自分はこうやっているよ!」などありましたらぜひトラックバックなり、コメントをください。
みんな同じ部分で迷っているのではないだろうか?と思う今日この頃。
追記:その後
- Catalyst入門としてのお作法についてについて - Clouder::Bloggerからトラックバックをいただいた(素晴らしい)
Permalink | コメント(3) | トラックバック(0) | 20:03
![]()
- 85 http://mona.sourceforge.jp/
- 43 http://b.hatena.ne.jp/
- 42 http://d.hatena.ne.jp/help
- 27 http://www.hatena.ne.jp/
- 26 http://b.hatena.ne.jp/hotentry
- 26 http://www.hatena.ne.jp/info/diary
- 20 http://b.hatena.ne.jp/entrylist?sort=hot
- 19 http://www.hatena.ne.jp/diary
- 11 http://1470.net/mm/
- 11 http://d.hatena.ne.jp/
Mona OS - Free operating system
- 過去のおすすめ本一覧
- ハッカー養成塾:ハッカーへの遠回り
- 関数型言語の勉強の連載
- 一人読書会
- Ubuntu 7.10 Gutsy インストール
- Ubuntu 7.10 Gutsyへアップグレード
- Ubuntu 6.06 LTSインストール
- Ubuntu 6.10 Edgy インストール
- 計算機プログラムの構造と解釈
- Modern C++ Design読書会
- はてな退職のお知らせ
- プログラマとして最低限身につけるべき知識
21609311


