LoginSignup
0
0

2024年2月 GitHub Actions を使用したNextjs プロジェクトのGitHub Pages公開

Last updated at Posted at 2024-02-09

結論

2024/02/10時点ではNextjsのv14以上ではActionsを使用したPagesへのデプロイが失敗するのでv13を使用した
画像ファイルを使用する場合は別途ファイルパスの設定が必要になる。
今回はファイルパスの設定入れてない。

背景

NextjsをPagesにデプロイしようとした所、v14で作成したプロジェクトではデプロイに失敗した。
以下のようなエラーでGitHub Actionsを使用したPagesへのデプロイが失敗した

Run actions/upload-pages-artifact@v3
Run echo ::group::Archive artifact
Archive artifact
  tar: out: Cannot open: No such file or directory
  tar: Error is not recoverable: exiting now
  Error: Process completed with exit code 2.

スクリーンショット 2024-02-10 0.37.56.png

手順

step1_プロジェクトの作成

Nextjsのv13の最新バージョンでプロジェクトを作成する

npx create-next-app@13.5.6 nextjs-test-13-5-6 && 
cd nextjs-test-13-5-6 && 
npm i next@13.5.6

step2_プロジェクト修正

next.config.jsにエクスポートの設定を追加

next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
+  output: 'export',
}

module.exports = nextConfig

修正ができたらリモートリポジトリに公開設定でpush
初回作成時であれば、gitで修正をコミットし、vscodeから2クリックで完了する

git add .
git commit -m "feat: export"

スクリーンショット 2024-02-10 0.17.36.png

Github Actionの設定

特に修正などは必要なく、そのままコミットで問題なさそう

スクリーンショット 2024-02-10 0.32.52.png
スクリーンショット 2024-02-10 0.34.23.png

自走生成された2024/02/10時点のymlファイルの中身は以下

nextjs.yml
# Sample workflow for building and deploying a Next.js site to GitHub Pages
#
# To get started with Next.js see: https://nextjs.org/docs/getting-started
#
name: Deploy Next.js site to Pages

on:
  # Runs on pushes targeting the default branch
  push:
    branches: ["main"]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  # Build job
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Detect package manager
        id: detect-package-manager
        run: |
          if [ -f "${{ github.workspace }}/yarn.lock" ]; then
            echo "manager=yarn" >> $GITHUB_OUTPUT
            echo "command=install" >> $GITHUB_OUTPUT
            echo "runner=yarn" >> $GITHUB_OUTPUT
            exit 0
          elif [ -f "${{ github.workspace }}/package.json" ]; then
            echo "manager=npm" >> $GITHUB_OUTPUT
            echo "command=ci" >> $GITHUB_OUTPUT
            echo "runner=npx --no-install" >> $GITHUB_OUTPUT
            exit 0
          else
            echo "Unable to determine package manager"
            exit 1
          fi
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: "20"
          cache: ${{ steps.detect-package-manager.outputs.manager }}
      - name: Setup Pages
        uses: actions/configure-pages@v4
        with:
          # Automatically inject basePath in your Next.js configuration file and disable
          # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized).
          #
          # You may remove this line if you want to manage the configuration yourself.
          static_site_generator: next
      - name: Restore cache
        uses: actions/cache@v4
        with:
          path: |
            .next/cache
          # Generate a new cache whenever packages or source files change.
          key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
          # If source files changed but packages didn't, rebuild from a prior cache.
          restore-keys: |
            ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-
      - name: Install dependencies
        run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
      - name: Build with Next.js
        run: ${{ steps.detect-package-manager.outputs.runner }} next build
      - name: Static HTML export with Next.js
        run: ${{ steps.detect-package-manager.outputs.runner }} next export
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./out

  # Deployment job
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

参考

Nextjsのバージョンは以下から確認できる
https://www.npmjs.com/package/next?activeTab=versions

バージョン固定方法は以下から拝借
https://github.com/vercel/next.js/discussions/35794

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0