Next.jsにおけるPre-rendering: SSRとSSGについて
React 界隈でいま最も勢いのあるフレームワークは、Next.js です。Next.js は React に最適化されたルーティングやミドルウェア機能を標準搭載し、そして SSR 機能も提供してくれるフレームワークです。
Next.jsはReactのエコシステム内で急速に普及しているフレームワークであり、その強力なPre-rendering機能が大きな魅力となっています。この記事では、その2つの主要なPre-rendering手法、SSRとSSGの違いと実装方法について詳しく解説します。
1. Server Side Rendering (SSR)
定義:
SSRは、クライアントからのリクエストがあるたびにサーバー上でページをレンダリングする方法です。
実装方法:
Next.jsでのSSRの実装は非常にシンプルです。ページコンポーネント内でgetServerSideProps関数を定義するだけです。
1.ユーザーからのリクエストがサーバーに送信される。
2.サーバーはリクエストごとにページをレンダリングします。
3.レンダリングされたページがユーザーに返され、ブラウザで表示されます。
export async function getServerSideProps(context) {
// データフェッチやDBのクエリをここで行う
const data = await fetchData();
return {
props: { data }
};
}
function MyPage({ data }) {
return (
<div>
{/* レンダリングのロジック */}
</div>
);
}
export default MyPage;
特徴と利点:
リアルタイムのデータを表示するのに適しています。
SEOのメリットがあります。検索エンジンはサーバーから返されるHTMLを直接クロールできます。
クッキーやユーザーエージェントなどのサーバーサイドの情報にアクセスできます。
デメリット:
トラフィックが多い場合、サーバーに大きな負荷がかかります。
CDNの利用が難しくなります。
2. Static Site Generation (SSG)
定義:
SSGは、ビルド時にページのHTMLを一度だけ生成し、その後はそのHTMLを再利用する方法です。
実装方法:
Next.jsでのSSGの実装もSSRと同様に簡単です。ページコンポーネント内でgetStaticProps関数を定義するだけです。
1.ビルドプロセス中にページが一度レンダリングされ、その結果がサーバーに保存されます。
2.ユーザーからのリクエストが来るたびに、保存されたページが提供されます。
3.ユーザーのブラウザでページが表示されます。
export async function getStaticProps() {
// ビルド時にデータフェッチやDBのクエリを行う
const data = await fetchData();
return {
props: { data },
revalidate: 60 // オプション: 60秒後に再生成
};
}
function MyPage({ data }) {
return (
<div>
{/* レンダリングのロジック */}
</div>
);
}
export default MyPage;
特徴と利点:
高速なパフォーマンスを提供します。すでに生成されたHTMLが返されるため、サーバーのレンダリングが不要です。
CDNとの相性が非常に良く、世界中のエッジサーバーでコンテンツをキャッシュできます。
SEOのメリットもあります。
デメリット:
ビルド時にしかHTMLが生成されないため、リアルタイムの更新が難しいです。ただし、revalidateオプションを使用して、定期的に再生成を行うことができます。
どちらを選ぶべきか?
SSRは、リアルタイムのデータやサーバーサイドの情報が必要な場合に適しています。
SSGは、静的なコンテンツや更新頻度が低いページ、高速な読み込みを求めるページに適しています。
まとめ
Next.jsは、SSRとSSGの両方のメリットを活かすことができる強力なフレームワークです。プロジェクトの要件や特性に応じて、適切なPre-rendering手法を選択することが大切です。
この記事が気に入ったらサポートをしてみませんか?