LoginSignup
4
1

More than 5 years have passed since last update.

Play Frameworkでブラウザキャッシュ対策(Cache Busting)

Posted at

はじめに

ブラウザには標準で静的ファイル(javascriptやcss)のキャッシュ機能が付いていますが、
本番環境にソースを挙げてもそのままでは変更が反映されないため、
クエリー文字列を付加(version管理)することでキャッシュコントロールをしていました。

<script src="./jquery.js?v=xxxxx"></script>

Play Frameworkでは?

いちいちVersion管理するのは面倒ですし、日付にするとキャッシュが効かなくなってしまいます。
ですので、Play Frameworkではsbt-digestを使います。

環境

Play Framework 2.5.10

対応策

project/plugins.sbtに以下を追加

plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.1")

build.sbtに以下を追加

build.sbt
lazy val root = (project in file(".")).enablePlugins(SbtWeb)
pipelineStages := Seq(digest)

conf/routesに以下があることを確認

GET    /assets/*file           controllers.Assets.versioned(path="/public", file: Asset)  

Htmlのスクリプトタグの書き方を以下のように変える

html
<script src="@routes.Assets.versioned("js/jquery.js")" ></script>

出力結果

結果
<script src="/assets/js/cbfb54849f63656a2ce73815cdc8a005-jquery.js"></script>

開発環境でも確認したい

もしも開発環境で確認をしたいのであれば、build.sbtに以下を追加すればローカルでも同じようになります。

build.sbt
pipelineStages in Assets := Seq(digest)
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1