Documentation

You are viewing the documentation for the 2.0.8 release in the 2.0.x series of releases. The latest stable release series is 2.4.x.

§公開アセットを扱う

この節は JavaScript, CSS と画像などのアプリケーションの静的リソースの提供をカバーします。

Play 2.0 での public リソースを提供することは、他の HTTP リクエストにサービスを提供することとほぼ同じです。通常のリソースと同じルーティングを使用します: クライアントに CSS, JavaScript や画像ファイルを配布するためのコントローラ/アクションのパスを使用します。

§public/ フォルダ

規約により public の資産は、アプリケーションの public フォルダに格納されています。このフォルダは次のように構成されています:

public
 └ javascripts
 └ stylesheets
 └ images

このフォルダ構成に従っていれば、開始するのは簡単ですが、動作の仕組みを理解していれば、変更してもかまいません。

§どのように public アセットは公開されますか?

ビルドプロセス中に、public フォルダの内容が処理され、アプリケーションのクラスパスに追加します。アプリケーションをパッケージ化するときに、(public/ パス下にある) これらのファイルはアプリケーションのJARファイルにパッケージ化されます。

§アセットコントローラ

Play 2.0 には、公開アセットを提供する組み込みのコントローラが付属しています。デフォルトでは、このコントローラは、キャッシュ機能、ETag、gzip圧縮、JavaScript minify のサポートが提供されます。

コントローラは controllers.Assets などのデフォルトの Play JAR で利用可能であり、2 つのパラメータを持つ at アクションで定義します。

Assets.at(folder: String, file: String)

folder のパラメータは固定されており、アクションによって管理されるディレクトリを定義する必要があります。 file パラメータは、通常、動的にリクエストパスから抽出されます。

conf/routes での Assets コントローラの典型的な設定を以下でお見せします:

GET  /assets/*file        Assets.at("public", file)

正規表現 .* にマッチする動的な部分 *file を定義したことに注意してください。このため、例えば次のようなリクエストをサーバに送信した場合:

GET /assets/javascripts/jquery.js

ルータは次のパラメータを使用して Assets.at アクションを起動します:

controllers.Assets.at("public", "javascripts/jquery.js")

このアクションは、ファイルを探し、存在する場合は提供します。

“public” の外部にリソース設定を定義したい場合、そのことを sbt に教えなければならないことに注意してください。例えば以下のように定義したい場合:

GET  /assets/*file               Assets.at("public", file)
GET  /liabilities/*file          Assets.at("foo", file)

Build.scalaに以下を追加してください。

playAssetsDirectories <+= baseDirectory / "foo"

§公開リソースのリバースルーティング

routes ファイルにマッピングされた任意のコントローラと同様に、リバースコントローラが controllers.routes.Assets に作成されます。公開リソースを取得するために必要な URL をリバースする際に使用します。テンプレートでの例は以下のようになります:

<script src="@routes.Assets.at("javascripts/jquery.js")"></script>

以下の結果を生成します。

<script src="/assets/javascripts/jquery.js"></script>

リバースルートするときに、 folder パラメータを指定しないことに注意してください。これはルートファイルが folder のパラメータが固定されている Assets.at アクションに対して1つのマッピングを定義しているためです。そのため、明示的に指定する必要はありません。

しかしながら、 Assets.at アクションに2つのマッピングを定義している場合、このようにしてください:

GET  /javascripts/*file        Assets.at("public/javascripts", file)
GET  /images/*file             Assets.at("public/images", file)

リバースルータを使用する場合は、両方のパラメータを指定する必要があります。

<script src="@routes.Assets.at("public/javascripts", "jquery.js")"></script>
<image src="@routes.Assets.at("public/images", "logo.png")">

§Etag サポート

Assets コントローラーは自動的に ETag の HTTP ヘッダーを管理します。ETag の値は、リソース名とファイルの最終更新日時から生成されます。(リソースファイルがファイル内に埋め込まれているならば、JAR ファイルの最終更新日が使われます。)

Web ブラウザがこの **ETag** を指定してリクエストを行うと、サーバは 304 NotModified で応答することができます。

§Gzip サポート

同じ名前を持つリソースで .gz という拡張子を使っているものが見つかった場合、 Assets のコントローラは、適切な HTTP ヘッダを追加することによって提供します。

Content-Encoding: gzip

§Cache-Control 命令の追加

通常、ETag を使用すると、適切なキャッシュを持つことができます。特定のリソース用のカスタム Cache-Control ヘッダを指定したい場合は、あなたの application.conf ファイルに指定することができます。例えば:

# Assets configuration
# ~~~~~
"assets.cache./public/stylesheets/bootstrap.min.css"="max-age=3600"

§管理アセット

play は、デフォルトでは app/assets フォルダに保存された全てのアセットをコンパイルします。このコンパイルプロセスは、すべての管理アセットを、その変更に関わらず、クリーンして再コンパイルします。フロントエンド技術に掛かる依存性の追跡はとても厄介なので、これがもっとも安全な戦略です。

大量の管理アセットを扱う場合、この戦略は非常に遅くなり得ることに注意してください。この理由から、変更されたファイル、および依存すると想定されるファイルのみを再コンパイルする方法があります。以下を設定に追加することで、この実験的な機能を有効にすることができます:

incrementalAssetsCompilation := true

続く数ページで管理アセットについて更に学びます。

次: CoffeeScriptを使う