§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はさらに多くの機能を搭載する予定であり、これらの機能はPlayやActivatorを使用する他のプロジェクトに自動的にメリットをもたらします。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は、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はHTML、CSS、JavaScriptに関してそれほど独断的ではなくなります。そして
- sbt-webは独自のコミュニティを持ち、Playと並行して発展できます。
§自動プラグイン
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%向上しました。主な最適化は次のとおりです。
- Javaアクションとボディパーサーのスレッド切り替えの削減。
- より多くのルート情報をキャッシュし、共有マップではなくルートごとのキャッシュを使用する。
- GETリクエストのボディ解析オーバーヘッドの削減。
- チャンクレスポンスを返すためのユニキャスト列挙子の使用。
これらの変更のいくつかは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` ऑब्जेक्ट रख सकते हैं।
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`オブジェクトにもアクセスできるようになったため、マルチパートフォームとストリーミングボディのアップロードがサポートされるようになりました。
§WSセキュリティ
WSクライアントには、包括的なSSL / TLS構成のための設定があります。 WSクライアントの構成は、デフォルトでより安全になりました。
§アクターWebSockets
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)
§結果の再構築が完了しました
Play 2.2では、多くの新しい結果タイプが導入され、古い結果タイプは非推奨となりました。Play 2.3では、この再構築が完了します。詳細は、移行ガイドの*結果の再構築*を参照してください。
§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のビッグデシマルおよび整数、数値間のより多くの列変換)、時間型(java.sql.Timestamp
)、文字型。
§HTTPS用のカスタムSSLEngine
Playサーバーは、カスタム`SSLEngine`を使用できるようになりました。これは、クライアント認証の場合など、カスタマイズが必要な場合にも役立ちます。
次:移行ガイド
このドキュメントに誤りを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを送信してください。質問やアドバイスがあれば、コミュニティフォーラムにアクセスして、コミュニティとの会話を始めてください。