Documentation

§Play 2.2 の変更点

§Java と Scala の新しい構造の Result

これまで Result は、同期または非同期、全体またはチャンクのいずれかの形を取っていました。これら異なる種類のすべてを取り扱うことは、アクション合成およびフィルタの実装を難しくしていました。多くの場合、ある機能はすべての種類の Result に適用しなければならないのですが、非同期 Result を再帰的に同期 Result に戻すよう実装し、また Result 全体およびチャンクされた Result に同じロジックを適用する必要があるためです。

Play における非同期アクションと同期アクションの間に、Play が同期または非同期モードで動作できるかのような気にさせて、混乱を招く、不自然な区別も作ってしまいました。実際のところ、Play は 100% 非同期であり、例えば IO のような他の非同期アクションが、アクションの処理中に完了する必要があるかによって、Result を非同期に返却するか、そうしないかを区別します。

そこで、Java と Scala における Result の構造を単純化しました。いまはただひとつ、SimpleResult 型の Result があるのみです。依然として Result スーパークラスは様々な場所で動作しますが、非推奨とします。

この単純化は、リクエストの処理中に非同期処理を行いたい場合、Scala アプリケーションでは以下のように async アクションビルダーを使うことができる一方で、Java アプリケーションでは単純に Promise<SimpleResult> を返すことができるようになることを意味しています:

def index = Action.async {
  val foo: Future[Foo] = getFoo()
  foo.map(f => Ok(f))
}

§バッファリングおよび keep alive 制御の改善

Play がどのように、そしていつ Result をバッファリングするかは、HttpConnection 型の connection という新しいプロパティを持つ SimpleResult という Scala API でより良く表現されるようになりました。

これに Close を設定した場合、ボディを一度送信するとレスポンスはクローズされ、バッファリングされません。KeepAlive を設定すると、Play は HTTP 仕様に従い、転送エンコーディングまたはコンテント長が指定されていない場合に限り、コネクションをキープし、レスポンスをバッファリングしようと試みます。

§新しいアクション合成とアクションビルダーメソッド

アクションのスタックをより強力に作ることのできる、Scala アプリケーション用の ActionBuilder トレイトを提供しています:

object MyAction extends ActionBuilder[AuthenticatedRequest] {
  def invokeBlock[A](request: Request[A], block: (AuthenticatedRequest[A]) => Future[SimpleResult]) = {
    // Authenticate the action and wrap the request in an authenticated request
    getUserFromRequest(request).map { user =>
      block(new AuthenticatedRequest(user, request))
    } getOrElse Future.successful(Forbidden)
  }

  // Compose the action with a logging action, a CSRF checking action, and an action that only allows HTTPS
  def composeAction[A](action: Action[A]) =
    LoggingAction(CheckCSRF(OnlyHttpsAction(action)))
}

アクションビルダーの処理結果は、オプションのパーサとリクエストパラメータ、そして非同期なバリアントを伴った、組み込みの Action のように扱うことができます。アクションに渡されるリクエストパラメータの型は、ビルダーで指定された型、上記例の場合は AuthenticatedRequest になります:

def save(id: String) MyAction(parse.formUrlEncoded) = { request =>
  Ok("User " + request.user + " saved " + request.body)
}

§Java promise API の改良

Java Promise クラスは、その機能を Scala の Future および Promise により近づけることを目的として改良されました。特に、Promise のメソッドに実行コンテキストを渡せるようになりました。

§コンテキストを渡した Iteratee ライブラリの実行

Iteratee, Enumeratee そして Enumarator のメソッドを呼ぶ際には、実行コンテキストが必要になります。Iteratee ライブラリに実行コンテキストを見せることは、実行箇所におけるよりきめ細やかな制御を提供し、またいくつかの場面においてはパフォーマンスの向上につながります。

実行コンテキストは暗黙的に渡すことができるので、Iteratee を使うコードへの影響はほとんどありません。

§sbt 0.13 サポート

ユーザビリティおよびパフォーマンスをいくつか改善しました。

ユーザビリティの改善のひとつとして、例えば samples/java/helloworld/build.sbt のような Play プロジェクトをビルドする build.sbt ファイルをサポートするようになりました:

import play.Project._

name := "helloworld"

version := "1.0"

playJavaSettings

Java プロジェクトには playJavaSettings の宣言が必要になります。同様に、Play の Scala プロジェクトには playScalaSettings が存在しています。この新しいビルド設定のサンプルについては、サンプルプロジェクトを確認してください。play.Project を使った build.scala を使用している以前のメソッドも、引き続きサポートされます。

sbt 0.13 における変更点のさらなる詳細については、sbt の リリースノート を参照してください。

§新しい stage と dist タスク

stagedist タスク は、ネイティブパッケージプラグイン を使うために完全に見直されました。

ネイティブパッケージを使う利点は、いつもの zip ファイルに加えて、例えば tar.gz, RPM, OS X ディスクイメージ, Microsoft インストーラ (MSI) など多くの種類のアーカイブがサポートされていることです。さらに、Play 用の Windows バッチスクリプトが Unix のものと同様に提供されるようになりました。

より詳しい情報は、ドキュメント アプリケーションのデプロイ で読むことができます。

§組み込みの gzip サポート

Play は、すべてのレスポンスの gzip 圧縮を組み込みでサポートするようになりました。これを有効にする方法については、gzip エンコードの設定 を参照してください。

§ドキュメント JAR

配布される Play のドキュメントは、ディレクトリ配下ではなく JAR ファイルに格納されるようになりました。JAR ファイルにすることで、ツールによるより良いサポートを提供することができるようになります。

Play 2.1 と同じように、Play アプリケーションを development モードで実行している 場合、特別なアドレス /@documentation にアクセスするとドキュメントを読むことができます。

ファイルそのものを利用したい場合は、配布物に含められている play-docs JAR ファイルの中から見つけてください。

Next: Play 2.1 の変更点


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