2005-04-21

SledgeLike - CGI::Application を Sledge っぽく使ってみる

はじめに

 Sledge は便利だけど、ちょっと(だいぶ?)大きい。

 CGI::Application は便利だけど、Sledge ほどは気が利いていない。

 というわけで、その間を埋めるモノを作ってみた。大雑把には Sledge のサブセット、と言えなくもないかもしれない。

概要

 基本的には Sledge + Sledge::DispatchQuery に似てる(予定)。

 Sledge::Pages の代わりに SledgeLike に差し替えれば動く(予定)。

 Sledge::Config はないので、その辺りの設定は起動スクリプトに記述しなくちゃいけない(少なくとも現状では)。

 というわけで、

  • Sledge でアプリケーションを作る。
  • *::Config に書いているモノ(で必要な部分)を起動スクリプトに書く。
  • *::Pages の代わりになる *::SledgeLike を作る。
  • 起動スクリプトを書き換える。

――とかすると、Sledge じゃなくて CGI::Application で動くコードに早変わりして(するといいなぁ)、Sledge がインストールできないサーバでも動かせるようになります(たぶん)。

 もっとも、CGI::Application + CGI::Application::Session をインストールできるのかっていう問題がありますけどね。。。

使い方

webapp.cgi:
 #!/usr/bin/perl
 use strict;
 use HelloWorld::Pages::Index;
 
 #HelloWorld::Pages::Index->dispatch_query( ".cmd" );	# Sledge 
 
 my $cgiapp = HelloWorld::Pages::Index->new(		# CGI::Application
     TMPL_PATH => '/path/to/template/dir',
     PARAMS => {
         session_dir => '/path/to/tmp/session',		# Session利用時
         foo => 'foo',
         bar => 'Bar',
     },
 );
 $cgiapp->mode_param( ".cmd" );
 $cgiapp->run;
 
 __END__

HelloWorld/SledgeLike.pm:
 package HelloWorld::SledgeLike;
 use strict;
 use base qw(SledgeLike);		# CGI::Application
 
 # 以下、HelloWorld::Pages に追加したメソッドなどを適当に。
 
 1;
 __END__

HelloWorld/Pages/Index.pm:
 package HelloWorld::Pages::Index;
 #use base qw(HelloWorld::Pages);
 use base qw(HelloWorld::SledgeLike);
 
 # 以下、元の HelloWorld::Pages::Index。
 
 1;
 __END__

 以上のような変更で動作するようになります(たぶん)。

 Sledge の機能を使いまくってると動きません。

 Pages::* をちょこちょこ書いてるくらいなら、だいたい動くでしょう(たぶん)。

注意点

register_hook メソッド

 register_hook 関係は CGI::Application っぽく書き直さないとだめです。

 たとえば BEFORE_DISPATCH を使ってたりする場合は、

 sub cgiapp_prerun {
     my $self = shift;
     $self->SUPER::cgiapp_prerun( @_ );
     # 以下、BEFORE_DISPATCH に書いた処理
 }

とかする必要があります。

今後の予定(は未定)

  • SledgeLike::Template まわりをもうちょっとなんとかする。
  • SledgeLike::Charset もあったほうが便利かな?
  • SledgeLike::Config は――別にいらないか。

CGI::Application::SledgeLike

――ってパッケージ名にしてたけど、長くて面倒だったので SledgeLike にしました。

 とりあえず動く気がします。

 細かいところ確認してないけど。Sessionとか。

 動作に必要なモジュールは

  • CGI::Application
  • CGI::Application::Session
    • セッションを使わないなら必要ないけど、useしちゃってる。useは外したほうがいいかな。
  • File::Spec
    • これって標準じゃないよね?
  • HTML::FillInForm
    • 書き忘れてたので追加。

あたり(だったと思う)。