データフェッチング
データフェッチング
💡 なぜ学ぶべきなのか?
概念
Next.js 14以降のApp Routerが提供する高度なキャッシングとISR(Incremental Static Regeneration)機能は、モダンWebアプリの必須技術です。大量トラフィックの処理とユーザー体験の最適化に直結しており、Naver・Coupang・Tossのような大企業でも重要なパフォーマンス指標として評価されています。
なぜ重要なのか?
コマース商品一覧のように頻繁に変わるデータをリクエストのたびにサーバーから取得すると、応答時間が3秒を超えて直帰率が50%増加します。また、ニュースサイトやブログのようにコンテンツ更新は必要でもリアルタイム性がさほど求められない場合、適切なrevalidate戦略でCDNコストを70%削減できます。
コアコンセプト
Next.jsのデータフェッチングは「スマート冷蔵庫」に例えられます。冷蔵庫が賞味期限を確認して傷んだものだけ新しく買い直すように、Next.jsはデータの「鮮度」を管理し、古くなったものだけサーバーから再取得します。fetchキャッシングはデータを保存する冷蔵庫の役割を果たし、revalidateは賞味期限を確認するセンサーの役割を担います。
キーポイント
- ▸
fetch()はデフォルトでRequest MemoizationとData Cacheの2段階でキャッシングされる - ▸
revalidateオプションでデータ鮮度の更新周期を制御(秒単位) - ▸App Routerでは
generateStaticParamsと組み合わせることで動的ルーティングまで最適化可能
💡 ⚠️ よくある間違い
- ▸
revalidateの時間を短く設定しすぎてキャッシングの効果が得られない(5秒以下はほぼ不要) - ▸キャッシュタグを使わず、キャッシュ全体を破棄せざるを得ない非効率な運用(
revalidatePathの乱用) - ▸
generateStaticParamsとrevalidateを組み合わせず、動的ルーティングの最適化を見逃す
💡 🎯 面接対策
Q: Next.jsにおけるISRとSSGの違いと、それぞれをいつ使うか説明してください。
Q: 大量トラフィックの状況でNext.jsのキャッシング戦略をどのように設計しますか?
Q: revalidateTagとrevalidatePathの違いと使用シナリオを説明してください。
ヒント: ISRはビルド後もデータを更新できるハイブリッド方式と説明し、実務事例(コマース商品一覧など)を挙げて説明しましょう。キャッシングレベルの違い(Request Memoization vs Data Cache)とタグベース無効化の利点を具体的に述べると高評価につながります。