Playアプリケーションの仕組みを知ろう! (3/6)
作成:2013-01-14 10:40
更新:2013-01-14 10:40
更新:2013-01-14 10:40
■アクションメソッド「index」の仕組み
ここで定義しているコントローラークラス「Application」には、「index」というメソッドが用意されています。が、このメソッド、なんだか不思議な形を指定ますね。
というように、def indexというメソッドの定義にActionというナニかを代入しているような文が続いています。これは一体、何なのでしょう?
・Actionは、関数を返す関数
ここで使われているActionという関数は、リクエストを処理して、クライアントへのレスポンスとなるplay.api.mvc.Resultというオブジェクトを返す関数を返す働きをします。つまり、これにより「リクエストを処理してレスポンスを返す関数オブジェクト」がindexに代入されるわけです。
ちょっとJavaの世界では考えられないアクロバットなやり方ですが、Scalaの世界では別になんの問題もありません。むしろ、必要に応じてAction以外のさまざまな関数オブジェクトを設定したりできるわけで、より柔軟なプログラミングが可能なやり方といえそうです。
・Ok関数はResultを返す
このAction関数では、{}内に「Ok(……)」といった文が書かれています。このOkという関数は、play.api.mvc.Resultオブジェクトを返す働きをします。正確には、「正常にリクエストが処理されたことを示すResultオブジェクト」を返すもの、といってよいでしょう。
・views.html.indexはレンダリング関数
引数に、views.html.index(……)という文が書かれていますが、これは、indexというテンプレートをレンダリングした結果を返す関数です。ここでは「views」内にindex.scala.htmlというファイルが用意されていましたね? Play Frameworkでは、アプリケーションをビルドする際、「views」内に○○.scala.htmlといったファイルをチェックし、自動的にviews.html.○○という関数を作成します。これを呼び出すことで、そのファイルをレンダリングした結果が受け取れるようになっているのです。
このindex関数では、引数にテキストが用意されていますが、これはindex.scala.htmlのテンプレートにこの値を渡す働きをします。
――これで、コントローラーで行われていることがどういうものか、だいたいわかってきました。まだOk関数はOKじゃなかったらどうするんだ?だの、Resultオブジェクトは一体どういうものか?だの、わからないことは山ほどあると思いますが、とりあえず「こんなふうに動いてるんだな」というぐらいの仕組みはわかってきたんじゃないでしょうか。
def index = Action ……
というように、def indexというメソッドの定義にActionというナニかを代入しているような文が続いています。これは一体、何なのでしょう?
・Actionは、関数を返す関数
ここで使われているActionという関数は、リクエストを処理して、クライアントへのレスポンスとなるplay.api.mvc.Resultというオブジェクトを返す関数を返す働きをします。つまり、これにより「リクエストを処理してレスポンスを返す関数オブジェクト」がindexに代入されるわけです。
ちょっとJavaの世界では考えられないアクロバットなやり方ですが、Scalaの世界では別になんの問題もありません。むしろ、必要に応じてAction以外のさまざまな関数オブジェクトを設定したりできるわけで、より柔軟なプログラミングが可能なやり方といえそうです。
・Ok関数はResultを返す
このAction関数では、{}内に「Ok(……)」といった文が書かれています。このOkという関数は、play.api.mvc.Resultオブジェクトを返す働きをします。正確には、「正常にリクエストが処理されたことを示すResultオブジェクト」を返すもの、といってよいでしょう。
・views.html.indexはレンダリング関数
引数に、views.html.index(……)という文が書かれていますが、これは、indexというテンプレートをレンダリングした結果を返す関数です。ここでは「views」内にindex.scala.htmlというファイルが用意されていましたね? Play Frameworkでは、アプリケーションをビルドする際、「views」内に○○.scala.htmlといったファイルをチェックし、自動的にviews.html.○○という関数を作成します。これを呼び出すことで、そのファイルをレンダリングした結果が受け取れるようになっているのです。
このindex関数では、引数にテキストが用意されていますが、これはindex.scala.htmlのテンプレートにこの値を渡す働きをします。
――これで、コントローラーで行われていることがどういうものか、だいたいわかってきました。まだOk関数はOKじゃなかったらどうするんだ?だの、Resultオブジェクトは一体どういうものか?だの、わからないことは山ほどあると思いますが、とりあえず「こんなふうに動いてるんだな」というぐらいの仕組みはわかってきたんじゃないでしょうか。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
●Application.scalaの内容 package controllers import play.api._ import play.api.mvc._ object Application extends Controller { def index = Action { Ok(views.html.index("Your new application is ready.")) } }
※関連コンテンツ