Open10
Next.js の ビルドの種類とレンダリングモード(SSR / ISR / SSG / Static Exports)
ふわっとしていたのでざっくりまとめてみる。
大きく分けるとビルドの種類は2つと考えることができる
Next.js をフルスタックフレームワークとして利用
- SSR / ISR / SSG
Static Exports を有効にする
- 静的ファイルとして生成
- SSGとは異なり機能に制約がある
- Route Handler や API Routes などのサーバー側機能
- Image コンポーネントなど
SSR
- アクセスがあった際にページを生成する
- 常に最新の情報を表示できるメリットがある
- SSGに比べると都度生成するのでパフォーマンスは劣る
ISR
- SSGとSSRの中間
- SSGの拡張版で、ビルド時に静的ファイルを生成するのは同じ
- ただし、一定期間キャッシュした後、バックグラウンドで再生成が走る
- 再生成中も古いページを表示できるので、アクセス中断がない
- 定期的に最新のデータに更新されるため、リアルタイム性とパフォーマンスの両立に適している
SSG
- ビルド時に静的なファイルを生成
- Static Exportsと異なる点
- Static Exportsはoutディレクトリに出力されそれをNode以外の環境に配置できる
- そのため機能に制約がある
- SSGの場合はNext.js側でファイルを持っていてリクエストに応じて返却する
- Next.jsがNodeランタイムでNodeの機能も使いながらハンドリングする
- フルスタックフレームワークとしての機能やImageコンポーネントなども利用可能
- Static Exportsはoutディレクトリに出力されそれをNode以外の環境に配置できる
Static Exports
- ビルド時に静的なファイルを生成
- 冒頭で記載したとおりNext.jsが用意している機能の利用に制約がある
- 単純な静的なファイルなのでホスティング先の選択肢が大幅に広がる
- Node.jsやEdgeRuntimeなど環境に縛られないのでApacheなどにもデプロイできる
- 社内で例えばAWS縛りがあるならS3 + CroudFront など
選択基準
- (Next.jsの)必要とする機能
- 選択可能なホスティング先
更新のスピードが求められないような都度ビルド(ヘッドレスCMSからWebHookで通知とか)でも良いWEBサイトなら、ヘッドレスCMSとStatic Exportsというような組み合わせで十分な気がする。
コストを最小化できそう。
法人の場合はホスティング先の選択肢がいろいろな制約がありそうだけど、静的ファイルなら一気に選択肢は広がる。
自分のポートフォリオサイト
- Next.js / AppRouter(Route Handler)
- Cloudflare Pages(Edge Runtime)
- Newt(ヘッドレスCMS)
- 活動履歴
- 個人開発したアプリのFAQコンテンツ
この構成で0円で運用できている。
おまけ:Cloudflare Pages / Newt 無料プランで商用利用できるか
Cloudflare Pages:いけるみたい
Newt:いける