この記事は公開されてから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に慣れておきましょう。