Documentation

§Play 2.3 の変更点

このページでは、Play 2.3 の新機能に着目します。Play 2.3 に移行するために必要な変更点について知りたい場合は、Play 2.3 移行ガイド を確認してください。

§Activator

まず最初に、Play 2.3 において play コマンドが activator コマンドに変わったことに気付くでしょう。Play は Activator を使うようになったので、以下のことができるようになりました:

将来的に Activator はより多くの機能を手に入れ、これらの機能は自動的に Activator を使う Play や、その他のプロジェクトの利益となるでしょう。Activator はオープンソース なので、コミュニティはこの進化に貢献することができます。

§Activator コマンド

play コマンドで利用できた機能は、すべて activator コマンドでも使えます。

新しい activator コマンドと、古い play コマンドはいずれも sbt のラッパーです。お望みであれば sbt コマンドを直接使うことができます。しかし、sbt を使うと、例えばテンプレート (activator new) や web ユーザインタフェース (activator ui) など、Activator の機能をいくつか失うことになります。sbt と Activator はいずれも testrun のような一般的なコンソールコマンドをすべてサポートしています。

§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 プラグイン群に移動することができました。これには主に二つの利点があります:

§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% 改善しています。主な最適化は以下の通りです:

これらの変更のうち、いくつかは 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 オブジェクトを使うことができます。

Java

WSClient client = new NingWSClient(config);
Promise<WSResponse> response = client.url("http://example.com").get();

Scala

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 を使う場合:

Java

public static WebSocket<String> socket() {
    return WebSocket.withActor(MyWebSocketActor::props);
}

Scala

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 には、様々な修正 (型安全、オプションのパース、エラーハンドリング、…) と、興味深い新機能が含まれています。

§HTTPS 用のカスタム SSL エンジン

Play サーバは カスタム `SSLEngine` を使う ことができるようになりました。これは、クライアント認証する場合などのカスタマイズに便利です。

Next: Play 2.2 の変更点


このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。