[perlメモ]perlのフレームワークCatalystで遊んでみる その2
前回の「[perlメモ]perlのフレームワークCatalystで遊んでみる その1」で
こんな感じでとりあえず、ファイルを生成して画面を確認してみるところまでやりました。
そして、参考にさせて頂いている2006年9月の記事「第4回 Catalyst(前編)—Perl向けWebアプリ・フレームワーク – 簡単実装で学ぶWeb技術:ITpro」を元にさらに実験を継続。
でもって、コメント欄でShinnya様からご指摘いただいたように、僕と同じように上記の記事を参考にしちゃう様な人は「そろそろ日経LinuxがDISられた理由について解説しておくか – TokuLog 改めB日記」の方もご参照ください。
◎生成されたファイルをいじる
1.参考記事の3ページ目を見ながらRoot.pmをいじる。パスは以下の通り。
Hello\lib\Hello\Controller\Root.pm
Root.pmの以下の部分を
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Hello World
$c->response->body( $c->welcome_message );
}
以下のように書き換えた。
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Hello World
# $c->response->body( $c->welcome_message );
$c->response->body( ‘Hello World!’ );
}
サーバーを起動時に「-restart」オプションを付けて
F:\WWW\work>Hello\script\hello_server.pl -restart
の様に起動しておいた場合、このファイル編集が行われてファイルが保存されたタイミングでファイル変更を感知して以下の様な表示とともにサーバーが再起動される事を確認した。実際にはページにアクセスするだけでもどんどんコマンドプロンプトにメッセージが流れる。
Saw changes to the following files:
– F:/WWW/work/Hello/lib/Hello/Controller/Root.pm (modify)
Attempting to restart the server
それから、やってみるとわかるけど、参考記事とは生成されるソースの内容がCatalystのバージョンの違いによるものと思いますが若干変わっているので注意です。
2.変更結果を確認
ブラウザをリロードしてみると変更結果が確認できます。どうなるかというと以下のようになりました。やっと初歩の初歩ですねw。
◎ビューってのを使ってみる
1.参考記事の「ビューを作る」を参考にしてやってみたら、エラーがでて失敗したw。
F:\WWW\work>cd Hello
F:\WWW\work\Hello>script\hello_create.pl view TT TT
exists "F:\WWW\work\Hello\lib\Hello\View"
exists "F:\WWW\work\Hello\t"
Couldn’t load helper "Catalyst::Helper::View::TT", "Can’t locate Catalyst/Helper
/View/TT.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at (eval 222
) line 3.
"
F:\WWW\work\Hello>
よくわかんないけど、ppmからCatalyst-View-TTでフィルタして「Catalyst::View::TT」をインストール
そして、再度挑戦したら、できた。はて、ppmからのTask-Catalystでは必要なパッケージが入らないのかな?まーいいやw。
F:\WWW\work\Hello>script\hello_create.pl view TT TT
exists "F:\WWW\work\Hello\lib\Hello\View"
exists "F:\WWW\work\Hello\t"
created "F:\WWW\work\Hello\lib\Hello\View\TT.pm"
created "F:\WWW\work\Hello\t\view_TT.t"
F:\WWW\work\Hello>
2.Root.pmを編集。
参考記事を参考にあってるのかわかんないけど以下のように修正してみた。
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Hello World
# $c->response->body( $c->welcome_message );
# $c->response->body( ‘Hello World!’ );
$c->stash->{template} = ‘root.tt’;
$c->strash->{message} = ‘Hello!’;
}
それから、
以下を
sub end : ActionClass(‘RenderView’) {}
以下のように
sub end : ActionClass(‘RenderView’) {
my ( $self, $c ) = @_;
$c->forward( $c->view(‘TT’) ) unless $c->response->body;
}
で、結果は、以下のようにエラー画面
3.参考記事を参考にroot.ttを作成。
Hello\root\root.tt
を下記の内容で作成。
<html>
<body>
<h1>[% c.stash.message %]</h1>
<p>
[% c.stash.template %]
</p>
</body>
</html>
再度、ブラウザで確認。
あれ、まだ、同じエラーのままだ。あ、よくエラーを見てみるとRoot.pmの36行目がおかしいと出てます。
Caught exception in Hello::Controller::Root->index "Can’t locate object method "strash" via package "Hello" at F:/WWW/work/Hello/script/../lib/Hello/Controller/Root.pm line 36."
Root.pmの36行目(下の赤い文字ある行)をみるとつづり間違ってましたw。
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Hello World
# $c->response->body( $c->welcome_message );
# $c->response->body( ‘Hello World!’ );
$c->stash->{template} = ‘root.tt’;
$c->strash->{message} = ‘Hello!’;
}
以下のように修正。
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Hello World
# $c->response->body( $c->welcome_message );
# $c->response->body( ‘Hello World!’ );
$c->stash->{template} = ‘root.tt’;
$c->stash->{message} = ‘Hello!’;
}
再度ブラウザで確認。
うまくいったようです。
まてよ、ということは、root.ttファイルがなかった時、実際にはどんなエラーが表示されるのか気になるのでroot.ttをリネームして確認してみた。
↓こうでした。
というわけで、MVCのV(View)の部分をやったわけです。今日はこれくらいにしといてやるぜw。
まとめると、root.ttでアプリとがわの部分を切り分ける事ができるというわけですね。デザイン重視のアプリだと通常、プログラマとデザイナは別々に作業するので、効率いいですね。デザインの修正でアプリをいじる必要もないわけですし。まあ最近では普通にCGI作る場合でもちょっと気のきいたものを作るときはテンプレートファイルを作成してプログラム部分とデザイン部分は切り分けるような作り方をしていると思います。僕自身もちょっと気の利いたものを作るときはそうしてます。
それから、今回、プログラムの編集にKomodo Edit 5.2を使ってみました。何気に激しく便利です。Komodo EditはActiveperlを開発している事でも有名なActiveStateの開発しているKomode IDEのエディタ部分らしいのですが無料で利用できます。Komodo IDEは有償らいしいですがどう違うのかは知りませんw。いつもコードを書くのに僕は秀丸エディタを使っていますが、久しぶりにこういうIDEっぽいのを使ってみました。IDEぽいのを使うのはVisual StudioやVB以来久しぶりです。
ちょっと使ってみた感じですが、色々箇条書きにしてみると、
- プロジェクトを作成作業すると関連するファイルがツリー表示で管理できるので、ファイルがどこに行ったか迷わなくて便利。
- タブエディタで便利。
- コードの色分けもできて便利。
- WEBの表示もできるので、Catalystと組み合わせるとコード修正>保存>リロード、で結果を確認できて便利。
- デフォルトだとタブはスペースで入るみたい。(設定でタブ文字に変更できるのかな?)
- 括弧を入力すると閉じかっこを入力してくれるなど入力補助もしてくれて便利。
- とりあえずメニューは英語。
- 定型文を登録できるみたいなので、よく使う命令は登録しておくと便利っぽい。
- いろんなプログラム言語に対応してるらしい。
といった感じです。ちょっと使った感じでこれなので他にも色々便利な機能がありそうですね。