0Pricing
React Academy · レッスン

Reactアプリのエッジキャッシュ戦略

Cache-Controlヘッダー、Cloudflare KV、R2を使い、レンダリング済みページと静的アセットをエッジでキャッシュします。

「Reactアプリのエッジキャッシュ戦略」はCoddyKit上の無料React Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

エッジキャッシュ用のCache-Controlヘッダー

Cache-Controlレスポンスヘッダーは、CloudflareなどのCDNがSSRレスポンスをキャッシュする期間を制御します。主なディレクティブは、max-age(ブラウザーキャッシュ)、s-maxage(CDNなどの共有キャッシュの保持期間)、stale-while-revalidate(バックグラウンドで再検証している間、古いコンテンツを提供)です。

s-maxageとmax-ageの違い

s-maxageは共有キャッシュ(CDN)で使用され、max-ageはブラウザーキャッシュ用です。SSRページでは通常、s-maxage=60(CDNが60秒間キャッシュ)とmax-age=0(ブラウザーは常に再検証)を設定します。これにより、すべてのユーザーがエッジキャッシュから適度に新しいコンテンツを受け取れます。

stale-while-revalidateによるSSRページのキャッシュ

Cache-Controlヘッダーにstale-while-revalidate=30を追加すると、Cloudflareはキャッシュ済みのページを即座に提供しながら、バックグラウンドで新しいバージョンを取得します。ユーザーは常に高速なレスポンスを受け取れ、古い状態が続く最大時間はs-maxage + stale-while-revalidate秒です。

パーソナライズされたページ: Varyヘッダー

ユーザーセッションやロケールに基づくパーソナライズされたコンテンツは、共有キャッシュから別のユーザーに誤って提供されてはいけません。Vary: Cookieヘッダーを指定すると、CloudflareはCookieの値ごとに個別のキャッシュエントリとして扱います。これにより、あるユーザーのデータが別のユーザーに提供されるのを防げます。

認証済みリクエストでキャッシュをバイパスする

一般的なパターンでは、キャッシュを使用するかどうかを決める前に、WorkerでセッションCookieの有無を確認します。セッションCookieが存在する場合はキャッシュを完全にバイパスし、パーソナライズされたレスポンスをレンダリングします。セッションCookieがなければ、そのページは公開ページなのでキャッシュから提供できます。

Cloudflare KV: エッジのキーバリューストア

Cloudflare KVは、ユーザーの近くにデータを保存するグローバル分散キーバリューストアです。レンダリング済みHTMLをKVにキャッシュできます。レンダリングしたページをTTL付きの値として保存し、以降のリクエストではReactで再レンダリングする代わりに、エッジでKVから読み取ります。

KVの読み取りと書き込みのパフォーマンス

KVの読み取りが高速なのは、リクエストを処理するエッジPoPにデータが複製されているためです。一般的な読み取りレイテンシは5ms未満です。一方、KVの書き込みには結果整合性があり、あるリージョンでの書き込みがすべてのグローバルPoPに伝播するまでに最大60秒かかります。そのため、一部のユーザーには短時間、古いデータが表示される場合があります。

Cloudflare R2: 大きなアセット向けオブジェクトストレージ

Cloudflare R2は、エグレス料金のないS3互換オブジェクトストレージサービスです。KVに収まらない大きなアセットに適しています。たとえば、WASMモジュール、事前レンダリングしたOG画像、大規模なJSONデータセットなどです。Workersからは、KVと同様にバインディングを介してR2にアクセスします。

きめ細かな無効化のためのキャッシュタグ

Cloudflare Enterpriseはキャッシュタグをサポートしています。Cache-Tag: product-42を付けてレスポンスをタグ付けし、product 42が変更されたときにCloudflareのAPIを呼び出すと、product-42が付いたすべてのレスポンスをパージできます。これにより、キャッシュ全体をパージせず、対象を絞ってキャッシュを無効化できます。

デプロイ時のキャッシュ無効化への対応

Workerの新しいバージョンをデプロイすると、既存のキャッシュ済みHTMLが古いJSバンドルのファイル名を参照する可能性があります。堅牢な方法は、キャッシュキーにデプロイのバージョンを含めることです。または、バージョン付きのバンドルファイル名(Viteのコンテンツハッシュによる)を使えば、古いHTMLからも常に有効なキャッシュ済みJSファイルを参照できます。

KVベースのHTMLキャッシュ実装

SSR HTMLをKVにキャッシュするWorkerは、次のパターンに従います。URL(必要に応じてロケールも含む)からキャッシュキーを計算し、KVにヒットがあるか確認します。ヒットした場合は、キャッシュ済みHTMLを即座に返します。ミスした場合はReactでレンダリングし、結果をTTL付きでKVに保存してから、新しくレンダリングしたHTMLを返します。

Cloudflare KVの整合性モデル

Cloudflare KVが書き込みに使用する整合性モデルは何ですか?

レッスンのまとめ

Reactアプリのエッジキャッシュでは、複数の戦略を組み合わせます。公開ページのCDNキャッシュにはCache-Controlのs-maxageを、パーソナライズされたレスポンスの共有防止にはVary: Cookieを、エッジでキャッシュしたレンダリング済みHTMLにはKVを、きめ細かな無効化にはキャッシュタグを使用します。KVの結果整合性モデルでは、書き込みの伝播に最大60秒かかるため、それを考慮してTTLと無効化戦略を設計してください。

よくある質問

「Reactアプリのエッジキャッシュ戦略」レッスンは無料ですか?

はい。「Reactアプリのエッジキャッシュ戦略」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「Reactアプリのエッジキャッシュ戦略」で何を学びますか?

Cache-Controlヘッダー、Cloudflare KV、R2を使い、レンダリング済みページと静的アセットをエッジでキャッシュします。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Reactアプリのエッジキャッシュ戦略」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. エッジレンダリングとは何か、なぜ重要なのか
  2. Honoを使ったCloudflare Workers上のReact
  3. エッジからのストリーミングSSR
  4. Reactアプリのエッジキャッシュ戦略
← React Academyに戻る