[CakePHP4]CSSやJavaScript、画像のブラウザキャッシュ対策

[CakePHP4]CSSやJavaScript、画像のブラウザキャッシュ対策
2023年10月08日2023年10月10日 PR

ブラウザは、Webサイトで使用されているCSS、JavaScript、画像などのデータをキャッシュして、ウェブページの読み込み速度を向上させようとします。

その結果、サーバー上のCSSやJavaScript、画像が更新された場合でもブラウザは以前の情報を保持し続け、Webサイトが正しく表示されないことがあります。

ブラウザのキャッシュクリアにする方法として、ショートカット「Ctrl + F5」をおこなう必要がありますが、Web業界の人以外はキャッシュのクリア方法を理解している人は少ないと思われます。

Webサイトにアクセスしたユーザー全員が問題なく表示させるためには、Webサイト運営側で細工をしておく必要があります。

CakePHP4には便利なキャッシュ更新用の機能がある

CakePHP4には、最新のCSSやJavaScript、画像ファイルのブラウザキャッシュ対策機能が準備されています。

デフォルトでは無効化されているので、機能を気付いていない人が多い気がしますがブラウザキャッシュクリア機能は便利でおすすめです。

本記事ではCakePHP4をベースに書いていますが、CakePHP3でも同様の機能があります。設定方法も同じです。

ブラウザキャッシュをクリアにする仕組み

ブラウザキャッシュをクリアするためには、同じURLを使用しないということです。

CakePHPの場合は、URLのGETパラメーターにファイルの更新日時のタイムスタンプを付与してくれるます。

つまり、CSSやJavaScript、画像ファイルを更新した場合、ファイルの更新日時が最新日付になるので、Webブラウザから見ると違うファイルを読み込んでもらう仕組みになっています。

■サンプル

<link rel="stylesheet" href="/css/style.css?1696749696"/>
ファイル更新日時ファイルパス
無効/css/style.css
2023/10/3 17:23/css/style.css?1696321431
2023/10/8 11:33/css/style.css?1696732411

開発者は、手動でタイムスタンプや任意の文字列を毎度付ける必要はなくフレームワークが自動で対応してくれます。

CakePHP4のブラウザキャッシュの設定方法

設定ファイルである「/config/app.php」の項目を修正します。

Asset部分はデフォルトで定義されていますが、もし定義されていない場合は下記を追加してください。

/config/app.php
'Asset' => [
    // ↓ forceに書き換えてコメントアウトを外す
    'timestamp' => 'force',
    // 'cacheTime' => '+1 year'
],

 timestampの設定値は下記の動作になっています。

デバッグモードasset.timestampブラウザキャッシュ機能の動作
truetrueすべて有効
trueforceデバッグモードが無効の場合に有効
falsefalse無効

本番運用時(デバッグモードが無効)のみ有効にしたい場合は、「force」で設定しておきましょう。

注意点

注意点として、CSSやJavaScript、画像ファイルを読み込ます場合は、必ずCakePHPのFormヘルパーを使用してください。

<?= $this->Html->script('script.js') ?>
<?= $this->Html->css('style.css') ?>
直書きしている場合は動作しないので注意です。

ブラウザキャッシュ時間の操作も可能

先ほど紹介した「timestamp」以外に「cacheTime」があったかと思いますが、「cacheTime」を有効にすることでWebブラウザに対しキャッシュ時間をコントロールすることができます。

下記のように有効にすることでキャッシュ時間を設定することができます。

/config/app.php
'Asset' => [
    'cacheTime' => '+1 year'
],
設定値時間
+1 year1年間キャッシュ
+30 day30日間キャッシュ

timestampを有効にした場合は、基本的にずっとキャッシュしていても問題ないはずなので1年とか長期間の設定がおすすめです。

もちろんファイルが更新された場合は、ファイルのURLが変更になるので問題なく最新のファイルを読み込んでくれます。

最後に

今回CakePHPのブラウザキャッシュをコントロールする方法を紹介しました。

デフォルトでは無効になっている機能なので気付かない機能かもしれませんが、本番運用時に便利な機能ですのでぜひ使ってみてください。

コメント

ID8
勉強中の人
cakephp3でも同じ設定でできました。
ありがとうございました。

コメントを残す

お名前(任意)
コメント:新規