ついに出た!最新Perlフレームワーク「Ark」徹底解剖

第2回 Ark チュートリアル:基礎編

この記事を読むのに必要な時間:およそ 4 分

ひな形アプリケーションのファイル構成

それでは,ここで一度ark.plコマンドで作成されたひな形のファイル構成を見てみましょう。アプリケーションディレクトリ以下のファイルは,下記のようになっています。

Makefile.PLアプリケーション用のMakefile.PL
lib/ライブラリディレクトリ。実際のクラスはここに置かれる
root/ドキュメントルート。テンプレートやcss/jsなど静的ファイルを置く
t/テストディレクトリ。テストファイルを置く
tmp/tmpディレクトリ。アプリケーションの一時ファイルを保存する

また,libディレクトリ以下のファイルは,

画像

このような構成になっています。

Arkは,Catalyst同様MVC(Model-View-Controller)という概念を採用しており,ロジック処理(Model⁠⁠,HTMLなどの出力のレンダリング(View⁠⁠,そしてURLに紐づけられたアクションからのModelやViewへのディスパッチ処理(Controller)と役割を分担させることで見通しが良いコードが書けるように設計されています。

ModelとViewについては次回詳しく説明します。

それではRootコントローラを見てみましょう。中身はこのようになっています。

package HelloWorld::Controller::Root;
use Ark 'Controller';

has '+namespace' => default => '';

# default 404 handler
sub default :Path :Args {
    my ($self, $c) = @_;

    $c->res->status(404);
    $c->res->body('404 Not Found');
}

sub index :Path :Args(0) {
    my ($self, $c) = @_;
    $c->res->body('Ark Default Index');
}

1;

Catalystアプリケーションのコントローラを見たことがある人にはこのファイルが何をしているのかすぐにわかるでしょう。 Arkのコントローラクラスの書き方は,ほぼCatalystと互換性があります。

Catalystを知らない人は,このRootコントローラ内の関数に:Pathなどの見慣れない文字がついているのに気がつくかもしれません。これを関数の属性と言います。この属性自体は,Perlの機能の1つです。Ark ではコントローラ内でそのような属性の付けられた関数を「アクション」と呼びます。

アクションには大きく

  • Pathアクション :URLパスを元にするアクション
  • Regexアクション :正規表現を使用しるアクション
  • Chainedアクション :鎖状に複数のアクションをつなぐアクション

があり,これらはすべてURLに紐づけられます。これらをまとめてパブリックアクションと呼びます。

これらのアクションの詳細はドキュメントのコントローラとアクションの項にまとめています。

Hello World!という出力を出す

それでは ⁠Hello World!」という出力を表示するにはどうしたらいいでしょうか。

トップページにアクセスしたときに実行されるのは

sub index :Path :Args(0) {
    my ($self, $c) = @_;
    $c->res->body('Ark Default Index');
}

という index アクションです。ここで

$c->res->body('Ark Default Index');

という処理がありますが,ここがレスポンスの本文を指定している部分です。つまりここを

$c->res->body('Hello World!');

と変更すれば良いということになります。

変更後,開発サーバを再起動してから再びページにアクセスしてみてください。

図3 Hello World! 出力

図3 Hello World! 出力

「Hello World!」という文字が表示されましたか? 表示されていれば,Hello World!アプリケーションの完成です。

コンテキストオブジェクト($c)

アクションには第二引数として必ずリクエストのコンテキストオブジェクト($c)が渡されます。このオブジェクトは,$c->request($c->req)にリクエストの情報を,$c->response ($c->res) にレスポンス情報を持ちます。

したがってリクエスト情報を得るには $c->request を参照し,レスポンスを返すには $c->response に値を入れてあげればいいということになります。

またコンテキストオブジェクトは処理を他のアクションに渡す $c->forward,$c->detach メソッド,複数のアクション間でデータを共有するために使用する $c->stash メソッドなどさまざまな機能を持ちます。詳しくはリファレンスマニュアルのArk::Contextの項を参照ください。

Ark の開発の流れ

Arkの開発の流れは

  1. ark.pl を使用してひな形の作成
  2. 必要に応じてark.plを使用してcontroller/model/viewのひな形を作成
  3. ひな形を修正
  4. 開発サーバでの確認

というステップの繰り返しで行います。このように,Arkは組み込みの開発サーバを持つためローカルで素早く開発・動作確認が行えます。

まとめ

今回は,HelloWorldアプリケーションの作成を通じて,Arkアプリケーションの開発工程の流れを説明しました。

次回はログインが必要な掲示板アプリケーションの作成を通してArkのより深い機能を紹介します。

著者プロフィール

村瀬大輔(むらせだいすけ,ハンドルネーム:typester)

1981年2月生まれ。2004年9月株式会社カヤックに入社。

カヤックでは自社サービス「こえ部」を担当する傍ら,ラボチームBM11に所属し「Ark」「nim」といったオープンソースプロダクトを開発。また「Shibuya.pm」や「YAPC::Asia」にスピーカーとして参加するなど,Perlプログラマとして活躍の場を広げている。