Mistake #68 : Persistent Cache

修正が反映されない
「キャッシュの呪い」

深夜までかかってバグを修正し、本番環境にアップロード。
しかし翌朝、顧客からの一言で血の気が引く。
「あの、まだ直ってないんですけど...」

🧟 ゾンビデータ確認
  • 修正反映のために、顧客に「Ctrl+F5(スーパーリロード)してください」とお願いしている
  • CSSや画像をFTPで直接上書きアップロードしている
  • ファイル名にバージョン番号(例:style_v1.css)を手動でつけている
  • スマホユーザーから「画面が崩れている」というクレームが頻発する
⚠️ 警告:これは技術力不足の露呈です。
「リロードしてください」は、あなたの敗北宣言と同じです。

01. 見えない壁

Server
(New v2)
→
🛡️
Browser Cache
→
User
(Old v1)

ブラウザは賢く、一度読み込んだファイル(CSS, JS, 画像)を保存(キャッシュ)して、2回目以降の表示を高速化します。
これはWebの基本機能ですが、ファイル更新時には最大の敵となります。
サーバー上のファイルは新しくなっても、ユーザーのブラウザは「手元の古いファイル」を使い続けるからです。

顧客にITリテラシーを求めるな。
「何もせずとも最新になる」が唯一の正解だ。

「スーパーリロードを知らないんですか?」と顧客を見下してはいけません。
スマホ(iPhone/Android)では、キャッシュクリアの手順は非常に複雑で面倒です。
古いキャッシュを見ているユーザーにとっては「バグが直っていない」という事実だけが真実であり、あなたの信頼は地に落ちます。

02. 呪いを解く「Cache Busting」

解決策はシンプルです。ファイルの中身が変わったら、ファイル名自体を変えてしまえばいいのです。
これを「Cache Busting(キャッシュ破り)」と呼びます。

Solution A: ビルドツールの導入 (推奨)

Webpack, Vite, Next.js などのモダンなビルドツールを使っていれば、この問題は起きません。
ビルド時に自動でハッシュ値を計算し、`main.a8b3c9.js` のようにユニークなファイル名を生成してくれます。
中身が1バイトでも変わればファイル名も変わるため、ブラウザは必ず新しいファイルを読みに行きます。

Solution B: クエリパラメータ付与 (応急処置)

レガシーな環境ですぐにツールを入れられない場合は、読み込みタグに日付などを付与します。
`<script src="app.js?v=20231209">`
ただし、これを手動で書き換える運用はミスのもとなので、デプロイスクリプトで自動化すべきです。

03. 開発環境の近代化を

「キャッシュ問題」に悩まされていること自体が、あなたの開発環境が前時代的(FTP手動アップロードなど)である証拠です。
CI/CDパイプラインを構築し、ビルドプロセスを自動化することで、この呪いから永久に解放されます。

執筆:モダンフロントエンド推進室

「脱・FTP」「脱・手動運用」。
Vite/Next.jsを中心としたモダンな開発環境への移行を支援し、開発体験(DX)とユーザー体験(UX)を同時に向上させます。