初めてのCatalyst入門(2)
Catalystアプリはどのように作るのか?
Catalystでの処理の流れ、主要なコンポーネントを解説
ダウンロード サンプルファイル (55.7 KB)
stash
stash(※注2)は、1回のリクエストついてコンポーネントの間でやりとりするデータを保存するために使われます。stashは自動的にビューに送られ、リクエストの終わりとともに破棄されるため、データを永続化する用途には使うことはできません。
stashへは、「$c->stash」のようにコンテキストからアクセスできます。
英語のstashには「隠し場所」という意味があります。
stashのサンプルでは、先ほどインストールした「Catalyst::View::TT」を使用します。
まず、次のようにヘルパスクリプトを使用してビューを作成します。
$ ./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」アクションを定義します。
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のデフォルトの設定では、テンプレートファイルの配置場所とファイル名は次のようなルールに従っています。
| 設定対象 | デフォルト値 |
| 配置場所 | 「root」ディレクトリ |
| テンプレートファイル名 | 「アクション名」+「.tt」 |
このルールに従ってテンプレートファイルを作成すれば、アクションで明示的にテンプレートファイルを指示しなくても、Catalyst::View::TTの側で対象となるテンプレートファイルを解決します。もちろんこれらの設定値は変更可能になっていますが、詳細は後の回で詳しく説明する予定です。
このルールに従って、「hello」アクションのテンプレートファイルを「root」ディレクトリ以下に「hello.tt」という名前で作成します。
Template Toolkitの記載方法
Template Toolkitのタグは[% ~ %]となっているので、このタグを使用してコンテキストから受け取った情報を埋め込みます。
<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で言語情報の設定を行うには次の手順で行います。メニューから[ツール]-[オプション]を選択し、「オプション」画面を開きます。
ここで「言語設定」ボタンを押下すると「Webページの言語」設定画面が開きますので、ここで言語の追加や削除、優先順位の変更を行うことができます。

まとめ
本記事では、Catalystでの処理の流れや主要なコンポーネントについて説明しました。次回では、コントローラに焦点を当てて、コントローラのURLパスとアクションの定義方法などについて説明していく予定です。
参考文献
- 『Catalyst-Manual-5.8000』
- 『モダンPerl入門』 牧大輔 著、翔泳社、2009年2月
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

