前回はArkを使用した開発方法と開発の一連の流れを説明しました。今回から2回に分けてより実用的なサンプルアプリケーションを作成しながら,Arkの機能をより詳しく紹介します。
掲示板の概要
今回作成するアプリケーションは,OpenID認証を使用したシンプルな掲示板アプリケーションです。
モデルとビュー
前回はコントローラだけしか使用しませんでした。今回はモデルとビューもすべて使用します。
Arkは,モデルやビューなど自分の使いたいモジュールを組み合わせて使用することができるようになっています。コントローラ以外は,CPANにある好きなモジュールを使えるということです。 これは膨大な量のCPANモジュールを持つPerlならではの発想かもしれません。
モデル
モデルはアプリケーションのロジックを定義するクラスです。
上記の例ではデータベースやキャッシュ周りのモジュールをモデルとして使用するという例を挙げましたが,実際にはArkではモデルにアプリケーションロジックを書くこと,またその処理をArkアプリケーションのモデルクラスに書くのではなく,単体の外部モジュールとして実装することを推奨しています。
この方法は,ロジックをArkアプリケーションから切り離し単体で使用できるようにすることで,テストがしやすかったり,コマンドラインスクリプトからも同じロジックを使用可能などのメリットがあるためです。
最近ではCatalystでもこの方法を推奨するようになってきていて,『モダンPerl入門』(4.4 効率的なモデルの書き方)という書籍でも詳しく解説されています。
このモデルの方法をサポートするために,Arkでは,外部モジュールをモデルとして使用するためのベースクラスにArk::Model::Adaptorという物を用意しています。
このクラスを使用すると,以下のようなコードで外部モジュールを簡単にArkモデルとすることができます。
package MyApp::Model::Cache
use Ark 'Model::Adaptor';
__PACKAGE__->config(
class => 'Cache::Memcached',
args => { servers => ['127.0.0.1:11211'] },
);
1;
このコードは Cache::Memcached をモデルとして使用する例です。こうするとコントローラから
$c->model('Cache')
でCache::Memcachedオブジェクトにアクセスできます。
この機能を使用し,アプリケーションのロジックはすべて外部モジュールに定義するようにします。
ビュー
ビューはWebアプリケーションの最終出力部分を司るクラスです。テンプレートエンジンを使用して出力するHTMLを作成したり,JSONやXMLなどのシリアライザモジュールを使用しそれらの形式のデータを作成したりということを担当します。
こちらもモデルと同じようにアダプターを使用して外部モジュールに丸投げする,といった方法も可能なのですが,ビューはもうすこしArkに密接に連携していたほうが使いやすいため少しラッピングしたものを用意して使用します。
現在のバージョンでは,Text::MicroTemplateというテンプレートエンジンに対応したArk::View::MTというビューが用意されています。
プラグイン
プラグインはセッション機能,認証機能などWebアプリケーションでよく必要になる機能を実装したコンポーネントです。これらをロードすることで簡単にそれらの機能を追加していくことができます。
今回はログイン処理のために
- セッションプラグイン
- 認証プラグイン
を使用します。
アプリケーションの作成
それではアプリケーションを作っていきましょう。今回作るアプリケーションのソースコード全体はgithubに上げてありますので,そちらも併せて参照ください。
依存モジュール
今回作成するアプリケーションは,Ark インストール時にインストールされるモジュール以外の以下のモジュールにも依存しています。
- DBIx::Class::Schema::Loader(DB接続に使用)
- DBD::SQLite(SQLiteデータベース)
- Net::OpenID::Consumer(OpenID認証に使用)
- LWPx::ParanoidAgent(OpenID認証に使用)
- DateTime(日付データに使用)
作業を進める前にこれらのモジュールをインストールしてください。


