🚚
GitHub ActionsでCloudflare WorkersへデプロイするときのプレビューURL生成【Pages→Workers移行】
TL;DR
preview
がoffになっていないWranglerプロジェクトなら、wrangler versions upload
でバージョンを発行し、そのURLをPRにコメントするGitHub Actionsを書けばOK。
はじめに
Cloudflareでは最近、フロントエンドもCloudflare Workers(以下、Workers)を使うべきである、という風潮があります。同社のフロントエンドデプロイ用サービスであるCloudflare Pages(以下、Pages)の管理画面でも「新しいプロジェクトにはWorkersを推奨します」と表示されるほどです。
実際、Workersに移行したことで、Edge Runtimeでやれ!案件が著しく減ったため、設定コストはともかく学習コストは大幅に下がったと認識しています。
そして、これを機にGitHub Actionsでのビルドに移行しました。APIクライアントなどの自動生成コードを、権限周りをあまり苦労せずに取得・生成できるためです。ただ、ビルドもユーザー側(GitHub)で持つようにした結果、プルリクが立った際に自動でプレビューURLを貼ってくれる機能などは当然使えないため、それをActionsでいい感じに再現することを試みます。
手順概要
-
wrangler versions
でプレビュー用バージョンを作成 -
wrangler.json
のpreview
設定を確認 - Zero Trust Accessでプレビュー URL を非公開化
- GitHub Actionsでビルド&デプロイし、URLをPRにコメント
wrangler versions
を使う
1. Preview URL発行には wrangler versions
を使用します。
2. Wrangler / Cloudflareの設定
wrangler.json
の preview
がoffになっていないか確認
2-1. {
"$schema": "node_modules/wrangler/config-schema.json",
"name": "hogehoge-frontend",
"main": ".open-next/worker.js",
"compatibility_date": "2025-03-01",
"compatibility_flags": ["nodejs_compat", "global_fetch_strictly_public"],
"assets": {
"binding": "ASSETS",
"directory": ".open-next/assets"
},
"observability": { "enabled": true }
}
初期状態だと何も書かれていないのであまり気にしなくてもいいのですが、 preview
キーをoffにするとURLが出力されないので注意しましょう。
2-2. プレビューURLを外部公開しないようにする
- WorkersのURL(例:
appname.username.workers.dev
)を確認 -
*-appname-preview.username.workers.dev
を対象にAccessポリシーを作成 - Allowルールに自分のメールアドレス/ドメイン/GitHub組織などを設定
3. GitHub Actionsの設定例
name: Deploy Preview
on: pull_request
permissions:
pull-requests: write # コメント投稿
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- run: pnpm install
- run: ENV=development pnpm run build-opennextjs
- name: Deploy Preview to Cloudflare
id: deploy-preview
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} # CFのAPIトークン
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} # CFのアカウントID
workingDirectory: ".open-next"
command: >
versions upload
--message "Deployed by GitHub Actions: branch ${{ github.ref_name }}"
--tag pr-${{ github.ref_name }}
- name: Comment Preview URL
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `🚀 プレビュー環境にデプロイされました!
Preview URL: ${{ steps.deploy-preview.outputs.deployment-url }}
`
})
まとめ
これでPRを開くだけでステージング環境を確認でき、レビューが格段に楽になります。使ってみてください。
Discussion