[Scala]Playframework 2.4[Java]
Playframework 2.4がでてました
今年の5月に、Playframeworkの2.4 "Damiya"がリリースされました。 2.2以降、Playにはさわっていなかったのですが、2.4になってDI機能が追加される等、 けっこうかわった部分もあるみたいなんで、ひさびさに使ってみます。
なお、"Damiya"っていうのはPlayのコントリビュータのGithub上のaliasらしいです。 でもって、今後の2.4.x系リリースには全部名前がつくみたいです。
動作環境
今回使用した動作環境は以下のとおりです。 * OS : MacOS X 10.9.4 * Java : 1.8.0_11
Playのインストール&プロジェクト作成
まずはPlay2.4のインストールから始めます。 ここからzipをダウンロードしてパスを通すか、 Homebrewをつかってtypesafe-activatorをインストールします。
% brew install typesafe-activator
2.2以前はplay new〜で新規Playアプリをつくってましたが、2.3以降はactivatorコマンドを使います。 初回はいろいろダウンロードしたりするので、結構時間かかります。
% activator new play24
どのテンプレートでアプリをつくるかきかれるので、とりあえずplay-scalaでつくっときましょう。
・ ・ Choose from these featured templates or enter a template name: 1) minimal-akka-java-seed 2) minimal-akka-scala-seed 3) minimal-java 4) minimal-scala 5) play-java 6) play-scala (hit tab to see a list of all templates) > 6
アプリができたらそこへ移動して、activator run(activatorでコンソール立ち上げて、そこでrunでもOK) で起動します。 ここも初回はすごく時間かかります。
% cd play24/ % activator run Getting org.scala-sbt sbt 0.13.8 ... ・ ・
起動後、http://localhost:9000にアクセスできます。 いつものPlayデモページが表示されます。
ちなみに、アプリ起動時にjava.lang.NoClassDefFoundError: play/Play$・・・みたいなエラーで起動しない場合、 play-fork-run.sbtのプラグイン指定バージョンを下記のように変更します。
addSbtPlugin("com.typesafe.play" % "sbt-fork-run-plugin" % "2.4.0")
そして、build.sbtのfork設定を、falseに変更します。
fork in run := false
これはバグみたいなので、そのうち修正されると思います。
IDE設定
ついでにIDEつかってPlayプロジェクトを編集できるようにしておきましょう。 EclipseでもIntelliJ IDEAでもOKです。私の環境ではIntelliJ 14 CEを使いました。 IntelliJを起動したら、まずはプラグインを追加でインストールします。 Preferences→Plugins→Brows repositoriesと選択し。 sbt、Scala、Scala Imports Organizer のプラグインをインストールします。
プラグインをインストールしたら、 File→New→Project from existing sources...を選択。 import project external model で、SBTを選択します。
これでPlayアプリがIDEA上で編集できます。
ソースをみてみる
生成されたデモアプリのソースを少しみてみましょう。 まずはapp/controllersのApplication.scalaを見てみます。
class Application extends Controller { def index = Action { Ok(views.html.index("Your new application is ready.")) } }
以前Controllerはobjectで宣言されてましたが、classになってますね。 RouterのデフォルトがDependency Ingected RouterというRouterに変更(build.sbtで指定)されており、 2.4で追加されたDIの関連でclassにしなければいけないようです。(classじゃないと@Injectとか使えない) なお、2.3以前のControllerを使用したい場合、build.sbtのroutesGenerator部分を削除すれば使用可能になります。
あと、routesファイルのassetを指定する箇所もちょっとかわってます。
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
app/views/main.scala.htmlでcssやjsをリバースルートしている箇所も@routes.Assets.versioned〜のようにしています。
2.3からけっこう変更されてますね。
まとめ
今回はPlay2.4を使ってみました。2.2からひさびさに使いましたが、少しさわっただけでもいろいろかわった印象をうけます。 とりあえず2.4ではDI機能が大きな変更点としてあるので、次はそれを使ってみたいと思います。
参考サイトなど
- Play2.4公式ドキュメント:https://www.playframework.com/documentation/2.4.x/Home