#wrangler (4)
セットアップ手順の順序が重要
Slack の Event Subscriptions で Request URL を入力すると、即座に URL Verification チャレンジが送信される。Worker がデプロイ済み+Secrets設定済みでないと検証が失敗する。
正しい順序: Slack App 作成(URL は仮)→ Install → デプロイ&Secrets設定 → URL を本番に更新
Worker URL のサブドメインは予測できない
wrangler deploy の出力で初めて https://{worker-name}.{subdomain}.workers.dev が確定する。README にプレースホルダーを書くなら、デプロイ後に更新するフローを明記すること。サブドメインはアカウントごとに異なる。
PEM 秘密鍵は対話入力ではなくパイプで渡す
# NG: 対話入力だと改行が壊れる
wrangler secret put GITHUB_APP_PRIVATE_KEY
# OK: パイプ形式
cat /path/to/private-key.pem | wrangler secret put GITHUB_APP_PRIVATE_KEY
AI Gateway ID の確認方法
Cloudflare ダッシュボード → AI → AI Gateway で表示されるゲートウェイ名がそのまま ID。default という名前なら ID も default。Account ID は npx wrangler whoami で確認できる。
GitHub App Installation ID の確認方法
gh api /orgs/{org}/installations \
--jq '.installations[] | select(.app_slug=="your-app") | .id' 問題
wrangler r2 object put で R2 にファイルをアップロード → 確認したら何も入っていない。
原因
wrangler は デフォルトでローカル R2(miniflare)にアップロードする
実際の Cloudflare R2 に送るには --remote フラグが必須。
解決方法
# NG:ローカル R2 にのみアップロード
wrangler r2 object put my-bucket/document.md --file ./document.md
# OK:実際の Cloudflare R2 にアップロード
wrangler r2 object put my-bucket/document.md --file ./document.md --remote
確認方法
# ローカル R2 の内容確認(デフォルト)
wrangler r2 object list my-bucket
# リモート(実際)の R2 の内容確認
wrangler r2 object list my-bucket --remote
ベストプラクティス
自動同期スクリプト(GitHub Actions等)では 必ず --remote を指定 する。
# GitHub Actions での R2 アップロード例
- name: Upload to R2
run: |
wrangler r2 object put leango-docs/docs.md \
--file ./dist/docs.md \
--remote
デバッグ Tips
アップロード後の検証:
# リモート確認
wrangler r2 object list my-bucket --remote
# ダウンロード確認
wrangler r2 object get my-bucket/document.md --remote
デフォルトで悩むのは一度で終わらせよう。
問題
Cloudflare Pagesプロジェクトに wrangler.json(または .jsonc)が存在すると、ビルド時にダッシュボードで設定した環境変数が読み込まれない。
ビルドログに以下が出る:
Checking for configuration in a Wrangler configuration file (BETA)
Found wrangler.json file. Reading build configuration...
Build environment variables: (none found)
原因
wrangler.json ベースの設定(BETA)が有効になると、ダッシュボードのビルド設定を完全に上書きする。wrangler.json に環境変数の定義がなければ「none found」になる。
ダッシュボードの「変数とシークレット」セクションで設定した値はランタイム用バインディングとして扱われ、ビルドプロセスには渡されない。
対処法
wrangler.jsonを削除/リネームしてダッシュボード設定に戻す(シークレットをgitに入れずに済む)pages_build_output_dir等はダッシュボードの「ビルド出力」で設定可能- ローカルの
astro devやwrangler pages dev(引数指定)には影響なし
問題
astro dev では Cloudflare Pages Functions (/api/* 経由) が動作しない。
解決方法
CF Pages 環境をローカルで再現するには wrangler が必要:
# ビルド
astro build
# CF Pages Functions 付きで起動
wrangler pages dev dist
ポイント
1. シークレット管理
.envファイルは wrangler が読まない.dev.varsファイル を使用する- 形式は
.envと同じ(KEY=value)
# .dev.vars の例
TURNSTILE_SECRET_KEY=1x0000000000000000000AA
SLACK_WEBHOOK_URL=https://hooks.slack.com/...
2. 既知の警告(無視してOK)
WebSocket関連のエラー:
TypeError: Web Socket request did not return status 101
→ miniflare の既知問題。ローカル開発に影響なし。
3. 使い分け
| 目的 | コマンド |
|---|---|
| 単純な Astro サイト | astro dev |
| API ルートも含む | wrangler pages dev dist |
ベストプラクティス
開発時は wrangler pages dev dist 一択で、CF Pages 本番環境と同じ条件でテストする。