§Play 2.3 の変更点
このページでは、Play 2.3 の新機能に着目します。Play 2.3 に移行するために必要な変更点について知りたい場合は、Play 2.3 移行ガイド を確認してください。
§Activator
まず最初に、Play 2.3 において play コマンドが activator コマンドに変わったことに気付くでしょう。Play は Activator を使うようになったので、以下のことができるようになりました:
- Play プロジェクトの入門用に用意されたテンプレートを拡張することができます。Activator は、プロジェクトテンプレートのとても 豊富なライブラリ をサポートしています。テンプレートには入門用のチュートリアルや、その他のリソースを含めることができます。Play コミュニティは テンプレートに貢献する こともできます。
- コマンドラインインタフェースに馴染みのない初心者向けに、Play 入門用の web UI を提供することができます。ユーザはこの web UI を使ってコードを書き、テストすることができます。熟練したユーザは、これまでどおりコマンドラインインタフェースを使うことができます。
- Play の高い生産性を誇るアプローチを、他のプロジェクトでも利用することができます。Activator は Play だけのものではありません。他のプロジェクトでも Activator を使うことができます。
将来的に Activator はより多くの機能を手に入れ、これらの機能は自動的に Activator を使う Play や、その他のプロジェクトの利益となるでしょう。Activator はオープンソース なので、コミュニティはこの進化に貢献することができます。
§Activator コマンド
play コマンドで利用できた機能は、すべて activator コマンドでも使えます。
activator newで新しいプロジェクトを作ります。新しいアプリケーションを作る を参照してください。activatorでコンソールを起動します。Play コンソールを使う を参照してください。activator uiは web ユーザインタフェースを起動する新しいコマンドです。
新しい
activatorコマンドと、古いplayコマンドはいずれも sbt のラッパーです。お望みであればsbtコマンドを直接使うことができます。しかし、sbt を使うと、例えばテンプレート (activator new) や web ユーザインタフェース (activator ui) など、Activator の機能をいくつか失うことになります。sbt と Activator はいずれもtestやrunのような一般的なコンソールコマンドをすべてサポートしています。
§Activator ディストリビューション
Play は、すべての依存性を含む Activator ディストリビューションとして配布されています。このディストリビューションは Play ダウンロード ページからダウンロードすることができます。
お望みであれば、Activator のサイト から最小 (1MB) バージョンの Activator をダウンロードすることもできます。ダウンロードページで “mini” ディストリビューションを探してみてください。最小バーションの Activator は、必要になった時のみ依存性をダウンロードします。
Activator は sbt のラッパーなので、お望みであれば sbt をダウンロードして直接使うこともできます。
§Build の改善
§sbt-web
Play 2.3 の最大の新機能は sbt-web の紹介です。手短に言うと、sbt-web により HTML, CSS そして JavaScript の機能を、Play コアから純粋な sbt プラグイン群に移動することができました。これには主に二つの利点があります:
- Play は HTML, CSS そして JavaScript に固執しなくて済むようになります; そして
- sbt-web は、専門のコミュニティを持ち、Play のコミュニティと並行して成長することができます
§Auto プラグイン
これからの Play は sbt 0.13.5 を使います。このバージョンには “auto プラグイン” という、要するにビルドファイルから設定向けのコードを大幅に削減することができる機能が付いています。
§アセットパイプラインとフィンガープリント
sbt-web は、例えば次のように高度に設定できるアセットパイプラインを Play に持たらします:
pipelineStages := Seq(rjs, digest, gzip)
上記の設定は、RequireJs オプティマイザ (sbt-rjs), ダイジェスト化 (sbt-digest), そしてその後に圧縮 (sbt-gzip) を並べています。多くの sbt タスクとは違い、これらのタスクは宣言された順番通り、ひとつずつ実行されます。
Play 2.3 の新しい機能のひとつに、Rails アセットフィンガープリント と似た原理のアセットフィンガープリントのサポートがあります。アセットフィンガープリントの重要性は、いまや我々はアセットが提供される際に遥か遠い未来の有効期限を設定する点にあります。最終的な結論として、ブラウザが採用できるようになった積極的なキャッシュ戦略を与えられたサイトを訪れた際、ユーザは高速なダウンロードを体験することになるでしょう。
§デフォルトの ivy キャッシュとローカルリポジトリ
Play はユーザのホームディレクトリにある .ivy2 フォルダにあるデフォルトの ivy キャッシュとリポジトリを使います。
これは Play が他の sbt ビルドとよりよく統合され、キャッシュされるアーティファクトを何度も要求せず、そしてローカルに発行されたアーティファクトを共有することを意味します。
§Java の改善
§Java 8
Play 2.3 は Java 8 でテストされています。あなたのプロジェクトは Java 8 で問題なく動作するでしょう; Java 環境が Java 8 向けに設定されていることを確認すれば、他に特にすることはありません。以下に、Java 8 で利用できる新しい Activator サンプルがあります:
http://typesafe.com/activator/template/reactive-stocks-java8
一般的な Java サンプルと、そして適用できる場所には Java 8 のサンプルを使ってドキュメントを改善しました。Java 8 による非同期プログラミングのサンプル を確認してください。
Java 8 と Play によるリアクティブに関する全体的な概要は、次のブログを参照してください: http://typesafe.com/blog/go-reactive-with-java-8
§Java パフォーマンス
Java パフォーマンスについて取り組みました。Play 2.2 と比較すると、単純な Java アクションのスループットは 40〜90% 改善しています。主な最適化は以下の通りです:
- Java アクションとボディパーサのスレッド切り替えを削減しました。
- より多くのルーティング情報をキャッシュして、共有 Map の代わりにルートごとのキャッシュを使うようにしました。
- GET リクエストにおけるボディ解析のオーバーヘッドを削減しました。
- ユニキャストな enumerator を使ってチャンクされたレスポンスを返すようにしました。
これらの変更のうち、いくつかは Scala のパフォーマンスも改善しますが、Java のパフォーマンスは大幅に改善されており、これこそがこの取り組みの主な目的でした。
Play チームにライセンスを提供し、この作業を可能にしてくれた YourKit に感謝します。
§Scala 2.11
Play 2.3 は複数の Scala バージョン、2.10 と 2.11 でクロスビルドできる最初のリリースです。
使用する Scala のバージョンは、build.sbt または Build.scala ファイル内の scalaVersion 設定で選択することができます。
Scala 2.11 の場合:
scalaVersion := "2.11.1"
Scala 2.10 の場合:
scalaVersion := "2.10.4"
§Play WS
§分離されたライブラリ
WS クライアントライブラリは、Play 以外でも使えるよう、独自のライブラリにリファクタリングされました。今後は、WS シングルトンだけではなく、複数の WSClient オブジェクトを使うことができます。
WSClient client = new NingWSClient(config);
Promise<WSResponse> response = client.url("http://example.com").get();
val client: WSClient = new NingWSClient(config)
val response = client.url("http://example.com").get()
いずれの WS クライアントも独自のオプションを設定することができます。これにより、異なる Web サービスにタイムアウト、リダイレクト、そしてセキュリティに関する異なるオプションを設定できるようになります。
根本となる AsyncHttpClient オブジェクトにもアクセスすることができるので、multi-part フォーム、そしてボディのストリームアップロードをサポートすることができます。
§WS セキュリティ
WS クライアントには、包括的な SSL/TSL 設定があります。デフォルトの WS クライアント設定は、よりセキュアなものになりました。
§Actor WebSocket
actor を使って websocket とのやり取りをハンドリングするメソッドが Java と Scala の両方に組み込まれました。例 Scala を使う場合:
public static WebSocket<String> socket() {
return WebSocket.withActor(MyWebSocketActor::props);
}
def webSocket = WebSocket.acceptWithActor[JsValue, JsValue] { req => out =>
MyWebSocketActor.props(out)
§Results 再構築の完了
Play 2.2 で新しい型の Result がいくつか追加され、古い型の Result は非推奨になりました。この再構築作業を Play 2.3 で完了します。詳細は Play 2.3 移行ガイド の Result 再構築 を参照してください。
§Anorm
Play 2.3 の Anorm には、様々な修正 (型安全、オプションのパース、エラーハンドリング、…) と、興味深い新機能が含まれています。
- 文字列の補間で SQL 文字列をより簡単、かつ (引数のパースを) 少ない冗長さで書くことができるようになり、また性能も (パラメータの処理は 7 倍にまで) 改善しました。例
SQL"SELECT * FROM table WHERE id = $id" - 複数の値 (シーケンス/リスト) をパラメータとして渡すことができます。例
SQL"""SELECT * FROM Test WHERE cat IN (${Seq("a", "b", "c")})""" - 列を位置でパースできるようになりました。例
val parser = long(1) ~ str(2) map { case l ~ s => ??? } - クエリ結果にはデータだけなく、(SQL の警告を含む) 実行コンテキストが含まれています。
- より多くの型が、引数、および列としてサポートされました:
java.util.UUID, 数値型 (Java/Scala の big decimal と integer, 数値型間の列変換), 時制型 (java.sql.Timestamp), 文字列型。
§HTTPS 用のカスタム SSL エンジン
Play サーバは カスタム `SSLEngine` を使う ことができるようになりました。これは、クライアント認証する場合などのカスタマイズに便利です。
Next: Play 2.2 の変更点
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。