⚡

[Next.js] fetch関数で取得したデータをキャッシュしない

に公開
2026/09/29

🌱 はじめに

Next.jsの学習の為に、下記書籍を読みました。
下記書籍のキャッシュについて学びがあったので、執筆します。

🌱 結論

キャッシュとは、
Web ページや画像、スクリプトなどのコンテンツを一時的に保存する仕組みです。
これにより、同じページに再度アクセスするときにサーバーにリクエストを送ることなく、
素早くコンテンツを表示することができます。

Next.js(App Router)の場合は、サーバー側で fetch の結果を保存し(Data Cache)、以降のリクエストやビルドで再利用します。
{ cache: 'no-store' } を指定すると、リクエストのたびにデータを取得し直します。

オプションの有無で fetch の流れがどう変わるかを図にすると、次のようになります(Next.js 14 の場合)。

Next.js 14で、オプションなしの場合はData Cacheに保存した結果を再利用し、no-storeの場合は毎回外部APIから取得する流れを比べたシーケンス図

🌱 使い分け

1. 動的データ

例えば、下記項目のような変更が多いデータに対して有効

  1. 閲覧履歴
  2. 商品在庫数

2. 静的データ(キャッシュ)

例えば、下記項目のような変更が少ないデータに対して有効

  1. 商品概要
  2. ブログ記事
  3. ニュース記事

なお、一定間隔で更新したいデータは、next: { revalidate: 60 } のように再検証する間隔(秒)を指定する方法もあります。

🌱 補足事項

1. 初期値は、キャッシュされる(Next.js 14 まで)

fetch(`http://...`);

Next.js 15 以降は既定値が変わり、オプションを指定しない fetch の結果はキャッシュされません。
15 以降でキャッシュしたい場合は、{ cache: 'force-cache' } を明示します。

2. npm run dev では正しく動作確認できない

ビルド時にも以前取得した fetch の結果が再利用されるため、下記コマンドでキャッシュを削除してからビルド・起動すれば、挙動を確認できる

rm -rf .next/cache
npm run build
npm start
GitHubで編集を提案

Discussion