この記事は,日経ソフトウエア2006年9月号,連載「簡単実装で学ぶWeb技術2006」の第3回「Catalyst――Perl向けWebアプリ・フレームワーク」の再録です。記事は執筆時の情報に基づいており,現在では異なる場合があります。
結城 浩(ゆうき ひろし)
1963年生まれ。仕事&趣味は「プログラム書き&文章書き」。JavaやPerlの入門書で人気の著者。Webサイトはhttp://www.hyuki.com/

 こんにちは,結城浩です。今回はPerlのWebアプリケーション・フレームワーク「Catalyst」を解説し,簡単なメモ帳プログラムを作ります。

 Catalyst(カタリスト)は,Perlで作られたWebアプリケーション・フレームワークです。Catalystを使うと,Webアプリを簡単に作成・テスト・配布することができます。catalystという単語のそもそもの意味は,「触媒」あるいは「促進させるもの」です。Perlのモジュール同士を触媒のようにうまく結びつけて,Webアプリ作成を促進させるという意味の名前なのでしょう。

 Catalystのオフィシャルページは,http://www.catalystframework.org/です*1。また開発者向けのページが,http://dev.catalyst.perl.org/にあります。

いうなればPerl on Rails

 Webアプリケーション・フレームワークというと,最近はRubyの「Ruby on Rails」が流行しています。Catalystはいうなれば「Perl on Rails」です。実際,(1)ヘルパースクリプトを使ってプログラムのひな型を自動生成する,(2)複数のコントローラを持つことができる――など,CatalystはRuby on Railsと同様の機能を備えています。

 Perlでなにかプログラムを作るとき,豊富なモジュールを保持しているCPAN*2の存在は欠かせません。CatalystはCPANに用意されているモジュールをうまく組み合わせて動きます。通常のPerlアプリケーションのようにCPANのモジュールを使うこともできますし,CatalystのMVC(すぐ後で説明)のコンポーネント(構成要素)として使えるCPANモジュールもたくさんあります。また,Catalystの機能を拡張するプラグインもCPANに多数あります。主なプラグインの一覧は,コマンドラインで

perldoc Catalyst::Manual::Plugins
として見ることができます。その一部を表1に示します。
表1●Catalystに関連する主なCPANモジュール
モジュール名 説明
Catalyst::Plugin::AtomServerAtom APIサーバー用プラグイン
Catalyst::Plugin::Authentication認証用プラグイン(関連多数)
Catalyst::Plugin::Browserブラウザ判定用プラグイン
Catalyst::Plugin::Compress圧縮(Deflate,Gzip,Zlib)用プラグイン
Catalyst::Plugin::Config設定(JSON,INI,Perl,XML,YAML)用プラグイン
Catalyst::Plugin::DateTime日付関連プラグイン
Catalyst::Plugin::DefaultEndよく使うendを定義したプラグイン
Catalyst::Plugin::Dumperデータ・ダンプ・プラグイン
Catalyst::Plugin::Emailメール関連プラグイン
Catalyst::Plugin::FillInFormHTML::FillInFormを使ってフォームに値を埋め込むプラグイン
Catalyst::Plugin::FormValidatorフォームの値が正しく埋められたかを調べるプラグイン
Catalyst::Plugin::PrototypeAjax関連プラグイン
Catalyst::Model::CDBIClass::DBIを使ったモデル
Catalyst::Model::DBICDBIx::Classを使ったモデル
Catalyst::Model::PlucenePlucene検索エンジンを使ったモデル
Catalyst::Model::XapianXapian検索エンジンを使ったモデル
Catalyst::View::HTML::TemplateHTML::Templateモジュールを使ったビュー
Catalyst::View::MasonHTML::Masonモジュールを使ったビュー
Catalyst::View::PSPText::PSPモジュールを使ったビュー
Catalyst::View::PetalPetalモジュールを使ったビュー
Catalyst::View::TTTemplate::Toolkitを使ったビュー

 Catalystには組み込みのWebサーバーがありますから,ApacheなどのWebサーバーがなくても,すぐに動作を確かめることができます。

 そのほかに,アプリが異常動作したときに現在の状態をWebページとして一覧表示してくれる機能や,デバッグ・プリントをサーバーのログとして出力する機能,さらには,作ったアプリケーションをロード時に解析して,プラグインの一覧,実行可能アクションの一覧などを自動的に表示してくれる機能もあります。

 このように,CatalystはWebアプリケーションを作る際に毎回やらなければならないことを全部用意してくれるありがたい環境なのです。

Model-View-Controllerとは

 Catalystはアプリケーションの構造として,Model-View-Controllerというパターンを採用しています。略してMVCと呼びます。MVCはアプリケーション作成のパターンで,アプリケーションをモデル(M)・ビュー(V)・コントローラ(C)の三要素に分解するものです。

 モデルは,一言でいえばデータです。一般にはデータベースを想像すればよいですが,最近では,ほかのサイトからWebサービスを介して得られる情報もモデルとして考えられるでしょう。例えば,RSSフィード,Amazon APIの商品情報,Google APIの検索結果などを想像してください。これらのモデルは「ユーザーの目にどのように見えるか」とは無関係の,データそのものです。アプリケーションのうちモデルを担当するモジュールは,データベースの操作を行うのが普通です。

 ビューは,一言でいえば見栄えです。WebアプリならばHTMLやCSSを想像すればよいでしょう。そのほかにもプレーンテキストとして表示したり,PDF形式にしたり,あるいは目には見えませんが,音による出力などもビューの担当になるでしょう。アプリケーションのうちビューを担当するモジュールは,情報のレイアウトや提示方法を処理します。

 コントローラは,一言でいえば制御の流れです。コントローラはユーザーからの要求を元に,モデルと情報をやりとりし,それをビューに渡します。アプリケーションのうちコントローラを担当するモジュールには,アプリケーションの本質的な処理の流れが記述されます。

Catalystをインストールする

 以下ではCatalystをインストールしてから,簡単なサンプル・プログラムを動かしてみます。ここで紹介するサンプル・プログラムは,日経ソフトウエアのWebサイト(http://software.nikkeibp.co.jp/)からダウンロードできます。以下のリンク「2006年9月号」を参照してください。

 では,Catalystのインストールから始めましょう。筆者は,以下の環境からスタートしてCatalystをインストール+動作させました。

  • Windows XP
  • ActivePerl v5.8.8*3

 まず必要なモジュールをダウンロードします。CPANを利用して,

perl -MCPAN -e 'install Task::Catalyst'

と入力すれば,Catalystの動作に必要なモジュールがそろいます。

SQLiteもインストールする

 今回のサンプル・プログラムでは,データベースとしてSQLite*4を使います。まずCPANを利用して

perl -MCPAN -e 'install DBD::SQLite2'

として,SQLite2に接続するためのライブラリをインストールしてください。

 加えて,コマンドライン版のSQLiteをhttp://www.sqlite.org/download.htmlからダウンロードしてインストールします。筆者はWindows用のプログラムとしてsqlite-2_8_17.zipをダウンロードしました。zipファイルを展開するとsqlite.exeがあるので,これをPATHの通ったディレクトリに置いておきます。

 設置できたら,図1のようにして動作確認してください。コマンド「.help」で利用できるコマンドの一覧が表示され,「.exit」で終了します。

図1●SQliteがインストールできたかを確認する
図1●SQliteがインストールできたかを確認する