メインコンテンツへスキップ
kt-tech.blog

【設定・環境構築】GitHub Actions で Cloudflare Workers への CI/CD パイプラインを構築する

設定・環境構築5分で読めます

この記事でわかること

  • develop への push で自動デプロイするワークフローの完全な定義例
  • workflow_dispatch の手動ボタンが UI に出てこない理由(main にファイルが必要)
  • concurrency でデプロイの競合を防ぐ設定
  • gh secret set でトークンを履歴に残さない渡し方

GitHub リポジトリと Cloudflare アカウント(API Token 作成権限)。wrangler での手動デプロイがすでに成功している状態から始めます。

メモ
GitHub Actions で Cloudflare Workers への自動デプロイと手動デプロイを構築する方法を解説します。workflow_dispatch の制約や concurrency 設定など、実際にハマったポイントも共有します。

はじめに

Cloudflare Workers へのデプロイを手動で行うのは手間がかかります。GitHub Actions で以下を実現します。

  • develop ブランチへの push で dev 環境に自動デプロイ
  • Actions UI から任意のブランチを選んで手動デプロイ

1. ワークフロー定義

YAML
name: Deploy to Cloudflare Workers

on:
  push:
    branches:
      - develop
  workflow_dispatch: # 手動トリガー

jobs:
  deploy:
    name: Build & Deploy (dev)
    runs-on: ubuntu-latest
    timeout-minutes: 15
    concurrency:
      group: deploy-dev
      cancel-in-progress: true
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup bun
        uses: oven-sh/setup-bun@v2

      - name: Install dependencies
        run: bun install --frozen-lockfile

      - name: Generate Prisma Client
        run: bunx prisma generate

      - name: Build (OpenNext for Cloudflare)
        run: npx opennextjs-cloudflare build

      - name: Deploy to Cloudflare Workers
        run: npx wrangler deploy
        env:
          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}

2. GitHub Secrets の設定

GitHub CLI で設定できます。

Bash
# 値をタイプする(入力後に Ctrl-D)
gh secret set CLOUDFLARE_API_TOKEN
gh secret set CLOUDFLARE_ACCOUNT_ID
注意
--body "トークン" で渡すと、シェルの履歴(.zsh_history など)にトークンがそのまま残ります。上のように引数なしで実行して標準入力から渡すか、gh secret set NAME < token.txt のようにファイル経由にしてください。
Tips
Cloudflare API Token は Workers 用の権限 が必要です。Account Settings → API Tokens から「Edit Cloudflare Workers」テンプレートで作成しましょう。

3. concurrency 設定

concurrency ブロックが重要です。

YAML
concurrency:
  group: deploy-dev
  cancel-in-progress: true
  • group: deploy-dev → 同じグループのジョブは同時実行されない
  • cancel-in-progress: true → 新しい push があれば実行中のデプロイをキャンセル

4. workflow_dispatch の重要な制約

注意
workflow_dispatch トリガーは デフォルトブランチ(通常 main)にワークフローファイルが存在しないと、Actions UI に手動実行ボタンが表示されません。

つまり、develop ブランチにのみワークフローがある状態では、UI から手動実行できません。まず main にワークフローファイルをマージする必要があります。

マージ後は UI から任意のブランチを選択してデプロイできるようになります。

5. ビルドステップのポイント

  • bun install --frozen-lockfile → CI 環境での再現性を確保
  • bunx prisma generate → ビルド前に必須(Prisma Client の生成)
  • timeout-minutes: 15 → ハングアップ防止

まとめ

  • develop push で自動デプロイ、workflow_dispatch で手動デプロイ
  • concurrency でデプロイ競合を防止
  • workflow_dispatch は main にワークフローがないと UI に表示されない
  • Secrets は gh secret set で設定できる。ただし値を引数で渡さない(履歴に残る)

参考リンク

更新履歴

  1. gh secret set --body でトークンを渡すとシェル履歴に残るため、標準入力経由の形に修正して注意を追記。コードブロックにファイルパスのキャプションを追加し、callout の色指定を他記事と揃えた。参考リンクの節を新設。「この記事でわかること」「対象読者」「前提条件」を概要プロパティへ移動。