ys memos

Blog

Next.jsでSSGしたブログをホスティングサービスにデプロイする設定


nextjs

2021/05/19


Next.js でブログを SSG して,Github Pages にデプロイしようと思いました.

初めての React 系フレームワークだった(Gatsby も併せて初めて触りました)ので,手間取った点もあります.

多くの人が詰まりそうな点があったので公開します.


next exportする!



漠然と,next buildをすれば SSG されて,.next内に静的サイトが生成されるのかなーと思い込んでいた点.

そして,特に考えもせずに,ステージングのようなイメージで Firebase Hosting でブログを確認しようと考え,デプロイ用ディレクトリの設定をした後,firebase deployをした.

しかし,URL にアクセスすると,自分の作成したはずのページではなく,firebase initが生成したindex.htmlが表示された.


Next.jsのデプロイメントのページを確認してみた.

next build builds the production application in the .next folder. After building, next start starts a Node.js server that supports hybrid pages, serving both statically generated and server-side rendered pages.

ここでいう production application というのは,Next.js で SSR するためということらしく,どうやら SSG するには他のアプローチが必要とのこと.

つまり,Github Pages や Firebase Hosting のような静的サイトをホスティングするサービスを使う場合は,next buildだけでは不十分だということらしい.


結論から言うと,next exportをすると良い.

next exportは,

まずは,静的 HTML エクスポートの生成については,先程のデプロイメントのページの最下部からジャンプすることができる.

該当ページによると,next exportコマンドを用いると,outディレクトリに静的 HTML が生成されるとのこと.

また,SSG として Next.js を用いたい場合は,npm run buildを以下のように設定することが推奨されている.

package.json
"scripts": {
  "build": "next build && next export"
}

ここまでで,npm run buildによってoutディレクトリにホスティングサービスにデプロイするためのファイル群が生成される.

そのまま,outをデプロイする設定をしてしまっても問題はない.


outをデプロイしてもよいのだが,正直,デプロイするディレクトリの名前としては分かりづらい.

そこで,静的 HTML の生成ディレクトリ名をbuildにしようと思う.

next exportコマンドのヘルプを見ると・・・

help_of_next_export
$ next export --help
  Description
    Exports the application for production deployment

  Usage
    $ next export [options] <dir>

  <dir> represents the directory of the Next.js application.
  If no directory is provided, the current directory will be used.

  Options
    -h - list this help
    -o - set the output dir (defaults to 'out')
    -s - do not print any messages to console

ふむふむ,-oオプションで指定できるそうだ.

以下のように設定すると良い.

package.json
"scripts": {
  "build": "next build && next export -o build"
}

以上です.

今回は,build/に静的 HTML を保存することにしましたが,

今後 Next.js の理解が深まり,build/というディレクトリ名を他の用途で使う必要があれば,

out/を静的 HTML を保存する先に戻そうかと考えています.


関連タグを探す