Playコントローラ/Action/HTTP Routerの基本的な使い方:Scala+Play 2.0でWebアプリ開発入門(4)(3/3 ページ)
2.0からScalaに対応したWebアプリ開発の人気軽量フレームワーク「Play」について解説し、Webアプリの作り方を紹介する入門連載。今回は、ユーザーのHTTPリクエストを受け取り、HTTPレスポンスを返すためのコントローラを解説。先日リリースされたPlay2.1の紹介も。
ルーティング定義とパラメータのバインド
Controllerを定義してActionを使ってメソッドを実装したら、そのメソッドをURIと対応させます。そのためのルーティング情報を定義するのがconfディレクトリにあるroutesファイルです。このファイルはルータによって読み込まれる設定ファイルであり、アプリケーションで使用する全てのルーティング情報を記述します。
先ほども説明したように、ルーティング情報としてはHTTPメソッド、URIパターン、アクションの呼び出しの順番で定義します。以前の例では固定URIをパラメータなしでControllerにマッピングするシンプルなものでした。routesファイルによるルーティング定義はいくつかの書き方があるので、それについて解説します。
なお、このルーティングについての解説は、Play framework公式サイトにあるHTTPルーティングに基づいています。
URIの指定方法
routesファイルのHTTPメソッド部分には、HTTPがサポートするメソッド(GET、POST、PUT、DELETE、HEAD)を使えます(HTTPのメソッドについては、@IT記事などを参考にしてください)。
これまでのサンプルではURIはすべて静的でしたが、パスの一部を動的にすることも可能です。conf/routesファイルに次のような定義を追加しましょう。
GET /sample3/:id controllers.SampleController.sample3(id:Long)
「:id」が動的に定義されたパス部分です。例えば、「http://localhost:9000/sample3/1000」といったリクエストが来た際に、URIの「1000」となっている部分がsample3メソッドの引数「id」にバインドされます。
SampleControllerには次のようなメソッドを追加します。
def sample3(id:Long) = Action { Ok(views.html.index("id:" + id)) }
Playコンソールからアプリケーションを起動し、「http://localhost:9000/sample3/{任意の数値}」にアクセスしてみてください。画面に{任意の数値}として入力した数値が表示されます(※動的パスは複数定義可能です)。
クエリ文字列をControllerのメソッドの引数にバインドする方法
また、クエリ文字列をControllerのメソッドの引数にバインドすることもできます。下記のように/sample3のリクエストとSampleController#sample3メソッドをマッピングしてみましょう。
GET /sample3 controllers.SampleController.sample3(id:Long)
この定義で「http://localhost:9000/sample3?id=1000」とアクセスした場合、sample3メソッドの引数(id)に、クエリ文字列の値「1000」がsバインドされます。
URI指定にワイルドカードを使う方法
URI指定にはワイルドカードを使うこともできます。次のようにURI指定に「*path」と指定したケースを見てみましょう。
GET /sample4/*path controllers.SampleController.sample4(path)
このケースで「http://localhost:9000/sample4/foo/bar/buz」とアクセスした場合、pathには「foo/bar/buz」という文字列がセットされます(型を指定しない場合、Stringとして解釈されます)。
正規表現を定義する方法
また、任意の正規表現を定義することもできます。URI中で動的なパスにしたい個所で「${パラメータ名}{正規表現}」と記述するだけです。
sample3メソッドの動的パス部分で指定できる値を数値に限定してみましょう。
GET /sample3/$id<[0-9]+> controllers.SampleController.sample3(id:Long)
この状態で「http://localhost:9000/sample3/abc」などとアクセスした場合、条件に合うActionが見つからない旨のエラーになります。
次回は、Controller/Action/Routerの応用
今回はPlay 2.0のController、Action、HTTP Routerについて基本的な使い方を紹介しました。Controller/Action/Routerは今回紹介した以外にも、いろいろな機能を持っています。
次回は、そういった応用的な機能について解説する予定です。
- Play2プラグインのインストールと使用と新規開発
- Play2+nginx/Akka/WebSocketで高速双方向通信
- Play2(+JavaScript)アプリを高速化、最適化する4つのテクニック
- Play2におけるJSONおよびCoffeeScriptの使い方
- Playのグローバルな設定&spec2でBDDなテスト
- Play 2.xからMySQLに接続してAnormでCRUD操作するには
- Play 2.xのScala Templatesでビュー&フォーム操作
- Play 2.1にアップグレードしてコントローラを使いこなす
- Playコントローラ/Action/HTTP Routerの基本的な使い方
- 便利なPlayコンソールとEclipseでのデバッグ方法
- Play 2.0のアーキテクチャとディレクトリ構成の基礎知識
- Play framework 2.0の概要/5つの特徴とScalaで作るための環境構築
著者プロフィール
中村修太(なかむら しゅうた)
クラスメソッド勤務の新しもの好きプログラマです。昨年、東京から山口県に引っ越し、現在はノマドワーカーとして働いています。好きなJazzを聴きながらプログラミングするのが大好きです。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- スケーラブルで関数型でオブジェクト指向なScala入門
Scalaの特徴を紹介し、基本構文や関数、クラスなど、Scalaの基本的な機能について解説する入門連載 - Javaの常識を変えるPlay framework入門
サーブレット/JSPを基にする重厚長大なJavaのWeb開発のイメージを変える軽量フレームワーク「Play」について解説し、Webアプリの作り方を紹介する入門連載