Next.jsを使う時、これまで、ほとんどの場合Vercelに、ごくたまにNetlifyにデプロイしてきました。
なぜなら楽なので。
今回は、Github Actionsを使ってGitHub Pagesにデプロイしてみようと思います。
今回作成したウェブサイトはこちら。

https://kimizuka.github.io/nextjs/
でかでかと、「Ya-Ha-!」とだけ表示されているサイトです。
ソースコードはこんな感じ。
src/app/page.tsx
import styles from './index.module.css'; if (!process.env.SECRET_KEY) { throw new Error('SECRET_KEY is not defined in environment variables.'); } export default function IndexPage() { return ( <div className={styles.container}>{process.env.NEXT_PUBLIC_MESSAGE}</div> ); }
そう。「Ya-Ha-!」という文字列は.envから読み取っています。
さらに、.envにSECRET_KEYが設定されていないとビルドがこけるようになってます。
VercelやNetlifyでenvの管理は楽々ですが、Githubではどうなるのか調査するためにこういった作りにしてみました。
では、早速、GitHub ActionsでGitHub Pagesにデプロイしていきましょう。
❶ next.config.tsを修正
import type { NextConfig } from 'next'; const repositoryName: string = 'nextjs'; const isProduction: boolean = process.env.NODE_ENV === 'production'; const nextConfig: NextConfig = { devIndicators: false, output: 'export', // 静的書き出し ...(isProduction // 本番環境ではbasePath、assetPrefixを変更 ? { basePath: `/${repositoryName}`, assetPrefix: `/${repositoryName}/`, } : {}), }; export default nextConfig;
重要な点は、
- outputをexportにして静的書き出しにする
- 独自ドメインを当てない場合、Github PagesのURLは ユーザー名.github.io/リポジトリ名/ になるので対応する
2点です。(重要ではないですが、devIndicatorsも非表示にしています)
❷ .github/workflows/next-build-and-deploy.yml を作成
name: Next.js Build And Deploy on: push: branches: - main jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: "22.x" - name: Install dependencies run: yarn install --frozen-lockfile - name: Build Next.js app run: yarn build env: NEXT_PUBLIC_MESSAGE: ${{ vars.NEXT_PUBLIC_MESSAGE }} # varsから取得 SECRET_KEY: ${{ secrets.SECRET_KEY }} # secretsから取得 - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./out
とりあえず、バーっと書いてみました。
mainブランチにpushがあった際に、
- envを設定する
- buildする
- outディレクトリをgh-pagesブランチにデプロイする
という動作を実現しています。
これで、ソース側はOKで、次にGitHub側の設定を変更していきます。
❸ Githubにsecretsとvariablesを登録する
Settings > Secrets and variables > Actions に移動し、
Repository secretsとRepository variablesにそれぞれ、
SECRET_KEY 👉 SECRET_KEY
NEXT_PUBLIC_MESSAGE 👉 Ya-Ha-!
を登録すればOKです。
❹ GitHub Pagesを設定する
Setting > Pages > Build and deployment に移動し、
Source 👉 Deploy from a branch
branch 👉 gh-pages / (root)
を選択すればOKです。
これで、ソースをmainブランチにpushすると、buildした結果がGithub Pagesにデプロイされます!