ドキュメント

§Play 2.3の新機能

このページでは、Play 2.3の新機能について説明します。Play 2.3に移行するために必要な変更については、Play 2.3移行ガイドをご覧ください。

§Activator

Play 2.3で最初に気付くのは、`play`コマンドが`activator`コマンドになったことです。PlayはActivatorを使用するように更新されました。これにより、

将来的にはActivatorはさらに多くの機能を搭載する予定であり、これらの機能はPlayやActivatorを使用する他のプロジェクトに自動的にメリットをもたらします。Activatorはオープンソースであるため、コミュニティはその進化に貢献できます。

§Activatorコマンド

`play`コマンドで使用できたすべての機能は、`activator`コマンドでも引き続き使用できます。

新しい`activator`コマンドと古い`play`コマンドはどちらもsbtのラッパーです。必要に応じて、`sbt`コマンドを直接使用できます。ただし、sbtを使用すると、テンプレート(`activator new`)やWebユーザーインターフェース(`activator ui`)など、いくつかのActivator機能を利用できません。 sbtとActivatorはどちらも、`test`や`run`などの通常のコンソールコマンドをすべてサポートしています。

§Activatorディストリビューション

Playは、Playのすべての依存関係を含むActivatorディストリビューションとして配布されています。このディストリビューションは、Playダウンロードページからダウンロードできます。

必要に応じて、Activatorサイトから最小限の(1MB)バージョンのActivatorをダウンロードすることもできます。ダウンロードページで「mini」ディストリビューションを探してください。最小限のバージョンのActivatorは、必要な場合にのみ依存関係をダウンロードします。

Activatorはsbtのラッパーであるため、必要に応じてsbtを直接ダウンロードして使用することもできます。

§ビルドの改善

§sbt-web

Play 2.3の最大の新しい機能は、sbt-webの導入です。要約すると、sbt-webを使用すると、HTML、CSS、JavaScriptの機能をPlayのコアから純粋なsbtプラグインのファミリにファクタリングできます。これには2つの大きな利点があります。

§自動プラグイン

Playはsbt 0.13.5を使用するようになりました。このバージョンは、「自動プラグイン」という新しい機能を備えています。これは、本質的にビルドファイルの設定指向のコードを大幅に削減することを可能にします。

§アセットパイプラインとフィンガープリント

sbt-webは、高度に設定可能なアセットパイプラインの概念をPlayにもたらします。例:

pipelineStages := Seq(rjs, digest, gzip)

上記は、RequireJsオプティマイザ(sbt-rjs)、ダイジェスター(sbt-digest)、そして圧縮(sbt-gzip)の順に実行されます。多くのsbtタスクとは異なり、これらのタスクは宣言された順序で、次々に実行されます。

Play 2.3の新しい機能の1つは、Railsアセットフィンガープリントと原理的に似ているアセットフィンガープリントのサポートです。アセットフィンガープリントの結果として、提供される際に、遠い将来のキャッシュ有効期限を使用するようになりました。この結果、ブラウザが採用できる積極的なキャッシュ戦略により、ユーザーがサイトにアクセスしたときにダウンロードが高速化されます。

§デフォルトのivyキャッシュとローカルリポジトリ

Playは、ユーザーのホームディレクトリの`.ivy2`フォルダにあるデフォルトのivyキャッシュとリポジトリを使用するようになりました。

これは、Playが他のsbtビルドとより適切に統合されることを意味し、アーティファクトを複数回キャッシュする必要がなくなり、ローカルに公開されたアーティファクトを共有できるようになります。

§Javaの改善

§Java 8

Play 2.3はJava 8でテストされています。Java環境がJava 8用に構成されていること以外は、特別なことは何もせずに、プロジェクトはJava 8で正常に動作します。Java 8で使用できる新しいActivatorサンプルがあります。

https://www.lightbend.com/activator/template/reactive-stocks-java8

ドキュメントは、一般的なJavaの例、および該当する場合はJava 8の例で改善されました。Java 8を使用した非同期プログラミングの例をご覧ください。

Java 8とPlayを使用したリアクティブプログラミングの完全な概要については、次のブログをご覧ください。https://www.lightbend.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は、2.10と2.11の両方の複数のバージョンのScalaに対してクロスビルドされたPlayの最初のリリースです。

`build.sbt`または`Build.scala`ファイルで`scalaVersion`設定を設定することにより、使用するScalaのバージョンを選択できます。

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`オブジェクトにもアクセスできるようになったため、マルチパートフォームとストリーミングボディのアップロードがサポートされるようになりました。

§WSセキュリティ

WSクライアントには、包括的なSSL / TLS構成のための設定があります。 WSクライアントの構成は、デフォルトでより安全になりました。

§アクターWebSockets

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)

§結果の再構築が完了しました

Play 2.2では、多くの新しい結果タイプが導入され、古い結果タイプは非推奨となりました。Play 2.3では、この再構築が完了します。詳細は、移行ガイドの*結果の再構築*を参照してください。

§Anorm

Play 2.3のAnormには、様々な修正(型安全性、オプションの解析、エラー処理など)と興味深い新機能が含まれています。

§HTTPS用のカスタムSSLEngine

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

次:移行ガイド


このドキュメントに誤りを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを送信してください。質問やアドバイスがあれば、コミュニティフォーラムにアクセスして、コミュニティとの会話を始めてください。