microCMS × Next.jsで静的ビルドしたソースコードをレンタルサーバーにデプロイする方法

2025年問題を乗り越えたい思いと、自分たちの夢を叶えたい気持ちでこの記事を書きました。この記事はNext.jsでポートフォリオを作成した際の備忘録として、レンタルサーバーへのデプロイの手順をまとめたものです。

どんな記事なのか?

Github Actionsを使用してレンタルサーバーにファイルをアップする手順

誰が読むものなのか?

Next.jsとmicroCMSでページを作成されている方

どんな時に読むのか?

Github Actionsでシークレットキーを取り扱いたいとき

目次

レンタルサーバーへのデプロイの手順

STEP
Gitリポジトリを作成

Gitとはバージョン管理システムのことで、コードベースで変更履歴を管理するためのデータベースを作成することをいいます。ファイルの変更履歴を追跡し、異なるバージョン間で変更を比較したり統合することができます。

STEP
Next.jsの静的ファイルの作成~GitHubにプッシュ

next.config.jsに以下の内容をコピーしてペーストします。

const isProd = process.env.NODE_ENV == "production"
output: isProd ? 'export' : ""

buildを実行するとoutフォルダが作成され、その中に静的ファイルが出力されます。Next.jsでは静的ファイルの出力先がoutフォルダになっています。outフォルダは.gitignoreファイルで除外されているため、リポジトリに含まれずデプロイされません。

outフォルダをデプロイするために以下の内容で.git-ftp-includeファイルをプロジェクトルートに作成します。

!out/
STEP
Github Actionsワークフロー作成

FTPを使用してレンタルサーバーにデプロイするための設定をします。FTP接続時に必要な以下の情報を控え、リポジトリに暗号化された秘密情報を作成する。

FTP情報シークレット名
FTPサーバー名FTP_SERVER: FTPサーバーのアドレス。lolipopの場合、通常は ftp.lolipop.jp です
ユーザー名FTP_USERNAME: FTPのユーザ名
パスワードFTP_PASSWORD: FTPのパスワード
FTP接続ディレクトリFTP_SERVER_DIR

microCMS接続時に必要な以下の情報を控え、リポジトリに暗号化された秘密情報を作成する

microCMS情報シークレット名
サービスIDNEXT_PUBLIC_SERVICE_DOMAIN
APIキーNEXT_PUBLIC_API_KEY

Github Actionsで変数を扱いたい場合プロジェクトのSettings → Secrets and variables → Actionsを選択New repository secretをクリックして、変数のペアを入力する

https://docs.github.com/ja/actions/security-guides/using-secrets-in-github-actions#creating-encrypted-secrets-for-a-repository

STEP
.ymlファイルを作成
  • 「Actions」>「set up a workflow yourself」をクリック
  • 任意のファイル名を設定(本記事ではftp-deploy.ymlとする)
  • 以下の内容をコピーして「Edit new file」にペースト
name: FTP Deploy

on:
  push:
    branches: [ main ]
  repository_dispatch:
    types: [update-posts]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16.x]
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: npm

      - run: |
          npm ci
          npm run build --if-present
        env:
          NEXT_PUBLIC_SERVICE_DOMAIN: ${{ secrets.NEXT_PUBLIC_SERVICE_DOMAIN }}
          NEXT_PUBLIC_API_KEY: ${{ secrets.NEXT_PUBLIC_API_KEY }}

      - name: FTP
        uses: SamKirkland/FTP-Deploy-Action@4.3.3
        with:
          server: ${{ secrets.FTP_SERVER }}
          username: ${{ secrets.FTP_USERNAME }}
          password: ${{ secrets.FTP_PASSWORD }}
          server-dir: ${{ secrets.FTP_SERVER_DIR }}
          local-dir: ./out/
          dangerous-clean-slate: false
GitHub Actionsのymlファイルを解説
  • on: ワークフローのトリガーイベントを定義します。この場合、pushイベントがトリガーとなります。
  • branches: ブランチのリストを指定します。この場合、masterブランチへのプッシュがトリガーとなります。
  • name: Build : ジョブの名前を指定します。この場合、ジョブの名前は Buildです。
  • runs-on: ubuntu-latest : ワークフローが実行されるランナーを指定します。この場合、最新版のUbuntu環境(Github上に構築されます)が選ばれます。
  • steps : ジョブが実行するステップのリストを定義します。この場合、コードのチェックアウトとFTPデプロイの2つのステップがあります。
  • run : 実行するコマンドを記述します。
  • env : ワークフロー内に環境変数を指定します。process.env.NEXT_PUBLIC_SERVICE_DOMAIN, process.env.NEXT_PUBLIC_API_KEYで変数の値にアクセスできるようになります。
  • uses: actions/checkout@v3 : コードをチェックアウトするためのアクションを指定します。ここでは、バージョン3のactions/checkoutアクションを使用しています。
  • uses: SamKirkland/FTP-Deploy-Action@4.3.0 : FTPデプロイを行うアクションを指定します。ここでは、バージョン4.3.0のSamKirkland/FTP-Deploy-Actionを使用しています。
  • with : アクションの入力を定義します。この場合、FTPサーバーの情報と認証情報を指定します。
  • server: ${{ secrets.FTP_SERVER }} : FTPサーバーのホスト名を指定します。GitHubの秘密情報から取得します。
  • username: ${{ secrets.FTP_USERNAME }} : FTPサーバーのユーザー名を指定します。GitHubの秘密情報から取得します。
  • password: ${{ secrets.FTP_PASSWORD }} : FTPサーバーのパスワードを指定します。GitHubの秘密情報から取得します。
  • local-dir : 設定しなければroot以下が全て対象です。

.envがGithub Actionsでは使えないので、ワークフロー内に環境変数を準備します。一部の変数は秘密情報にして、サイトにアクセスする人に公開しないようにする必要があるため、ブラウザで変数を公開するには、その名前の前にNEXT_PUBLIC_を付ける必要があります。

GitHubの「Actions」ページでエラーが表示されていなければデプロイ完了です。エラーが出た場合は、Actionsにエラーの内容が返ってくるので確認してエラーを修正します。

いかがでしたでしょうか。この設定ができるとGitに変更をプッシュするのと同時にページが更新されるためFTPが不要になり、更新の漏れが少なくなるだけではなく運用でもとても便利になりますよ。

当チームではホームページ制作やLPページ制作のご依頼をお受けしております。構築だけお願いしたいなどももちろんお受けできます。気になったら是非ともお問い合わせだけでもどうぞ!

この記事をシェアする
  • URLをコピーしました!

この記事を書いた人

Webコーダーです。
自分は飽き性だから、学び続けることができるWeb制作は刺激も多く好きです。
JavaScriptは何度も嫌になったけど、この道を選択して良かったと思っています。
この記事が、悩みの解決の糸口や新しい出会いになりましたら幸いです。

目次