その fetch の結果はキャッシュされますか。
既定ではキャッシュされません。Next.js 13〜14 は既定でキャッシュする仕様だったため、古い記事を読むと逆の説明に当たります。バージョンを確認しないと判断を誤る箇所です。
面接官が見ているのは🔴 バージョンで変わった箇所。古い知識で答えると外す。
これは「一覧データの取得はどこに書きますか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- 既定ではキャッシュされない。したい場合は明示的に指定する
正解です。ここはバージョンで変わった箇所なので、正しく言えると評価されます。 - 既定でキャッシュされるので、不要なら no-store を指定する
それは App Router 初期(13〜14系)の挙動です。現在は既定でキャッシュされません。面談でこう答えると「2〜3年前で知識が止まっている」と判断されます。 - 静的レンダリングならキャッシュされ、動的ならされない
レンダリング方式とデータキャッシュは別の層の話です。混ざりやすいところですが、fetch 単体の既定はキャッシュしない、が答えです。 - 同じリクエスト内なら再利用されるが、リクエストをまたぐと再取得される
前半はメモ化の説明として正しく、公式にも記載があります。ただしそれは「キャッシュ」とは別の仕組みです。両方を区別して説明できると、理解の深さが伝わります。
面接官は何を見ているか
- 既定ではキャッシュされないと答えた
- 昔は既定でキャッシュされていた、という変遷を知っている
- キャッシュしたい場合の書き方を挙げられた
模範解答
既定ではキャッシュされません。ここはバージョンで変わった箇所なので注意が要ります。
App Router の初期(Next.js 13〜14)は fetch が既定でキャッシュされる仕様で、「勝手にキャッシュされて古いデータが出る」という声が多く出ました。その後、既定はキャッシュしない方向に変わり、現在の公式は「fetch リクエストは既定でキャッシュされず、完了するまでページの描画をブロックする」と書いています。
キャッシュしたい場合は明示します。個別の呼び出しなら fetch(url, { cache: 'force-cache' })。より新しい書き方としては "use cache" ディレクティブがあります。
面談で「Next.js は fetch を勝手にキャッシュするので怖い」と言うと、2〜3年前で知識が止まっていると判断されます。逆に、「昔はそうだったが今は既定でキャッシュしない」と言えると強いです。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
キャッシュしないなら、そのぶん毎回遅くなりますよね。どう設計しますか。