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
代表的な戦略パターン
Cache-Control ディレクティブ一覧
| ディレクティブ | 意味 |
|---|---|
public | CDN(共有キャッシュ)にキャッシュしてよい |
private | ブラウザのみキャッシュ可(CDN不可) |
no-store | キャッシュ禁止(毎回オリジンへ) |
max-age=N | N秒間キャッシュを有効とする |
s-maxage=N | CDN専用のmax-age(CDNとブラウザで期間を変えたいとき) |
stale-while-revalidate=N | 期限切れ後N秒間は古いキャッシュを返しつつ裏で更新 |
immutable | TTL内はリクエストそのものをしない |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 9111 | HTTP キャッシュの現行仕様(RFC 7234 を改訂) |
| RFC 7234 | HTTP/1.1 キャッシュの旧仕様(Cache-Control の基礎定義) |
| RFC 5861 | stale-while-revalidate / stale-if-error の定義 |
| RFC 8246 | immutable Cache-Control 拡張の定義 |
関連用語
- CDN(コンテンツデリバリーネットワーク) — 世界中にエッジサーバーを分散配置してコンテンツを高速配信する仕組み
- キャッシュ(Cache) — データを一時的に保存して再利用速度を高める技術全般
- TTL(Time To Live) — データの有効期限・生存時間を表すパラメータ
- Cache-Controlヘッダー — HTTPレスポンスでキャッシュ動作を指示するヘッダー
- オリジンサーバー — CDNの配信元となる本来のWebサーバー
- エッジコンピューティング — ユーザーに近い拠点でロジックを処理するアーキテクチャ
- HTTP/2 — 多重化・ヘッダー圧縮などを導入したHTTPの第2世代規格
- Purge(キャッシュパージ) — CDN上のキャッシュをAPIなどで即時削除する操作