SHOEISHA iD

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

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

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

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

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

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

CatalystのURL

 CatalystではURLは2つの部分に分けて考えられています。

 例えば「http://localhost:3000/foo/bar」というURLの場合だと、「http://localhost:3000/」と「foo/bar」に分けられ、前者をベース、後者をパスと呼びます。ホスト名(とポート番号)の後のスラッシュ「/」はパスではなくベースに含まれます。このパスがどのアクションに結びつけられるかは、アトリビュートとコントローラのネームスペース、そしてメソッド名から決定されます。

 ネームスペースは、コントローラモジュールのパッケージ名から先頭の「<MyApp>::Controller::」を取り除き、「::」を「/」に変換し、文字列を小文字に変換したものです。例えば、コントローラのパッケージ名が「HelloWorld::Controller::Foo::Bar」の場合のネームスペースは、「foo/bar」になります。

 コントローラの中でも「<MyApp>::Controller::Root」は特別な存在で、ネームスペースは定義されておらず、トップレベルのURL「http://localhost:3000/」にマッピングされます。また、ネームスペースはパッケージ名と関係ない文字列で上書きすることもできます。

アクションの定義

 アクションとは特別なアトリビュートを付加したコントローラのメソッドです。

 アクションとして定義可能な主要アトリビュートには次のものがあります。

主要なアトリビュート
アトリビュート 用途
:Local ネームスペースに従うURLを定義する際に使用する。
:Global ベースに割り当てられるURLを定義する際に使用する。
:Path リテラルにマッチするURLを定義する際に使用する。ネームスペースやメソッド名とは関係のないURLを定義できる。
:Regex グローバルな正規表現にマッチさせるURLを定義する際に使用する。
:LocalRegex ローカルな正規表現にマッチさせるURLを定義する際に使用する。
:Chained アクションを連鎖させる場合に使用する。
:Private URLにマッチしないアクションを定義する際に使用する。他のアクションから呼び出される。

 以下では、「:Local」アトリビュートを使用した簡単なアクションを定義します。

 「catalyst.pl」で自動的に作成されるRootコントローラに「message」という名前のアクションを追加します。Rootコントローラのファイルは、「lib/HelloWorld/Controller/Root.pm」になります。

リスト04:messageアクションの定義
package HelloWorld::Controller::Root;

# 省略

# (1)アクションの宣言
sub message :Local {
  # (2)引数を受け取る
  my ( $self, $c ) = @_;
  # (3)レスポンスとして返すメッセージを作成
  my $msg = 'Message!';
  # (4)レスポンスを設定
  $c->response->body( $msg );
}
(1)アクションの宣言

 アクションの宣言は、メソッド(サブルーチン)として宣言しますが、メソッド名の後にコロン(:)で始まるアトリビュートを付加します。

 この例では:Localアトリビュートを設定しています。

(2)引数を受け取る

 メソッドの引数から、変数を取り出します。$selfは自分自身、$cは後述するコンテキストオブジェクトになります。

(3)レスポンスとして返すメッセージを作成

 クライアントへ返すメッセージを作成します。必要であればモデルを操作するなどの処理もここに記述します。

(4)レスポンスを設定

 レスポンスとしてクライアントに返すデータを設定しています。RootコントローラはURLのベースに割り当てられますので、このアクションを呼び出すURLは次のようになります。

 http://<ホスト名またはIPアドレス><:Port>/message

 組み込みサーバの場合には「http://<ホスト名またはIPアドレス>:3000/message」になります。以降のサンプルでは、すべてRootコントローラに:Localアクションとして作成していきます。

次のページ
コンテキスト

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

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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー