Hatena::ブログ(Diary)

kazuhoのメモ置き場

2008-11-12

[] NanoA というウェブアプリケーションフレームワークをかいてみた

CGI というシーンにおける現状の Perlウェブアプリケーションフレームワークの問題点とは

といったあたりであると認識している。

はてなブログ

自分は、SledgeCatalystMojoRails も boofy も使ったことがありませんが、別に必要なモジュールをロードしたり bless したりするのはしょうがないのかなと思います。ただ、

ということが一番の問題なのかなと思いました。というわけで作った。

CodeRepos の /lang/perl/NanoA

特徴はコントローラの遅延ロードとディスパッチテーブルレス設計。売りは、ビューをいっぱい足して行っても速度が落ちないよ、というところ (モデルは 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' とした場合、実行されるコントローラは、

  • index.cgi => MyApp.pm
  • index.cgi/hello => MyApp/hello.pm

のようになります。各コントローラ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::SQLASP っぽく書けるようにしたい... それで速度が出るのかはわかりませんが。

NanoA を ASP 化 (PHP 化) した - kazuhoのメモ置き場 へ続きます

dayflowerdayflower 2008/11/12 12:48 ディスパッチテーブルレスとまではいきませんが CGI::Application::Dispatch もなかなかよいかと。

そもそも論ですが,動的ロードにしたところでアプリケーションが肥大化するにつれて共通して読み込むモデルやユーティリティが多くなってしまう気もします。もちろん「だからこのアプローチがだめだ」とかいうつもりはないのですが。

kazuhookukazuhooku 2008/11/12 13:28 dayflower さん、ありがとうございます。CGI::Application::Dispatch は、それを拡張した CGI::Application::URIMapping というモジュールを自作して使っていたりします。

> 動的ロードにしたところでアプリケーションが肥大化するにつれて共通して読み込むモデルやユーティリティが多くなってしまう

モデルも遅延ロードするという手はあると思います。自分はあまり興味ないですが...

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証