0Pricing
React Academy · レッスン

Next.jsのCache Options付きfetch()

fetchでforce-cache、no-store、revalidate optionsを使い、キャッシュ動作を制御します。

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

Next.jsの拡張fetch

Next.jsは、キャッシュと再検証を制御するnextオプションによって、ネイティブのfetch() APIを拡張しています。これはServer Componentsとルートハンドラーでのみ機能します。

force-cache(デフォルト)

Next.jsのfetch()はデフォルトでforce-cacheを使用します。レスポンスを無期限にキャッシュし、明示的に再検証されるまで、すべてのリクエストで再利用します。

// Cached forever (build-time static)
const res = await fetch('https://api.example.com/config', {
  cache: 'force-cache',
});
const config = await res.json();

no-store — 常に最新

no-storeはキャッシュを完全に無効にします。すべてのリクエストがオリジンに到達します。個人向けデータや機密データに使用します。

// Never cached — fresh on every request
const res = await fetch('https://api.example.com/user/me', {
  cache: 'no-store',
});
const user = await res.json();

revalidate — 時間ベースのISR

next.revalidateオプションはレスポンスをキャッシュしますが、バックグラウンドでN秒ごとに再検証します(stale-while-revalidateパターン)。

// Revalidate every 60 seconds
const res = await fetch('https://api.example.com/products', {
  next: { revalidate: 60 },
});
const products = await res.json();

セグメント単位のrevalidate

ページまたはレイアウトからrevalidate定数をエクスポートすると、そのセグメント内のすべてのfetchに再検証間隔を適用できます。

// app/products/page.tsx
export const revalidate = 60; // all fetches in this page revalidate every 60s

export default async function ProductsPage() {
  const products = await fetch('https://api.example.com/products').then(r => r.json());
  return <ProductList products={products} />;
}

next.tags — タグベースの再検証

next.tagsを使ってfetch呼び出しにタグを割り当てます。Server ActionまたはルートハンドラーでrevalidateTag(tag)を使用すると、タグ付けされたすべてのキャッシュをオンデマンドで無効化できます。

const res = await fetch('https://api.example.com/posts', {
  next: { tags: ['posts'] },
});

// In a Server Action or route handler:
import { revalidateTag } from 'next/cache';
revalidateTag('posts'); // invalidates all fetches tagged 'posts'

revalidatePath

revalidatePath(path)は特定のURLパスのキャッシュを無効化し、次のリクエスト時に再生成させます。

import { revalidatePath } from 'next/cache';

// After creating a new post:
revalidatePath('/blog'); // purge /blog page cache
revalidatePath('/blog/[slug]', 'page'); // purge all /blog/[slug] pages

動的関数によるオプトアウト

ページ内でcookies()、headers()を呼び出したり、searchParamsを読み取ったりすると、そのページは動的になります。ページ全体がキャッシュ対象外になります。

import { cookies } from 'next/headers';

export default async function ProfilePage() {
  const token = cookies().get('token');
  // This page is now dynamic — not cached
  const user = await getUser(token?.value);
  return <Profile user={user} />;
}

重複排除

Next.jsは、1回のレンダリングパス内で同一のfetch呼び出しを重複排除します。2つのServer Componentsが同じURLを取得しても、HTTPリクエストは1回だけ実行されます。

リクエストメモ化とキャッシュの違い

キャッシュ層は2つあります。Request Memoization(リクエスト単位の重複排除、自動)とData Cache(永続的で、cache/revalidateオプションによって制御)です。

キャッシュ動作のデバッグ

next buildを実行してビルド出力を確認します。各ルートにレンダリング戦略が表示されます。Static(キャッシュ済み)、Dynamic(キャッシュなし)、またはISR(再検証間隔)です。

確認問題

めったに変わらないものの、完全な再デプロイなしで更新したいデータには、どのfetchキャッシュオプションを使用すべきですか?

まとめ

静的データにはcache: 'force-cache'、常に最新のデータにはcache: 'no-store'、ISRにはnext: { revalidate: N }を使用します。next.tagsでfetchにタグを付け、オンデマンドで無効化するにはrevalidateTag()を呼び出します。動的関数を使用すると、ページは自動的にキャッシュ対象外になります。

よくある質問

「Next.jsのCache Options付きfetch()」レッスンは無料ですか?

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

「Next.jsのCache Options付きfetch()」で何を学びますか?

fetchでforce-cache、no-store、revalidate optionsを使い、キャッシュ動作を制御します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Next.jsのCache Options付きfetch()」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. Next.jsのCache Options付きfetch()
  2. unstable_cacheとReact cache()
  3. Incremental Static Regeneration(ISR)
  4. データMutationのためのServer Actions
← React Academyに戻る