NanoA というウェブアプリケーションフレームワークをかいてみた
CGI というシーンにおける現状の Perl のウェブアプリケーションフレームワークの問題点とは
といったあたりであると認識している。
http://d.hatena.ne.jp/tokuhirom/20081111/1226418572
自分は、Sledge も Catalyst も Mojo も Rails も boofy も使ったことがありませんが、別に必要なモジュールをロードしたり bless したりするのはしょうがないのかなと思います。ただ、
- 不要なコントローラ (+それに伴う多数のモジュール) までロードしている
ということが一番の問題なのかなと思いました。というわけで作った。
特徴はコントローラの遅延ロードとディスパッチテーブルレス設計。売りは、ビューをいっぱい足して行っても速度が落ちないよ、というところ (モデルは DBI!)。以下使い方。
以下の使い方は古いです。今はもっと簡単。Nanoa のアプリケーション開発手法 - kazuhoのメモ置き場
1. index.cgi を書く
ウェブアプリケーション全体の初期化コードやフックは、全て index.cgi に書きます。
#! /usr/bin/perl use strict; use warnings; use lib qw(../lib); use NanoA; NanoA::Dispatch->dispatch({ prefix => 'MyApp', # prerun => sub {}, # postrun => sub {}, # dbh => DBI->connect(...), # some_config => xyz, });
2. 各コントローラを書く
コントローラのパスは prefix/path_info になります。つまり、index.cgi で prefix => 'MyApp' とした場合、実行されるコントローラは、
のようになります。各コントローラは NanoA.pm を継承して run メソッドを定義するだけです。こんな感じ。
package MyApp::hello; use strict; use warnings; use base qw/NanoA/; sub run { my $self = shift; my $name = $self->query->param('name'); $self->header_add( -type => 'text/plain', ); return << "EOT"; Hello, $name! EOT ; } 1;
テンプレートエンジンとかは好きにしてください。
kazuhoware 的には、むしろ Filter::SQL で ASP っぽく書けるようにしたい... それで速度が出るのかはわかりませんが。