SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

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パスとアクションの定義方法などについて説明していく予定です。

参考文献

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4316 2009/09/25 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー