コンテンツにスキップ

119. Cache Control(履歴におけるキャッシュの扱い:記憶を「新しく」保つための管理)

原理:記憶を信じるか、今を信じるか

戻った先のページが「古い」のは困る

HTMXの履歴復元(114.)が非常に速いのは、ブラウザ内に保存された「画面のコピー(キャッシュ)」をそのまま使っているからです。 しかし、これには一つのリスクがあります。 「銀行の残高画面を履歴保存したあと、お金を引き出した。そこで戻るボタンを押したら……古い(引き出し前の)残高が表示されてしまった!」

「キャッシュ制御(Cache Control)」とは、「履歴に保存された画面(記憶)をどれくらい信じていいか、あるいはいつ最新の情報へ上書きすべきか」を管理するための技術です。


実践:鮮度の高いナビゲーションの実現

1. サーバーから「保存するな」と命じる

ブラウザに対して「このHTMLは履歴キャッシュ(戻るボタン用)に使っちゃダメだよ」と伝える方法です。

/* サーバーのレスポンスヘッダー */
Vary: hx-request
Cache-Control: no-cache, no-store, must-revalidate

2. HTMXの設定でキャッシュを制限する

HTMX全体の挙動として、履歴への保存件数を制限したり、特定のページでのみ有効にしたりする設定もあります。

3. ブラウザのキャッシュとHTMXの履歴キャッシュの違い

  • ブラウザキャッシュ: 画像やCSSファイルを保存する。サイトを速くするため。
  • HTMX履歴キャッシュ: 「あの時のHTML画面」を丸ごと保存する。戻るボタンのため。 ※ ここでは主に後者、つまり「戻った時の見た目」の鮮度をコントロールします。

4. ステップ・バイ・ステップ解説

  1. 「生もの(なまもの)」データを探す: 株価、残高、通知数など、1分1秒を争う最新情報が表示されているページを見つけます。
  2. ヘッダーの設定: サーバー側のプログラム(PHP, Python, JSなど)で、キャッシュを禁止するヘッダーを出すように設定します。
  3. 確認: 移動して、戻った時に「一瞬古い画面が出る」のではなく「最新のデータを読みに行く(チラッとインジケーターが出る)」ようになるか確認します。

比較:高速な復元 vs 最新の復元

高速な復元(デフォルト)

  • メリット: 一瞬で戻る。通信不要。ネットが切れていても戻れる。
  • デメリット: 情報が古い可能性がある。

最新の復元(キャッシュなし)

  • メリット: 常に正しい(最新の)データが見える。
  • デメリット: 戻るたびに通信が発生し、わずかな待ち時間が生じる。

まとめ:初心者のための「鮮度管理」

キャッシュ制御は、あなたのアプリに対する「信頼性」を守るための裏方仕事です。

  • 静的なページはキャッシュを活かす: ブログの記事や会社概要など、めったに変わらないページはHTMXのデフォルトのままでOKです。そのほうが圧倒的に速く感じられます。
  • 動的なページは厳しく: お金、ユーザー設定、買い物カゴ……。間違いが許されない場所では、キャッシュをOFFにする勇気を持ちましょう。
  • ハイブリッドな考え方: 「まずキャッシュでパッと画面を出し、その直後に裏で最新情報を取ってきて更新する(SWRパターン)」という高度な手法もあります。

今の自分と、過去の記憶。キャッシュ制御という精密な調整を通じて、常に正しく、かつ心地よく動く、非の打ち所がない Web アプリを実現してください。次の記事では、戻るたびに正しく名前を変える「タイトル管理(120. Title Management)」をご紹介します。