その fetch の結果はキャッシュされますか。
既定ではキャッシュされません。ただし静的に作られるページでは、ビルド時に1回取得した結果がページに焼き込まれます。13〜14 は既定でキャッシュする仕様で、古い記事は逆の説明です。
面接官が見ているのは🔴 バージョンで変わった箇所。古い知識で答えると外す。
これは「一覧データの取得はどこに書きますか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- 既定ではキャッシュされない。したい場合は明示的に指定する
正解です。ここはバージョンで変わった箇所なので、正しく言えると評価されます。 - 既定でキャッシュされるので、不要なら no-store を指定する
それは App Router 初期(13〜14系)の挙動です。現在は既定でキャッシュされません。面談でこう答えると「2〜3年前で知識が止まっている」と判断されます。 - 静的レンダリングならキャッシュされ、動的ならされない
実際の見え方としては正しいです。fetch 自体はキャッシュしませんが、静的にプリレンダーされるページではビルド時に1回取得した結果がページに焼き込まれます。「キャッシュ」と「静的生成」という2つの仕組みが重なっている、と説明できると強いです。 - 同じリクエスト内なら再利用されるが、リクエストをまたぐと再取得される
前半はメモ化の説明として正しく、公式にも記載があります。ただしそれは「キャッシュ」とは別の仕組みです。両方を区別して説明できると、理解の深さが伝わります。
面接官は何を見ているか
- 既定ではキャッシュされないと答えた
- 昔は既定でキャッシュされていた、という変遷を知っている
- キャッシュしたい場合の書き方を挙げられた
模範解答
既定ではキャッシュされません。ここはバージョンで変わった箇所なので注意が要ります。
App Router の初期(Next.js 13〜14)は fetch が既定でキャッシュされる仕様で、「勝手にキャッシュされて古いデータが出る」という声が多く出ました。その後、既定はキャッシュしない方向に変わり、現在の公式は「fetch リクエストは既定でキャッシュされず、完了するまでページの描画をブロックする」と書いています。
ただし「キャッシュしない」と「毎回取りに行く」は同じではありません。従来の設定では、ページが静的にプリレンダーされる場合、cache を指定しない fetch はビルド時に1回だけ実行され、結果がページに焼き込まれます(cookies() などを読む前に到達する fetch の場合)。「キャッシュしていないのに古い」は、今もこれで起きます。
キャッシュしたい場合は明示します。個別の呼び出しなら fetch(url, { cache: 'force-cache' })。より新しい書き方として "use cache" ディレクティブがありますが、これは Cache Components(next.config の cacheComponents: true。16.4 で新規作成したアプリでは既定で有効) を有効にしたときの機能です。
面談で「Next.js は fetch を勝手にキャッシュするので怖い」と言うと、2〜3年前で知識が止まっていると判断されます。逆に、「昔はそうだったが今は既定でキャッシュしない」と言えると強いです。
対象: Next.js 16(App Router) 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。