IT-Q

キャッシュした内容を、更新されたタイミングで最新にしたい。どうしますか。

時間ベースとオンデマンドの2つです。オンデマンドも即時とは限らず、revalidateTag の推奨形は古い内容を一度返します。更新した本人にすぐ見せるなら Server Action の updateTag です。

面接官が見ているのは再検証の2方式を持っているか。

よくある答えと、面談でどう見られるか

  • 時間で切る方法と、更新時に明示的に捨てる方法があり、鮮度要件で使い分ける
    両方を持ったうえで基準を言えています。
  • 更新処理の中で明示的に再検証する
    更新を早く反映したいならこれです。ただし revalidateTag の推奨形は古い内容を一度返すので、更新した本人にすぐ見せたいなら Server Action の中で updateTag を使います。更新経路が複数あると書き漏れる点にも注意します。
  • 一定時間で失効するように設定する
    捨て漏れが起きないので運用は安定します。即時性が要らないならこれで十分です。
  • キャッシュを使わないようにする
    安全ではありますが、設問は「キャッシュした内容を最新にしたい」です。やめる判断もあり得ますが、その前に再検証の手段を知っているかを見られます。

面接官は何を見ているか

  • 時間で切る方法を挙げた
  • 更新時に明示的に捨てる方法を挙げた
  • 使い分けの基準に触れた

模範解答

方法は2つあります。

時間ベースは、一定時間が過ぎたら次のアクセスで作り直す方式です。設定が1行で済み、捨て漏れが起きません。多少古くても困らないデータには、これで十分です。

オンデマンドは、更新処理の中から明示的に「このパス(またはタグ)を捨てる」と指示する方式です。更新経路すべてに書く必要があります。

ただし、オンデマンドでも「捨てた瞬間に新しい内容が出る」とは限りません。Next.js 16 で推奨されている revalidateTag(タグ, "max") は、次のリクエストにはいったん古い内容を返し、裏で作り直します(stale-while-revalidate)。更新した本人に結果をすぐ見せたいなら、Server Action の中で updateTag を使います。こちらは次のリクエストが新しいデータを待ちます。revalidatePath は、Server Function から呼べば画面がすぐ更新され、Route Handler から呼んだ場合は、次にそのパスが開かれたときに作り直されます。

使い分けは鮮度要件です。多少古くても困らないものは時間ベース、更新を早く反映したいものはオンデマンド、更新した本人に確実に見せたいものは updateTag、と段階で考えます。全部を即時にしようとせず、時間ベースで妥協できる範囲を広く取る方が運用は安定します。

対象: Next.js 16(App Router) 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。