Catalystの仕組み
Catalystそれ自体は非常にシンプルなフレームワークで、さまざまな処理は他のモジュールを使用することを前提にしています。
まず最初にCatalystのモジュールと、アプリケーションのモジュールがどのように連携して処理を実行していくかを見ていきましょう。
処理の流れ
WebブラウザなどのクライアントからリクエストがCatalystに送信されると、次のようなモジュールやコンポーネントを経由してクライアントにレスポンスが返ります。
それでは、処理の流れを見ていきましょう。
(1)リクエスト
Webブラウザなどのクライアントから送信されたリクエストを受けつけます。リクエストを受けつけるのは、Catalyst::Engineを継承したモジュールで、次のようなモジュールがあります。
| モジュール名 | 概要 |
| Catalyst::Engine::HTTP | 組み込みサーバで使用される簡易HTTPサーバ用エンジン |
| Catalyst::Engine::CGI | CGI用エンジン |
| Catalyst::Engine::FastCGI | FastCGI用エンジン |
| Catalyst::Engine::Apache::MP13 | Apache1.xで動作するmod_perl 1.3x用エンジン |
| Catalyst::Engine::Apache2::MP19 | Apache2.xで動作するmod_perl 1.99x用エンジン |
| Catalyst::Engine::Apache2::MP20 | Apache2.xで動作するmod_perl 2.x用エンジン |
(2)ディスパッチ
ディスパッチでは、要求されたURLにどのアクションが対応するかを解決し、そのアクションへ処理を振り分けます。
アクションとは、コントローラに定義される特別なアトリビュートを付加したメソッド(サブルーチン)です。アクションには、URLのパス部分と関連づけられるものと、直接URLに割り当てられず、他のアクションからのみ呼び出されるプライベートアクションの大きく2つに分けられます。
Catalyst::Engineはアプリケーション(実体はCatalystモジュール)で管理されており、リクエストを受信すると、CatalystモジュールによってコンテキストやCatalyst::Request(リクエストデータを管理するモジュール)、 Catalyst::Response(レスポンスデータを管理するモジュール)などを作成し、アクションを実行します。
Catalystにおけるコントローラは、「Catalyst::Controller」から継承されるコンポーネントで、パラメータチェック、アクションへのディスパッチ、フロー管理などリクエスト全般にわたる処理を担当します。
(3)データ操作
ディスパッチされたアクションから、必要に応じてRDBMSなどのデータを管理する処理を実装したモデルを介して、データの取得/登録などを行います。
Catalystにおけるモデルは「Catalyst::Model」から継承されるコンポーネントで、データの取得や変更などを担当します。主なモデルモジュールには次のものがあります。
| モデルモジュール名 | 概要 |
| Catalyst::Model::DBIC::Schema | DBIx::Class::Schemaを使用したモデル |
| Catalyst::Model::Xapian | 検索エンジンライブラリXapian用モデル |
| Catalyst::Model::LDAP | LDAP用モデル |
| Catalyst::Model::CDBI | Class::DBIを使用したモデル |
(4)他アクション実行
1回のリクエストについて、複数のアクションを実行することも可能です。その場合には「forward」メソッドで次に実行するアクションを指定します。
Catalystには、いくつかの組み込みプライベートアクションも用意されており、例えば「default」アクションでは、マッチするアクションがない場合に実行されます。
アクションについては、次回で説明していく予定です。
(5)レスポンス作成
多くの場合、Catalyst::Viewを継承したコンポーネントを利用して、ユーザーに返すレスポンスを作成します。ビューにはHTML以外にEmailやPDFなどのデータを作成するものもあり、さまざまな形式のデータにも簡単に対応させることができます。
Catalystにおけるビューは「Catalyst::View」から継承されるコンポーネントで、ユーザーへのデータ表示などを担当します。主なビューモジュールには次のものがあります。
| ビューモジュール名 | 概要 |
| Catalyst::View::TT | Template Toolkitを使用したビュー |
| Catalyst::View::Mason | HTML::Masonを使用したビュー |
| Catalyst::View::HTML::Template | HTML::Templateを使用したビュー |
| Catalyst::View::JSON | JSONフォーマットを生成するビュー |
(6)レスポンス
作成されたレスポンスは、アプリケーションを経由して、Catalyst::Engineからクライアントに返されます。
Catalyst::Controller、Catalyst::Model、Catalyst::ViewはすべてCatalyst::Componentを継承しています。

