「Next.jsを静的サイトにホスティングできるんだっけ・・?」
公式にStatic HTML Export
と書かれているので出来るはずですが、自分で試さないと安心できなかったのでやってみました。
実現したいこと
Next.jsで作成したアプリケーションを静的サイトとしてデプロイするが目的です。 今回はデプロイ先として、GitHub Pagesを選択しました。
実際に動いているURLはこちらです。 Next.js Sample Website
デプロイまでの手順
- GitHub Pagesとして使うリポジトリを用意する。
- Next.jsの
next build
でビルドしたソースコードをnext export
で静的サイトとしてエクスポートできるようにする。 - GitHub ActionsでGitHub Pagesにデプロイできるようにする。
- masterブランチへのpushをトリガーにして、 GitHub Actionsが動くようにする。
必要な手順はこのようになります。一つずつ見ていきましょう。
GitHub Pagesとして使うリポジトリを用意
https://help.github.com/ja/github/working-with-github-pages/about-github-pages
公式のドキュメントを一読しましょう。日本語のページが用意されているので、実際に手を動かしてやってみるのがおすすめです。
静的サイトとしてエクスポートする
"scripts": { "dev": "next dev", "build": "next build", "start": "next start", "export": "next export" }
package.jsonの抜粋です。next export
がエクスポートのコマンドなので、npm run export
で実行できるようにしておきましょう。
yarnでも同様の進め方が可能ですが、今回はnpmで進めていきます。
GitHub Actionsでデプロイ
今回はこちらを使っていきます。
Actions上でNode.jsを扱いたいので、こちらを参考にしつつ以下のようなymlファイルを用意します。
name: Node.js CI on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 with: node-version: '12.x' - name: Install dependencies run: npm ci - name: build run: npm run build - name: export static html run: npm run export - name: jekyll run: touch ./.nojekyll - name: Deploy uses: JamesIves/github-pages-deploy-action@releases/v3 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BRANCH: master FOLDER: out
masterブランチへのpushをトリガーにして、GitHub Pagesへのデプロイまでを実行できるようになりました。 見れば分かる箇所は飛ばしつつ、補足をしていきます。
yamlのファイル名
今回はGitHub Actionsを1つ試すだけなので、適当な名前でOKです。作成したyamlは.github/workflows
配下に配置しましょう。
jekyllの無効化
- name: jekyll run: touch ./.nojekyll
GitHub Pagesではデフォルトでjekyllの変換機能が入っていますが、今回はNext.jsの静的ホスティングを試すために変換を無効にする必要が出てきます。
.nojekyll
をルートディレクトリに配置することで無効にできるので、忘れずに入れておきましょう。
デプロイ指定の落とし穴
- name: Deploy uses: JamesIves/github-pages-deploy-action@releases/v3 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BRANCH: master FOLDER: out
BRANCHの指定はGitHub Actionsのトリガーに選んでいるブランチと同じにしましょう。master以外のブランチでGitHub Actionsが動くように設定している場合はBRANCHの変更も忘れないでください。
FOLDERに指定しているout
ディレクトリは、next export
でソースコードがエクスポートされるディレクトリです。指定があっていないと「CIは正常に通ってるけど、ページが見れない」状態になってハマるので注意してください。
まとめ
同じことを試されている方が多くいたのですんなり行くかと思っていましたが、意外とハマりどころがありました。GitHub Actionsの練習にもなるので、これから入門する人はやってみるのがオススメです。