Catalyst 5.7001まとめ

CPAN http://search.cpan.org/
Catalyst Runtime 5.7001 http://search.cpan.org/author/MRAMBERG/Catalyst-Runtime-5.7001/lib/Catalyst.pm
Catalyst Devel 1.0 http://search.cpan.org/author/MRAMBERG/Catalyst-Devel-1.00/lib/Catalyst/Devel.pm

最近のバージョンはCatalyst-RuntimeとCatalyst-Develの二つに分かれていて、Runtimeだけのインストールで実行環境は整うようだ(たぶん)。 もちろんDevel環境が無いとCatalystの意味がないんだけど。

以前の主流?は Catalyst+Template-Toolkit+Class::DBIといったかんじですが、現在はDBI::Classとなってます。 あと細々した部分が微妙にかわってたりする。ディレクトリのContoroller、Model,ViewがM,V,Cと短縮されてたりします。

インストールから開始まで

インストールはCPANから、RPMとかでもできるんですかね?そのへんよくわからない。 インストールが終わったら。ヘルパースクリプト(scriptにあるやつ)でアプリケーションのスケルトンを作っていく感じになる。
ちなみに以前のCatalystバージョンで作ったヘルパーとかは、新しいCatalystで -forceとかつければバージョンアップできる。

To upgrade your app to a new version of Catalyst:
catalyst.pl -force -scripts MyApp

それでは早速Appを作成する。

# catalyst.pl myapp
created "myapp"
created "myapp/script"
created "myapp/lib"
created "myapp/root"
created "myapp/root/static"
created "myapp/root/static/images"
created "myapp/t"
created "myapp/lib/myapp"
created "myapp/lib/myapp/Model"
created "myapp/lib/myapp/View"
created "myapp/lib/myapp/Controller"
created "myapp/myapp.yml"
created "myapp/lib/myapp.pm"
created "myapp/lib/myapp/Controller/Root.pm"
created "myapp/README"
created "myapp/Changes"
created "myapp/t/01app.t"
created "myapp/t/02pod.t"
created "myapp/t/03podcoverage.t"
created "myapp/root/static/images/catalyst_logo.png"
created "myapp/root/static/images/btn_120x50_built.png"
created "myapp/root/static/images/btn_120x50_built_shadow.png"
created "myapp/root/static/images/btn_120x50_powered.png"
created "myapp/root/static/images/btn_120x50_powered_shadow.png"
created "myapp/root/static/images/btn_88x31_built.png"
created "myapp/root/static/images/btn_88x31_built_shadow.png"
created "myapp/root/static/images/btn_88x31_powered.png"
created "myapp/root/static/images/btn_88x31_powered_shadow.png"
created "myapp/root/favicon.ico"
created "myapp/Makefile.PL"
created "myapp/script/myapp_cgi.pl"
created "myapp/script/myapp_fastcgi.pl"
created "myapp/script/myapp_server.pl"
created "myapp/script/myapp_test.pl"
created "myapp/script/myapp_create.pl"

/scriptにはヘルパーとテストサーバー、/tにはテスト /libにはCatalystアプリとなる。

自分がはまった関係でメモ。Catalyst-Runtime、DevelだけバージョンアップしてもCatalyst::Helperはバージョンアップされないのだ。
Catalyst::HelperのCPANからバージョンアップしておくこと。
(エラーでるから気づくけど)

created "myapp/script/myapp_cgi.pl" CGIで動かす場合
created "myapp/script/myapp_fastcgi.pl" FastCGI
created "myapp/script/myapp_server.pl" テストサーバー
created "myapp/script/myapp_test.pl" テスト
created "myapp/script/myapp_create.pl" スケルトン作成ヘルパー

Helper create

# script/myapp_create.pl -help
Usage:
    create.pl [options] model|view|controller name [helper] [options]

     Options:
       -help    display this help and exits

     Examples:
       create.pl controller My::Controller
       create.pl view My::View
       create.pl view MyView TT
       create.pl view TT TT
       create.pl model My::Model
       create.pl model SomeDB CDBI dbi:SQLite:/tmp/my.db
       create.pl model AnotherDB CDBI dbi:Pg:dbname=foo root 4321

     See also:
       perldoc Catalyst::Manual
       perldoc Catalyst::Manual::Intro

