Play Framework 2.4が出ました

やったね。

What’s new in Play 2.4

主要な変更点や新規機能は以下の通りらしいです。基本的には上記ドキュメントを読んで気になったところを抜き出しただけです。

Dependency Injection

GlobalなState(具体的にはPlay.currentかな?)への依存性を無くしたいというモチベーションらしいです。Singletonアノーテーションなんか便利そう。あと、ApplicationLifecycleで終了時に実行する処理を書けるようになったそうです。

DIを活用したテスト

DIが出来るようになったのでテスト時にデータベース設定などをオーバーライドできるようになったそうです。実際のテストコードの書き方はこちらに書いてます。

Embedding Play

これ何のことか良くわかってない。NettyにアクセスするAPIが増えたとか、start/stopが出来るようになったとか、string interpolationでルーティングできるようになったとか、何が嬉しいの?

Aggregated reverse routers

異なるサブプロジェクト間でリバースルーティングできるようになったそうです。これは便利ですね。

Java 8 support

JDK 8が必要になるそうです。何かとしがらみがある環境だとちょっと困るかもしれないですね…。Java 8サポートでたとえばJSON APIでLocalDateとかが使えるようになるとか。まあ便利っちゃ便利ですけど、jodaTimeとうまく組み合わせる仕組みがかなり出来上がってるので必須というほどのもんでもないかな…。元をただせばJavaの時刻日付関連のクラスがあるまじきクソだったのが全ての元凶なので、マイナスがゼロになっただけともいえる気がします。

ちなみに、Java 8の日付関連クラスはJoda-Timeを参考にしたそうで。うむ。

Anorm

Anormが別プロジェクトになりました。Playは今後Slickを標準とするそうですから、それを見越しての事なのでしょう。あまり評判の良くないAnormですが、私は好きです。シンプルなので。

あとは仕事でAnormを使わなければならない場面があるので、今後もAnormは進化していってほしいなあと思う次第。今回は別プロジェクトにした以外にもいくつか改善が。気になったのをピックアップします。

  1. foldとかfoldWhileとかの関数が使えるようになった。パッと利用シーンが思いつくわけじゃないけど、なかなか便利そう!
  2. blobとかをInputStreamにマップすることが出来るようになった。
  3. JodaTimeとの変換が出来るようになった。totoshiさんのjoda-mapperが要らなくなるね、と思ったが、あれはSlickか…。というか、今度はJava 8対応してLocalDateへの変換が必要になるんだよなあ。ほんと、Javaは地獄だぜー。

コネクションプールがHikariCPになった

あんまり気にしたこと無かったけど、以前はBoneCPだったそうです。

あと、マイグレーションはそれ程面倒じゃなさそう。Java 8が使える環境だったら何も考えず移行するのが良いのかなあ。