Next.jsはページごとにレンダリング戦略を選択できる。fetch optionsやgenerateStaticParamsの有無で自動判定される。
// SSG (Static Site Generation) — ビルド時に静的HTML生成
// generateStaticParams + fetch({ next: { revalidate: false } }) or キャッシュ
export async function generateStaticParams() {
return [{ slug: 'post-1' }, { slug: 'post-2' }];
}
// ISR (Incremental Static Regeneration) — 一定時間後に再生成
const data = await fetch(url, {
next: { revalidate: 60 }, // 60秒ごとに再検証
});
// SSR (Server-Side Rendering) — リクエスト毎にサーバーで生成
const data = await fetch(url, {
cache: 'no-store', // キャッシュ無効
});
// または dynamic = 'force-dynamic'
export const dynamic = 'force-dynamic';
// CSR (Client-Side Rendering) — クライアントで取得
'use client';
import { useEffect, useState } from 'react';
function ClientPage() {
const [data, setData] = useState(null);
useEffect(() => {
fetch('/api/data').then(r => r.json()).then(setData);
}, []);
}パフォーマンスの観点では SSG > ISR > SSR > CSR の順に有利。ただし更新頻度やパーソナライズの要件によって使い分ける。