ScalaでPlay framework 2.0のコントローラーを書いてみる
コントローラーを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に慣れておきましょう。