初めまして&microCMS+Next.js+GitHubActions+Conoha WINGでブログを作ったお話

この記事はKMC Advent Calendar 15日目の記事です。(2日遅れです。すみません……)
14日目の記事はnonyleneさんのRenovate で Flux 配下の Helm Chart をアップデートするでした。

初めまして

KMC45期のortです。スマホゲームと競馬を生きがいにしています。

元々使っていたオルタというハンドルネームを、本名をもじった形にしたのがortなので、正しい読み方はおそらく「おるた」なのですが、大体「おると」と呼ばれています。
最近は自分でも「おると」と名乗ることの方が多いです。

さて、さっそくですが、このサイトの記事一覧をご覧ください。

あれ……
こいつ、この記事以前には何も書いていない……?
と思った、そこの貴方!!

はい、正解です。
これが初めて書いた記事です。
というか、この記事を書くためにこのサイトを作りました。

12月7日
勢いでアドベントカレンダーに登録しちゃったものの、ブログサービスのアカウントを持っておらず、掲載する媒体がない状態。
しかも書く内容のアイデアもない。せや!
今から個人サイト作って、その記録を記事にしてしまおう!!

……と、まぁそれっぽいアイデアが浮かんでしまったので、今回は表題にある通り、microCMS+Next.js+GitHubActions+Conoha WINGでブログを作ったお話をします。
こういった記事を書くのは初めてですので「何か文章おかしくね?」と思っても、どうかお手柔らかに……
ちなみにデザインには一切手を付けていないので、できあがったものは質の悪いメモ帳です。
これを改修するネタだけで、あと数年はアドベントカレンダーが書けるな!

やったこと

  1. microCMSとNext.jsでブログを作成
  2. GitHub Actionsでレンタルサーバー(Conoha WING)に自動デプロイできるようにした


1. microCMSとNext.jsでブログを作る

実際の手順はmicroCMSさんのチュートリアルに則って行いました。
https://blog.microcms.io/microcms-next-jamstack-blog/
わかりやす……
上のチュートリアルがとても丁寧なので、特に苦しむことなくできました。
強いて詰まったところを挙げるならば、チュートリアル内の手順5で、以下のような記述がありましたが、Next.js13以降ではLinkタグ内にaタグを入れることはできないらしく、<a></a>を消して対応しました。

            <Link href={`/blog/${blog.id}`}>
              <a>{blog.title}</a>
            </Link> 


ここまではよかったんですよ。ここまでは(作業時間:約2時間)
問題は次でした。

2.GitHub Actionsでレンタルサーバー(Conoha WING)に自動デプロイする仕組み

できあがったworkflowがこちらになります。

name: Deploy FTP CI


on:
  push:
    branches: [ main ]
  repository_dispatch:
    branches: [ main ]
  workflow_dispatch:
    branches: [ main ]


jobs:
  build:


    runs-on: ubuntu-latest
    env:
      API_KEY: ${{ secrets.API_KEY}}


    strategy:
      matrix:
        node-version: [16.x]


    steps:
      - name: Checkout repository
        uses: actions/checkout@v2


      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm'


      - name: Install NPM package
        run: npm ci
      
      - name: Install sass
        run: npm i sass


      - name: Build Next.js App
        run: npm run build --if-present


      - name: Export Next.js App
        run: npm run export


      - name: Deploy FTP
        uses: SamKirkland/FTP-Deploy-Action@4.3.1
        with:
          server: ${{ secrets.FTP_SERVER }}
          username: ${{ secrets.FTP_USERNAME }}
          password: ${{ secrets.FTP_PASSWORD }}
          protocol: ${{ secrets.FTP_PROTOCOL }}
          port: ${{ secrets.FTP_PORT}}
          server-dir: ${{ secrets.FTP_REMOTE_ROOT }}
          local-dir: ./out/
          dangerous-clean-slate: true

あー。そーゆーことね。完全に理解した(例の画像)

嘘です。
GitHub Actionsは初めて触ったので、全部が手探りでした。めっちゃ改行してるのも、そうしないと全然読めなかったからです。

トリガーイベントには、push, repository_dispatch, workflow_dispatchを設定しています。
microCMSはwebhookを外部サービスに通知してくれるのですが、GitHub Actionsではrepository_dispatchに対応しているので、これを設定しています。
他2つはそれぞれpushに反応する、GitHubから手動で走らせられるトリガーイベントです。

環境変数の管理

    runs-on: ubuntu-latest
    env:
      API_KEY: ${{ secrets.API_KEY}}

ローカルで開発していた時はmicroCMSのAPIキーは.envファイルで管理していました。
.gitignoreによってgitの管理下から外れていますから、そのままではビルドできません。気づくのに1時間かかりました……(小声)

なのでSecretsにAPI_KEYの名前で登録して使えるようにしています。(これで管理はあっているのか……?)
その他の必要な環境変数(FTP関連)も同様にしています。

これで記事の更新等のトリガーに反応して、github上のNext.jsアプリケーションをビルド。それをサーバーの対象ディレクトリにFTPでアップロード。という仕組みが完成しました。
これ書くのだけで1日使いました。見通しが甘すぎる。

終わりに

ブログを作るのは初めての経験だったので、苦労はしましたが、かなり達成感がありました。って言いたいんですけど、さすがにこのメモ帳状態だと……
デザインって大事ですね。ここからぼちぼち改修していきます。
来年はもっといいサイトになってるといいね!

駄文でしたが、ここまで読んでくださりありがとうございました!アドベントカレンダーの他の記事もぜひ読んでみてください!