【Perl】 Catalystで簡単なWebアプリケーションを作成する

投稿日: / 更新日:

今回は、Perlの代表的なWebフレームワークであるCatalystを使って、Hinemosの直近のイベント履歴をJSON形式で取得するサンプルアプリケーションを作成してみます。

なお、アプリケーションの仕様は、http://localhost:3000/event/N/へHTTP-GETすると、直近”N”件のイベント履歴(未確認のもの)をHinemosDBから取得してJSONとして返す、という非常に簡単なものです。以下に、大まかな手順を記します。

2012/01/16 11:00追記 コントローラにロジックを詰め込み過ぎていたので、ロジックを処理するためのモデルクラスへ分離しました。

1. 必要なモジュール

まず、Perlの実行環境に加えて、以下のCPANモジュールをあらかじめインストールしておきます。

2. アプリケーションのスケルトンを作成

Catalystインストール時に併せてインストールされる、catalyst.plというスクリプトを実行すると、アプリケーションのスケルトンを生成することができます。ここでは、アプリケーションのパッケージ名をHinemosWS::Liteとします。以下は、スクリプトを実行している様子です。

3. モデルを作成

まず、モデルクラスを作成します。先ほど生成されたスケルトンの中に、hinemosws_lite_create.plというヘルパースクリプトが含まれており、これを使用することでモデルクラスを生成することができます。

モデルクラスの生成は2段階に分かれます。まず、HinemosDBのスキーマを解析してPerlのオブジェクトとして扱うためのスキーマクラスを生成します。以下は、ヘルパースクリプトを実行してスキーマクラスを生成している様子です。

この作業により、HinemosDBのスキーマを解析して、各テーブルやカラム、行をPerlのオブジェクトとして扱うためのクラス群が自動生成されます。

続いて、DBからイベント履歴を取得するためのロジックを記述するモデルクラス(のスケルトン)を生成します。

生成したHinemosWS::Lite::Model::Eventクラスには、後述の手順でロジックを追加します。

4. ビューを作成

次に、ビュークラスを作成します。こちらも先ほどと同様、ヘルパースクリプトを使用します。このクラスは、DBから取得したデータをJSONとして出力するためのものです。以下は、ヘルパースクリプトを実行してビュークラスを生成している様子です。

生成したHinemosWS::Lite::View::Eventクラスには、後で(ほんの少しだけ)手を加えます。

5. コントローラを作成

続いて、コントローラクラスを作成します。このクラスがリクエストURIやパラメータ等を解析し、あらかじめ定義したアクションへ処理をディスパッチする役目を持ちます。以下は、ヘルパースクリプトを実行してコントローラクラスを生成している様子です。

生成したHinemosWS::Lite::Controller::Eventクラスには、モデルのロジックを呼び出す処理を後ほど追加します。

6. モデルクラスを修正

上記3.の手順で生成したモデルクラスのモジュールファイル(lib/HinemosWS/Lite/Model/Event.pm)へ、以下のコードを追加します。

上記は、HinemosDBのイベント履歴テーブルからデータを取得する処理の本体になります。なお、HinemosDBへの負荷を考慮し、ここでは取得件数を最大10件に制限しています。

7. コントローラを修正

上記5.の手順で生成したコントローラクラスのモジュールファイル(lib/HinemosWS/Lite/Controller/Event.pm)へ、以下のコードを追加します。

なお、上で追加したサブルーチンをアクションと呼びます。このアクションでは、URIの最後尾に指定した件数を上限として、モデルクラスを通してHinemosDBのcc_event_logテーブルから未確認イベントを出力日時の新しい順に取得し、ビューへ渡します。ここでは、PerlのO/RマッピングフレームワークであるDBIx::Classを使用して、生のSQLを全く書かずにデータを取得し、そのままPerlのオブジェクトとして扱っています。

なお、件数の部分に数値以外の文字列を指定した場合は、不正な引数とみなして403を返します。

8. ビューを修正

上記4.の手順で生成したビュークラスのモジュールファイル(lib/HinemosWS/Lite/View/Event.pm)へ、以下のコードを追加します。

これにより、コントローラから渡されたオブジェクトをJSON化する際にインデントを付けて整形します。

9. Catalystサーバを起動

以上で準備が整ったので、早速Catalystの開発用サーバを起動します。コマンドは以下のとおりです。

端末上に上記のような出力があれば(かつ、エラーが出力されていなければ)、起動は成功です。

10. 動作確認

別の仮想端末からサーバにアクセスして、JSONを取得してみます。

無事、HinemosDBから直近のイベント履歴を5件取得できました。出力されたJSONは、見栄えよく整形されていることが分かります。また、取得件数の代わりに文字列(blah)を指定すると、

意図したとおり、403が返されることが確認できました。

以上、Catalystを使用して簡単なWebアプリケーションを作成する方法をご紹介しました。Catalystを使うことで、このように非常に少ない手間でWebアプリケーションを作成することができます。機会があれば、もう少し複雑なWebアプリケーションについてもご紹介したいと思います。

Hinemos導入はアトミテックにお任せください

見積もりを依頼する

最新情報発信中

Xやメルマガでも、Hinemosの保守、
開発、導入、構築やカスタマイズ等の
お役立ち情報を発信しています。
是非ご登録ください。