Next.js
におけるデータフェッチング戦略
Next.js
は、プロジェクトの特性に応じて3つの主要なデータフェッチング戦略を提供しています:SSG(Static Site Generation)、SSR(Server-Side Rendering)、ISR(Incremental Static Regeneration)。これらは、ページのレンダリング方法やデータ取得のタイミングに応じて使い分けることができます。それぞれの特徴を理解することで、Webアプリケーションのパフォーマンスを最適化できます。
SSG(静的サイト生成)
SSGは、ビルド時にすべてのページを静的なHTMLとして生成し、それをユーザーに提供します。このため、リクエスト時のサーバー負荷が非常に少なく、高速な表示が可能です。SSGは、頻繁に更新されないコンテンツ(例:ブログ、ポートフォリオサイト、ドキュメントサイト)に最適です。
- メリット: 高速、SEOに強い、CDNキャッシュ対応。
- デメリット: ページの更新がビルド時に行われるため、動的なコンテンツには不向き。
SSGの実装例
export async function getStaticProps() {
const res = await fetch('https://example.com/api/data');
const data = await res.json();
return {
props: { data }, // ビルド時にこのデータを取得
};
}
SSR(サーバーサイドレンダリング)
SSRは、リクエストごとにサーバー側でHTMLを生成し、ユーザーに提供します。最新のデータを常に表示できるため、頻繁に更新されるコンテンツ(例:ニュースサイト、ダッシュボードなど)に適しています。ただし、リクエストごとにレンダリングが行われるため、SSGに比べてやや遅くなります。
- メリット: 常に最新のデータを取得可能、SEOに強い。
- デメリット: 毎回レンダリングが行われるため、サーバーへの負荷が大きい。
SSRの実装例
export async function getServerSideProps() {
const res = await fetch('https://example.com/api/data');
const data = await res.json();
return {
props: { data }, // リクエストごとにこのデータを取得
};
}
ISR(インクリメンタル静的再生成)
ISRは、SSGの静的な特性を活かしつつ、指定された時間ごとにページを再生成します。これにより、SSGの高速さを維持しながら、動的なコンテンツの鮮度を保つことができます。例えば、数分ごとに更新されるブログやニュースフィードに適しています。
- メリット: SSGのパフォーマンスを維持しつつ、定期的にデータを更新可能。
- デメリット: 完全にリアルタイムの更新には向いていない。
ISRの実装例
export async function getStaticProps() {
const res = await fetch('https://example.com/api/data');
const data = await res.json();
return {
props: { data },
revalidate: 60, // 60秒ごとにページを再生成
};
}
まとめ
Next.js
では、SSG、SSR、ISRといったデータフェッチング戦略を適切に選ぶことで、アプリケーションのパフォーマンスやユーザー体験を最適化できます。静的なコンテンツにはSSG、リアルタイム性が必要なコンテンツにはSSR、動的で頻繁に更新されるコンテンツにはISRを使うと良いでしょう。