ScalaでPlay framework 2.0のコントローラーを書いてみる

2011.09.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コントローラーをScalaでおきかえる

前回はplayコンソールを使用してプロジェクト作成→サーバー起動と実行してみました。
play newコマンドで作成されるプロジェクトは下記のようなコントローラーを生成します。

package controllers;

import play.mvc.*;
import views.html.*;

public class Application extends Controller {

    public static Result index() {
        return Html(index.apply("World"));
    }

}

このコントローラーはviws/index.scala.htmlへ文字列を渡しています。
今回はこのコントローラーをScalaでおきかえてみましょう。

本記事での動作確認環境は下記の通りです。

  • OS : MacOS X 10.7.1
  • Java SE: 1.6.0_26
  • Play framework : 2.0 preview

controllers.scalaを作成

appディレクトリ直下に、controllers.scalaという名前で下記内容のファイルを作成します。

package controllers

import play.api.mvc._
import play.api.mvc.Results._

object Application extends Controller {
    
    def index = Action {
	println("hello play2.0 with  Scala")
        //Html(views.html.index("World with Scala").toString)
        //コメントの指摘により修正
        Ok(views.html.index("World with Scala"))
    }
}

Scalaで記述されたコントローラーですね。
Play 1.2だと、事前にScalaモジュールをインストールして、プロジェクト作成時に-- with scalaオプションを指定していました。
Play 2.0からはネイティブでScalaがサポートされるので、そのままScalaが使用できるようです。
※Scalaでデフォルトのコントローラーを出力する方法を探していたのですが、見つかりませんでした。ご存知の方がいらっしゃいましたら、ぜひコメントを
ついでに、もともと生成されたapp/controllers/Application.javaは削除してしまいましょう。

routesファイル修正

次にconf/routesファイルを少し編集します。

# Routes 

GET      /           controllers.Application.index

もとはcontrollers.Application.index()となっています。
()が付いているのですが、Scalaで引数なしのメソッドを指定する場合は()をつけないようです。

修正したらplayコンソールを起動し、runで実行してみましょう。

$ play
        _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0, http://www.playframework.org

> Type "help" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.

[hello-play2] $ run
[info] Running the application from SBT, auto-reloading is enabled

Loading config [akka.conf] from the application classpath.
[info] Listening for HTTP on port 9000...

(Server started, use Ctrl+D to stop and go back to the console...)

http://localhost:9000にアクセスしてみてください。
Scalaで記述したコントローラーでも問題なく動作すると思います。

まとめ

今後、PlayではScalaで記述するのが標準になりそうですね。
いまのうちにScalaに慣れておきましょう。