2026 OpenClaw フロント実戦:
Vercel Deployment Hook → スモーク・Headers 巡検・ビルド要約
想定読者:Vercel でフロントを配信し、デプロイ直後に実 URL 上でスモークとセキュリティ Headers を固定化したいチーム向けです。OpenClaw と リモート Mac を組み合わせ、Hook から build_summary までを同一 Runbook で再現します。slug:2026-openclaw-vercel-deployment-hook-smoke-headers-summary.html。併読:Cloudflare Pages Hook、Netlify Deploy Hook、CSP/nonce 検収。
01 OpenClaw と Hook URL
Vercel プロジェクトの Settings → Git → Deploy Hooks で Production 用 URL を発行し、共有秘密つきの Ingress(ゲートウェイ/Worker)だけが叩けるようにします。受信側は速やかに 202 Accepted を返し、OPENCLAW_RUN_ID を発行して ~/runners/vercel-post-deploy.sh へ渡します。
ペイロードまたは CI 注入の環境変数から VERCEL_URL(または確定済みの絶対 URL)、VERCEL_DEPLOYMENT_ID、VERCEL_GIT_COMMIT_SHA を読み取り、ランナー先頭で ホスト名が意図した本番ドメインかを検証します。ローカル検証と SSH 先のリモート Mac で 同一ファイルパスを実行できるよう、リポジトリに scripts/vercel/openclaw-post-deploy.sh を置きます。
- Ingress の HMAC/Bearer を検証し、本文を jq でパース。
DEPLOY_URL=https://${VERCEL_URL}をエクスポート(カスタムドメイン運用なら環境別マッピング表を参照)。- 重い処理はキューへ。再送に備え
deploy_id単位でロック。
02 スモークと Headers チェックのスクリプト I/F
(A)ウォームアップ:curl -fsS で 200 と HTML 内マーカーまで指数バックオフ。(B)Headers 巡検:リポジトリの config/headers_expect.json に期待する strict-transport-security、content-security-policy(または report-only)、x-frame-options 等を列挙し、curl -sSI の実レスと 正規化した diff を取ります。差分は .openclaw/reports/headers_diff.txt に保存し、許容する場合は理由をコメントで残します。
(C)スモーク:playwright test tests/smoke --project=webkit --project=chromium。Apple Silicon リモート Mac では WebKit を優先し、失敗時は trace を .openclaw/traces/ に退避します。ログは .openclaw/reports/deploy_hook.ndjson に 1 行 JSON で phase・http_status・duration_ms を追記します。
03 失敗要約の回伝パターン
すべて成功なら build_summary/v1 スキーマで git_sha・deploy_id・各フェーズ ms・headers_diff_bytes を .openclaw/reports/build_summary.json に書き込みます。いずれか失敗時は failed_phase・先頭のエラー抜粋・exit_code を同ファイルに入れ、チャット/PR コメント API へ POST します。
Idempotency-Key: ${VERCEL_GIT_COMMIT_SHA}:${VERCEL_DEPLOYMENT_ID}:summary を付与し、同一デプロイの再送で重複コメントが積もらないようにします。Bearer や Webhook 秘密は ログに出さず、本文はマスクしたうえで NDJSON に残します。必要なら ビルド数値要約 とフィールドを揃え、ダッシュボード側で比較しやすくします。
04 FAQ
| 症状/コード | 切り分け |
|---|---|
| Hook が 401 | Ingress の秘密ローテーション漏れ、Authorization スキーム誤り。Vercel 側の再発行とボルト更新を揃える。 |
| Headers が急に不一致 | vercel.json の変更、Edge Middleware、ISR の初回レス差。デプロイ ID ごとに curl を保存し差分を縮小する。 |
| WebKit のみ失敗 | トラッキング防止・ITP・サードパーティ Cookie。trace と VERCEL_DEPLOYMENT_ID を添えて再現する。 |
| 要約 POST が 429 | GitHub 二次レート。バックオフとコメント更新 API の利用間隔を空ける。 |
長時間 E2E はフック受信スレッドに直列させずワーカーへ。プレビュー URL と本番で headers_expect を分け、誤った環境への POST を防ぎます。