Modelの作成

# script/myapp_create.pl model Database DBIC DBI:mysql:testapp_db mysqluser password

こんなかんじでModel作成。 この場合Modelディレクトリの下にDatabaseをつくって、testapp_dbにあるテーブルを読み込んでModelスケルトンを作ってくれます。 便利。 テーブルが増えたらまたやればOK。

Viewの作成

# script/myapp_create.pl view TT TT

上の例はTemplate-Toolkitを使う場合。これでViewスケルトンをつくってくれる。
Templaet-Toolkitの設定はViewにあるTT.pmのconfigに書けばいい。

controllerの作成

# script/myapp_create.pl controller myapp

myapp_create.pl Ajaxってのもあるね。
myapp_create.pl controller myapp::hogeとするとさらにhogeディレクトリつくってhoge.pmつくってくれる。 Catalystは実行時にも下のディレクトリ(深いディレクトリ)から探して見てくれる。

テストサーバーの起動

script/myapp_server.plでテストサーバーが動く

# script/myapp_server.pl --help
Usage:
    testup_server.pl [options]

     Options:
       -d -debug          force debug mode
       -f -fork           handle each request in a new process
                          (defaults to false)
       -? -help           display this help and exits
          -host           host (defaults to all)
       -p -port           port (defaults to 3000)
       -k -keepalive      enable keep-alive connections
       -r -restart        restart when files got modified
                          (defaults to false)
       -rd -restartdelay  delay between file checks
       -rr -restartregex  regex match files that trigger
                          a restart when modified
                          (defaults to '\.yml$|\.yaml$|\.pm$')

     See also:
       perldoc Catalyst::Manual
       perldoc Catalyst::Manual::Intro
  • r でスクリプトが修正されればサーバーを再起動してくれる。これがとても便利。 -kでIEのバグとかを回避。


helperのcontrollerで作成されたlib/Controller/Root.pm

package myapp::Controller::Root;

use strict;
use warnings;
use base 'Catalyst::Controller';

#
# Sets the actions in this controller to be registered with no prefix
# so they function identically to actions created in MyApp.pm
#
__PACKAGE__->config->{namespace} = '';

=head1 NAME

myapp::Controller::Root - Root Controller for this Catalyst based application

=head1 SYNOPSIS

See L<testup>.

=head1 DESCRIPTION

Root Controller for this Catalyst based application.

=head1 METHODS

=cut

=head2 default

=cut

#
# Output a friendly welcome message
#
sub default : Private {
    my ( $self, $c ) = @_;

    # Hello World
    $c->response->body( $c->welcome_message );
}

#
# Uncomment and modify this end action after adding a View component
#
#=head2 end
#
#=cut
#
#sub end : Private {
#    my ( $self, $c ) = @_;
#
#    # Forward to View unless response body is already defined
#    $c->forward( $c->view('') ) unless $c->response->body;
#}

=head1 AUTHOR

root

=head1 LICENSE

This library is free software, you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

かなり古い(去年ぐらい)のCatalystだとRoot.pmは作られませんが、最近のだとRoot.pmを作成します。 主にRoot.pmにアクションを書いていく。 この場合sub default : Private にはCatalystのロゴがはいったデフォルトページが表示されるように書いてある。

$c->response->body( $c->welcome_message );
このあたりも最近の書き方っぽい。

http://search.cpan.org/~mramberg/Catalyst-Runtime-5.7001/lib/Catalyst.pm
最低限このあたりを読んでおけばだいたい、何ができるかとかがわかるとおもう。(ちゃんとみないでOPENでファイル書きだししたりしてたし・・) Pluginの豊富さもCatalystの魅力のうちだからCPANを検索しまくっていろいろ入れて遊んでみよう。
Helperがあるから簡単にアプリ作れるので、テストアプリを作って徹底的に遊んでみるのも良さそう。(こういう環境にはemacs+ange-ftpで決まりだね!)