#コーディング
古いキャッシュ撤去委員会

Webサイトの修正作業でありがちなこととして、「確認者のPCに修正前データのキャッシュが残っていて、作業をしていないと誤解される」という失敗があります。
こうならないようにすればどうすればいいのでしょうか。

スーパーリロードしてもらう

一番に思いつくのはこれでしょう。殆どのブラウザは、Ctrlキーを押しながらF5を押すことで、キャッシュ削除処理付きの「スーパーリロード」を行うようにサポートされています。これで無事に古いキャッシュは破棄されます。
が、相手依存の行為であることが問題です。確認者がスーパーリロードをしてくれないと、解決策として成立しません。一々「スーパーリロードしてください」などと報告に添えるのは手間ですし、技術的な負担を相手方にこぼすのは技術者として後ろめたいところがあります。
何より、公開済みのサイトを調整している場合、確認者がOKを出しても、修正前のページを見た一般ユーザーには当分古いまま…となっている可能性もあります。
作業時の知識としては是非覚えておきたいテクニックですが、確認・公開時の基本手段とはおすすめできません。ではどうしたらいいのでしょうか。

ソースのURLを書き換える(手動)


ブラウザは、過去に取得した覚えがあるURLに対してキャッシュを利用します。つまり、変更したソースのURLを変えてしまえば、事実上全ユーザーのキャッシュを破棄できます。
というわけで、修正するたびにファイル名を変えましょう。
冗談です。面倒ですし、毎回こんなことをしていたら別の障害に繋がりますよね。ファイル名もディレクトリも変えずにURLを変える方法があります。

上記のhoge.pngを差し替えたとして、キャッシュをすぐに消したいときは、

これでいけます。GETパラメータを与えればいいのです。
実際にプログラムの動作に使ったりはしないので、パラメータの内容は何でも構いません。今回はバージョン2という意味合いを込めて?v=2と入れていますが、分かりやすければ?day=20171019などでもいいでしょう。

ソースのURLを書き換える(自動)


更新性が高いファイルですと、パラメータを書き換える方法でもまだまだ面倒さがあります。
そんなファイルに対しては、プログラムを利用してパラメータを動的に書き換えさせましょう。PHPでしたら以下のような仕組みが利用できます。

filemtime関数は、指定したファイルの最終更新日時をUNIXタイムスタンプで返す関数です。UNIXタイムスタンプは「1970年1月1日0時0分0秒からの経過秒数」です。
上記の出力結果は以下のような形になります。

こうすることにより、ファイル更新時のみURLが自動で変わるようになります。更新をかけなければURLは変わらないため、普段はキャッシュの恩恵も受けることができます。攻守万全ですね。

まとめ

いかがでしたしょうか。他にも対策方法はあると思いますが、取り敢えずはスーパーリロード以外の削除手段を持っておきたいものです。
 

CONTACT

この度は当社へご興味お持ちいただき
ありがとうございます。
Webに関するお悩みございましたら、
是非一度お気軽にご相談ください。
平日10:00~19:00