CDN・エッジ

CDNキャッシュ戦略 しーでぃーえぬきゃっしゅせんりゃく

CDNキャッシュTTLCache-Controlオリジンサーバーエッジサーバー
CDNキャッシュ戦略について教えて

簡単に言うとこんな感じ!

Webサイトのファイルを「どこに・どれくらいの期間・どんな条件で」保存しておくかを決めるルールだよ!宅配便の中継センターに荷物を一時保管しておくイメージで、ユーザーに近い場所からすばやく届けられるようにする仕組みなんだ!


CDNキャッシュ戦略とは

CDN(Content Delivery Network) とは、世界各地に分散配置されたエッジサーバー群のことで、ユーザーに最も近い拠点からコンテンツを配信することで高速化を実現する仕組みです。その CDN を最大限に活かすために「何をどう保存・管理するか」を設計するのが CDNキャッシュ戦略です。

キャッシュ戦略が適切に設計されていれば、画像・CSS・JavaScriptなどの静的ファイルはオリジンサーバー(本来のWebサーバー)まで取りに行かずにエッジサーバーから即座に返せるため、応答速度の向上・オリジンサーバーの負荷軽減・通信コストの削減という三拍子が揃います。逆に設計を誤ると、古いコンテンツがいつまでもユーザーに届いたり、キャッシュが全く効かずにサーバーが過負荷になったりと、深刻な問題を引き起こします。

実務では「どのコンテンツをキャッシュするか」「どれくらいの期間保持するか」「更新されたときにどう無効化するか」の3点を中心に設計します。この3つのバランスを取ることが、CDNキャッシュ戦略の核心です。


キャッシュ戦略の3大要素

要素英語役割
キャッシュ対象の選定Cache Targeting何をキャッシュし、何をしないかを決める
TTL(有効期限)設定Time To Liveキャッシュをどれくらいの期間保持するかを決める
無効化(Purge)戦略Cache Invalidation更新時に古いキャッシュをどう削除・更新するかを決める

キャッシュ対象の分類

コンテンツは大きく「静的」と「動的」に分けて考えます。

コンテンツ種別キャッシュ方針
静的ファイル画像・CSS・JS・フォント積極的にキャッシュ(TTL長め)
準静的コンテンツトップページHTML・商品一覧短めのTTLでキャッシュ
動的コンテンツログイン後ページ・カート原則キャッシュしない
API レスポンス検索結果・在庫情報エンドポイントごとに個別判断

TTL の目安と覚え方

「静長・動短・個別は別」 と覚えましょう。

  • 静的ファイル(画像・CSS・JS):1日〜1年(変更時はファイル名にハッシュ付与で管理)
  • HTMLページ:数分〜数時間(コンテンツ更新頻度に合わせて設定)
  • APIレスポンス:数秒〜数分(鮮度が求められる場合はキャッシュなし)

歴史と背景

  • 1990年代後半:インターネット普及に伴い、特定のサーバーへのアクセス集中(スラッシュドット効果)が問題に。Akamai Technologies が 1998年に CDN サービスを商業化
  • 2000年代初頭Cache-Control ヘッダーを定義した RFC 2616(HTTP/1.1)が普及し、キャッシュ制御の標準化が進む
  • 2010年代:クラウド系CDN(CloudFront・Cloudflare・Fastly など)が台頭し、キャッシュルールをコード・設定ファイルで管理できる Infrastructure as Code 的アプローチが浸透
  • 2015年〜:HTTP/2・HTTP/3 の普及とともに エッジコンピューティング が登場。CloudflareWorkers・Fastly Compute などでキャッシュロジック自体をエッジで動かすことが可能に
  • 現在:ゼロダウンタイムのコンテンツ更新を実現する Stale-While-Revalidate パターンや、個人化コンテンツの部分キャッシュ(Edge Side Includes)など、より高度な戦略が標準化されつつある

主要なキャッシュ制御ヘッダーと戦略パターン

HTTPレスポンスに付与する Cache-Control ヘッダー がキャッシュ動作の起点です。

# 1年間キャッシュ(ファイル名にハッシュを付けて管理)
Cache-Control: public, max-age=31536000, immutable

# 60秒キャッシュ、期限切れ後も古いコンテンツを返しつつ裏で更新
Cache-Control: public, max-age=60, stale-while-revalidate=30

# キャッシュさせない(ログイン後ページなど)
Cache-Control: private, no-store

代表的な戦略パターン

CDNキャッシュ 主要戦略パターン Cache-First (キャッシュ優先) ① ユーザー → CDN ② CDNにあれば 即レスポンス ③ なければ オリジンへ 静的ファイルに最適 高速・低負荷 Stale-While- Revalidate ① 期限切れでも 古いキャッシュ返却 ② 裏でオリジンに 再検証リクエスト ③ 次回アクセスから 新しいキャッシュ HTMLページに最適 速度と鮮度を両立 Purge(即時 無効化) ① コンテンツ更新 (デプロイなど) ② CDN API で キャッシュ削除 ③ 次アクセスで 新しい内容を取得 緊急修正・ ニュース系に有効 Cache Busting (ハッシュ付与) ① ファイル名に ハッシュを付与 ② TTLを超長期に 設定(immutable) ③ 変更時はURL 自体が変わる JS・CSS・画像に 最適。最も確実 ※ 実際の設計では複数パターンを組み合わせて使用する

Cache-Control ディレクティブ一覧

ディレクティブ意味
publicCDN(共有キャッシュ)にキャッシュしてよい
privateブラウザのみキャッシュ可(CDN不可)
no-storeキャッシュ禁止(毎回オリジンへ)
max-age=NN秒間キャッシュを有効とする
s-maxage=NCDN専用のmax-age(CDNとブラウザで期間を変えたいとき)
stale-while-revalidate=N期限切れ後N秒間は古いキャッシュを返しつつ裏で更新
immutableTTL内はリクエストそのものをしない

関連する規格・RFC

規格・RFC番号内容
RFC 9111HTTP キャッシュの現行仕様(RFC 7234 を改訂)
RFC 7234HTTP/1.1 キャッシュの旧仕様(Cache-Control の基礎定義)
RFC 5861stale-while-revalidate / stale-if-error の定義
RFC 8246immutable Cache-Control 拡張の定義

関連用語