コンテンツにスキップ

058. Cache Control(キャッシュ制御:通信結果を賢く「再利用」する)

原理:一度得た知識は忘れない、Webの節約術

同じ情報を何度も聞きに行かない

「キャッシュ」とは、一度取得した情報を手元(ブラウザ内)に一時的に保存しておき、次回の通信をゼロから行わずに、保存した内容をサッと使い回す仕組みのことです。

ブラウザの「戻る」ボタンを押したときに一瞬で画面が出るのは、このキャッシュのおかげです。 HTMXにおいても、同じボタンを何度も押したときに毎回サーバーへ重たいリクエストを送るのは、回線の無駄遣いであり、電気代や通信費(そしてユーザーの貴重な時間)の無駄でもあります。

「このデータはしばらく変わらないから、手元のものを使い回そう」と決めること。これがキャッシュ制御の基本です。

HTMXの賢いキャッシュ管理

HTMXは、基本的にはブラウザが持っている標準のキャッシュ機能を信じて動きます。 特に「GETリクエスト」はWebの歴史上、最もキャッシュと相性が良いとされており、サーバー側で「これは1時間保存していいよ」と指示を出すだけで、HTMXは二回目以降のクリックを爆速(通信なし)で完了させることができます。


実践:スピードと鮮度のバランスを取る

1. サーバーからの「保存期間」の指定(疑似コード)

サーバーが返すHTMLと一緒に、レスポンスヘッダーで「どれくらい保存していいか」を伝えます。

/* サーバーからのレスポンスヘッダー */
Cache-Control: max-age=3600  (3600秒=1時間はキャッシュしてOK、という意味)

<div>このお知らせは、1時間は変わりません。</div>

2. あえてキャッシュさせない(鮮度が命の場合)

「今の株価」や「チャットの最新メッセージ」など、一瞬でも古くなると困る情報の場合は、キャッシュを禁止します。

Cache-Control: no-cache, no-store, must-revalidate
これをサーバーが返すと、HTMXは毎回必ずサーバーへ最新情報を取りに行きます。

3. HTMX独自の「過去の履歴」キャッシュ

前回の記事(036.hx-history)で触れた通り、HTMXは「戻る・進む」ボタンのために、現在の画面のHTMLをまるごとキャッシュしています。これは通信のキャッシュとはまた別の、HTMX自慢の「瞬間記憶」機能です。


比較:キャッシュあり vs キャッシュなし

キャッシュあり

  • 速さ: 異次元の速さ(通信が発生しない場合があるため)。
  • 欠点: サーバー側でデータが更新されても、古い情報が表示され続ける可能性がある。
  • 用途: ヘルプ記事、商品画像、静的なロゴ、デザイン用のパーツ。

キャッシュなし

  • 速さ: 通信環境に左右される。
  • 利点: 常に最新。
  • 用途: 自分の残高、在庫数、緊急の通知。

まとめ:初心者のための「節約」と「鮮度」

キャッシュ制御は、あなたのアプリを「速くて、でも嘘をつかない」絶妙なバランスへと導く技術です。

  • GETリクエストこそ主役: GETは「キャッシュしても良い」という前提があるため、積極的に活用して高速化を狙いましょう。
  • サーバーの指示を正しく: 「どうやってキャッシュを止めるか」を知っておくことも、バグ(古いデータが表示される)を防ぐために非常に重要です。
  • 開発者ツールの監視: chromeなどのコンソールで「Disable cache」のチェックを外したり付けたりして、実際にキャッシュが効いているか(Networkタブに「from cache」と出るか)を確認してみましょう。

得た情報を賢く蓄え、必要なときだけ新しく。Cache-Control という魔法の指示書を使いこなして、環境に左右されない、常に最高のレスポンスを誇るWebサイトを目指してください。次の記事では、特定の「条件」を満たした時だけ情報をくれる Conditional Request(059. Conditional Request)をご紹介します。