CodeZine(コードジン)

特集ページ一覧

初めてのCatalyst入門(2)
Catalystアプリはどのように作るのか?

Catalystでの処理の流れ、主要なコンポーネントを解説

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/09/25 14:00
目次

stash

 stash(※注2)は、1回のリクエストついてコンポーネントの間でやりとりするデータを保存するために使われます。stashは自動的にビューに送られ、リクエストの終わりとともに破棄されるため、データを永続化する用途には使うことはできません。

 stashへは、「$c->stash」のようにコンテキストからアクセスできます。

 英語のstashには「隠し場所」という意味があります。

 stashのサンプルでは、先ほどインストールした「Catalyst::View::TT」を使用します。

 まず、次のようにヘルパスクリプトを使用してビューを作成します。

リスト10:ビューを作成する
$ ./HelloWorld/script/helloworld_create.pl view TT TT
 exists "/home/test/HelloWorld/script/../lib/HelloWorld/View"
 exists "/home/test/HelloWorld/script/../t"
created "/home/test/HelloWorld/script/../lib/HelloWorld/View/TT.pm"
created "/home/test/HelloWorld/script/../t/view_TT.t"

 「Root.pm」に「hello」アクションを定義します。

リスト11:Accept-Languageの値により表示するメッセージを切り替えるアクション
sub hello :Local {
  my ( $self, $c ) = @_;
  # (1)言語ごとのメッセージ
  my %msgs = (
    ja => "こんにちは!",
    en => "Hello!"
  );
  # (2)Accept-Languageの値から言語名を配列に変換
  my @langs = split(/,/, $c->request->header('Accept-Language'));
  # (3)テンプレートを設定
  $c->stash->{template} = 'hello.tt';
  # (4)表示するメッセージを設定
  $c->stash->{message} = $msgs{$langs[0]} || $msgs{en};
}

 このアクションでは次の処理を行っています。

(1)言語ごとのメッセージ

 ハッシュに言語コードに対応したメッセージを登録しています。ここでは、日本語(ja)と英語(en)のメッセージを登録しています。

(2)Accept-Languageの値から言語名を配列に変換

 Webブラウザのリクエストヘッダにある「Accept-Language」には、レスポンスとして要求する言語などがコンマ区切りの文字列として送られてきますので、これを配列に変換しています。

(3)テンプレートを設定

 Template Toolkit形式のテンプレートファイルをstashに登録します。ここで登録したテンプレートファイルを使用して、レスポンスを作成します。

(4)表示するメッセージを設定

 先頭の言語タグに対応するメッセージが$msgsに存在すればその値を、存在しなければ「en」のメッセージをstashに登録します。

 Catalyst::View::TTのデフォルトの設定では、テンプレートファイルの配置場所とファイル名は次のようなルールに従っています。

Catalyst::View::TTのテンプレート設定ルール
設定対象 デフォルト値
配置場所 root」ディレクトリ
テンプレートファイル名 「アクション名」+「.tt」

 このルールに従ってテンプレートファイルを作成すれば、アクションで明示的にテンプレートファイルを指示しなくても、Catalyst::View::TTの側で対象となるテンプレートファイルを解決します。もちろんこれらの設定値は変更可能になっていますが、詳細は後の回で詳しく説明する予定です。

 このルールに従って、「hello」アクションのテンプレートファイルを「root」ディレクトリ以下に「hello.tt」という名前で作成します。

Template Toolkitの記載方法

 Template Toolkitのタグは[% ~ %]となっているので、このタグを使用してコンテキストから受け取った情報を埋め込みます。

リスト12:hello.tt
<html>
<head><title>[% c.config.name %]</title></head>
<body>
<p>[% c.stash.message %]</p>
</body>
</html>
(1)[% c.config.name %]

 「c」はコンテキストを表し、所属するオブジェクトへのアクセスはドットで区切って指定します。これは「$c->config->{name}」と同じ意味です。

(2)[% c.stash.message %]

 「hello」アクションでstashに登録された「message」を埋め込みます。Catalyst::View::TTの詳しい使い方などについては、Catalyst::View::TTを参照ください。

 組み込みサーバを起動し、Webブラウザから「http://<ホスト名またはIPアドレス>:3000/hello」にアクセスすると、使用したWebブラウザの言語情報によって表示されている文字列がいろいろと変わっている様子が確認できると思います。

 Firefox3.5で言語情報の設定を行うには次の手順で行います。メニューから[ツール]-[オプション]を選択し、「オプション」画面を開きます。

図5:Firefox3.5のオプション画面
図5:Firefox3.5のオプション画面

 ここで「言語設定」ボタンを押下すると「Webページの言語」設定画面が開きますので、ここで言語の追加や削除、優先順位の変更を行うことができます。

図6:Firefox3.5の「Webページの言語」画面
図6:Firefox3.5の「Webページの言語」画面

まとめ

 本記事では、Catalystでの処理の流れや主要なコンポーネントについて説明しました。次回では、コントローラに焦点を当てて、コントローラのURLパスとアクションの定義方法などについて説明していく予定です。

参考文献



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Webアプリケーションフレームワーク「Catalyst」入門

もっと読む

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5