ECS 4.0 + CGI::AppplicationでWebアプリを作る #01

CGI::ApplicationはWebアプリを作るためのフレームワーク。やることは大きく分けて三つ。

  1. 何種類のページを作るかを決める
  2. 各ページに対応するメソッドを、CGI::Applicationのサブクラスで定義する。
  3. 2のクラスのインスタンスを作成し、runメソッドを呼び出すCGIスクリプトを作る。

Webサイトにアクセスすると、runメソッドが呼ばれる。その中で決められたCGIパラメータに対応するメソッドが呼び出され、ページが表示されるという仕組み。つまりは、

if ($mode == "index") {
    ...
} elsif ($mode == "search") {
    ...
} elsif ($mode == "browse") {
    ...
}

こういう風に書かなくて済む。他にも、プラグインで機能を追加できたりと、色々と便利らしい。

AmazonApp.pm

とりあえず、CGI::Applicationのサブクラスの大枠だけを作る。

package AmazonApp;

use strict;
use warnings;

use base qw(CGI::Application);

# 実行モードの設定
sub setup {
    my $self = shift;
    $self->mode_param("rm");    # 実行モードを判別するためのCGIパラメータ名
    $self->start_mode("index"); # デフォルトの実行モード
    $self->run_modes(           # 実行モード名 => 対応する関数
        index   => "do_index",  
        search  => "do_search",
        browse  => "do_browse",
    );
}

# インスタンス作成時に呼び出されるメソッド
sub cgiapp_init {

}

# 各モードの処理前に自動的に呼び出されるメソッド
sub cgiapp_prerun {

}

# 各モードの処理後に自動的に呼び出されるメソッド
sub cgiapp_postrun {

}


# 各モードの処理内容を定義
#
# トップレベルのブラウズノードと子ノードを表示
sub do_index {

}

# キーワードでの検索結果を表示
sub do_search {

}

# ブラウズノードの商品リストを表示
sub do_browse {

}

1;

index.cgi

次にCGIスクリプト

#!/usr/bin/perl

use strict;
use warnings;

use AmazonApp;

my $app = AmazonApp->new(
    PARAMS => {
        access_key => ""
    }
);

$app->run();

こちらはこれで完成。PARAMSで渡したデータは、$app->param("key") で取り出すことができる。