Webサイトの高速化には、CDNやサーバー設定、ブラウザキャッシュなど複数のキャッシュ戦略の組み合わせが効果的です。本記事では、サイトを劇的に速くする10のキャッシュ戦略を、効果と実装難度をふまえて解説します。
1. 静的アセットの長期キャッシュ
JS・CSS・画像など内容が変わらないアセットには Cache-Control: public, max-age=31536000, immutable を設定。1年間ブラウザにキャッシュさせます。ファイル名にハッシュを含めて更新時はURL自体を変える運用が定番です。
2. HTMLの短期キャッシュ
HTMLは max-age=0, must-revalidate または短いTTL(数分〜1時間)で運用。CDNで「stale-while-revalidate」を使うと、ユーザーに古いHTMLを返しつつバックで更新を取りに行ける。
3. CDN前段化
Cloudflare・CloudFront・Fastly等を前段に置き、エッジでキャッシュ。地理的に近いPoPから配信されることでTTFBが大幅短縮されます。
4. ISR / On-demand Revalidation
Next.jsのISRやVercel Cacheを使うと、静的ページを「必要なタイミングで再生成」できます。コンテンツ更新時にWebhookで再生成トリガーを送る運用が定石です。
5. キャッシュキーの設計
クエリパラメータ・Cookie・ヘッダーをキャッシュキーに含めるか、慎重に設計。不要なキー(GA等のトラッキング)はキャッシュ前に無視させてヒット率を上げます。
6. APIレスポンスのキャッシュ
頻繁に変わらないAPIにはCache-ControlまたはETagを付与。CDNやNginxでキャッシュさせ、起点サーバーの負荷とレスポンスタイムを同時に改善します。
7. Service Workerによるオフライン/再訪キャッシュ
PWAで定番のService Worker(Workbox)を使うと、ネットワーク到達前にキャッシュから即返却可能。リピートユーザー体験が劇的に向上します。
8. データベース層のキャッシュ
Redis・Memcached・PlanetScale Edge Cacheなど、DBの前段にKVキャッシュを置くと、繰り返しクエリのレイテンシが激減。ユーザーセッションや人気記事のリストに有効です。
9. SWR / TanStack Queryなどクライアント側キャッシュ
SPAではフロント側でレスポンスをキャッシュ。stale-while-revalidate相当の挙動でUX向上に直結します。ReactならTanStack Queryがデファクト。
10. Brotli/gzip圧縮
キャッシュとは別軸ですが、配信量が減るためキャッシュHIT後のロードも高速化します。BrotliはgzipよりHTML/JS/CSSの圧縮率が高く、主要CDNで標準サポート。
まとめ
サイト高速化は、単一の施策よりもキャッシュ層を重ねる設計が効果的です。ブラウザ→CDN→サーバー→DBの各層でTTLとキャッシュキーを整えれば、コストを抑えながら大幅な改善が可能になります。まずは静的アセットの長期キャッシュ+CDN前段化から始めましょう。