概要
- Next.jsで作ったアプリをGitHub Pagesで公開するまでの手順
- はまりどころがあったのでその備忘です
- 以下の例ではGitHub Actionsを使ってmasterにPushされたら自動でデプロイされるようにしてます
はまりどころ①URLのbasepath問題
- GitHub Pagesで公開したアプリのURLは
https://{アカウント名}.github.io/{リポジトリ名}/
の形式になります -
{リポジトリ名}
の部分のことをbasepathと呼んでいますがこれを設定する必要があります- 設定しないとJSファイルなどのリソースを
https://{アカウント名}.github.io/xxx.js
とbasepathが無いURLでとりにいってしまいます
- 設定しないとJSファイルなどのリソースを
-
next.config.js
にassetPrefix
を入れることで設定できます
next.config.js
module.exports = {
assetPrefix: '/repository-name',
};
- basepathが不要な環境で動かすこともあるので自分の場合は以下のようにしてます
-
dotenv
はnpm i -D dotenv
で追加しています
-
next.config.js
require('dotenv').config();
module.exports = {
assetPrefix: process.env.GITHUB_PAGES ? '/repository-name' : '',
};
-
GITHUB_PAGES
という環境変数が渡された時だけbasepathの設定を入れるようにしています - これをGitHub Actionsでデプロイするための設定は以下のような感じです
-
package.json
のscripts
の"export": "next export"
を入れるのを忘れずに
-
.github/workflows/deploy.yml
name: deploy
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Use Node.js 12
uses: actions/setup-node@v1
with:
node-version: 12
- name: install
run: |
yarn install
- name: build
run: |
yarn build
env:
GITHUB_PAGES: true
- name: export
run: |
yarn export
- name: deploy
uses: peaceiris/actions-gh-pages@v2.3.1
env:
PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./out
- buildのタイミングで環境変数に
GITHUB_PAGES
を設定しています - GitHub Pagesにデプロイする処理はactions-gh-pagesを使っています
- 詳しい使い方はこちらの記事をご参照ください
はまりどころ②JSファイルが404になってしまう問題
- ここまでの手順でデプロイに成功し画面を表示することはできますが、JSファイルなどの取得が全て404になってしまいます
- URLは正しいはずなのになぜ???とはまりました
![スクリーンショット 2019-11-14 8.06.20.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F175213%2F9cf4ec9c-59db-00f6-50be-8272571bb448.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c90708ecd0fe6bfaaffaf34a2ac16b62)
- 原因はGitHub Pagesの仕様として
_
から始まるディレクトリが見えないというものでした- 404が出てるファイルは
_next
以下に配置されている
- 404が出てるファイルは
- 回避するためには
.nojekyll
というファイルをデプロイ対象のディレクトリに配置する必要があります - GitHub Actionsの設定ファイルのexportの後に
touch out/.nojekyll
を追加します
.github/workflows/deploy.yml
name: deploy
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Use Node.js 12
uses: actions/setup-node@v1
with:
node-version: 12
- name: install
run: |
yarn install
- name: build
run: |
yarn build
env:
GITHUB_PAGES: true
- name: export
run: |
yarn export
touch out/.nojekyll
- name: deploy
uses: peaceiris/actions-gh-pages@v2.3.1
env:
PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./out
- これでGitHub PagesでNext.jsアプリを公開することができました!
追記
- 記事を書こうとしてより詳しく調べていたら公式のwikiにちゃんと説明が書いてありました