いつの時代も人のマシンと金でビルドするのは最高なわけですが App router の Next.js プロジェクトを GitHub Actions でビルドし SSG として Cloudflare Pages にデプロイしようと思います
技術ブログとしては、初回投稿です。初めましての方は、はじめまして
技術関連の内容を中心に扱っていこうかなと思いますが、試行錯誤とかも含めて書くつもりなので簡潔じゃないかもです
気負わず、結構適当に書いていこうかなあと考えているので、よろしくお願いします
(簡潔さが欲しくなったら別途記事にしようと思います)
これまでに掲載していた内容について
これまで、このページでは cloudflare/pages-action を使った方法を紹介していましたが1年前から更新がなく、2024年10月にリポジトリがアーカイブ指定になったため wrangler-action を使った方法に変更しました
もしこの記事を参考に環境を構築した方は、以下の記事より移行することをお勧めします
最近、ホームページを Nuxt2 から Next.js に移行したんですけど、これまでデプロイを自前PCでやっていました。面倒...
というわけで GitHub Actions でデプロイ自動化に取り組んでみたという内容です 🐈 🐈
ちなみに
Cloudflare では GitHub Actions を利用せずとも、リポジトリへの Push を検知して自動でビルドしてくれる App を提供していたりします 👉 Git integration guide・Cloudflare Pages docs
GitHub Actions でエラーチェックを挟みたいとかの理由がなければ、そちらを利用しても良いと思います
...と、前置きが長くなりました
さっそく App router の Next.js プロジェクトを GitHub Actions でビルドし SSG として Cloudflare Pages にデプロイしようと思います
Cloudflare Pages 用のビルドは以下のようなコマンドでビルドできます
npm を利用していない場合、適宜 yarn dlx や pnpm dlx 等に書き換えてください
npx @cloudflare/next-on-pages@1GitHub Actions 用の cloudflare/wrangler-action という便利なパッケージを利用します
この際、事前に Cloudflare のアカウントとプロジェクトを作成しておきましょう
Cloudflare 側の アカウント ID と API トークン が必要なので、控えておきます
| 必要なもの | 概要 |
|---|---|
| アカウント ID | Cloudflare のアカウント ID アカウント ID は https://dash.cloudflare.com/ にアクセスした際の URL 末尾 |
| API トークン | Cloudflare で発行した Custom API トークン 詳細は公式ドキュメントより |
これらの情報が集まると、以下のように GitHub Actions に組み込むことができます
先ほどの内容を GitHub の secrets に CLOUDFLARE_ACCOUNT_ID と CLOUDFLARE_API_TOKEN として登録しています
name: Deployon:push:branches:- mainjobs:deploy:name: Deployruns-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v4- name: Setup Node.jsuses: actions/setup-node@v4with:node-version: '22'- name: Buildrun: npx @cloudflare/next-on-pages@1- name: Deployid: cloudflare_pages_deployuses: cloudflare/wrangler-action@v3with:apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}command: pages deploy .vercel/output/static --project-name project
ビルド時の出力先が .vercel/output/static でない場合は適宜変更しましょう
また、--project-name には Cloudflare Pages で作成したプロジェクト名を指定してください
一例ですけど、適宜参考にしてみてください。これでデプロイまで可能です 🎉
おわりに
デプロイまで自動でできるのは、とても便利なんですけど、ブログを書きたいだけならその手のブログサービスを利用した方が何百倍も楽です 🐶