IT-Q

更新したのに一覧の表示が変わりません。何を疑いますか。

まずキャッシュを疑います。DBを直接見て、更新されているなら表示側が古いキャッシュを見ています。再検証を書いても revalidateTag の推奨形は古い内容を一度返すので、本人に見せるなら updateTag です。

面接官が見ているのはキャッシュの存在に気づけるかの補強。

これは「フォームの送信処理はどう実装しますか。」への追撃質問です。

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

  • キャッシュが残っている可能性を疑い、実際にDBが更新されているかを確認する
    切り分けの順序が正しいです。更新されているなら表示側の問題に絞れます。
  • 更新処理が失敗しているので、エラーハンドリングを追加する
    可能性としてはありますが、確認せずに決め打ちしています。まずDBを見て、更新されているかどうかで分岐します。
  • ブラウザのキャッシュなので、リロードすれば直る
    ブラウザ側のこともありますが、App Router ではサーバー側のキャッシュが残っている場合が多いです。「どこのキャッシュか」を切り分けないと対処を誤ります。
  • Server Function は非同期なので、少し待てば反映される
    非同期であることと反映のタイミングは関係ありません。時間での失効も再検証も設定していなければ、待ってもキャッシュは残り続けます。

面接官は何を見ているか

  • キャッシュが残っている可能性を挙げた
  • 更新後に再検証していないのでは、と疑えた
  • どこのキャッシュかを切り分けようとした

模範解答

まずキャッシュを疑います。DBは更新されているのに表示だけ古い、という状態です。

切り分けとしては、DBを直接見て実際に更新されているかを確認します。更新されているなら、表示側が古いキャッシュを見ているということです。

対処は、更新処理の中で対象のパスやタグを明示的に再検証することです。Server Function の中で更新した直後に呼びます。

ただし Next.js 16 では、revalidateTag(タグ, "max") を書いても、次の表示ではまだ古い内容が返ります。古い内容を返しながら裏で作り直す方式だからです。更新した本人に結果をすぐ見せたいなら、Server Action の中で updateTag を使うか、revalidatePath で画面を作り直します。「再検証を書いたのにまだ古い」という状態は、多くがこの違いです。

よくあるのは、更新経路が複数あって片方だけ再検証を書いている場合です。管理画面からの更新では反映されるがバッチからの更新では反映されない、といった形で表面化します。

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