Vercel 課金制御
勝手な課金を構造的に排除する — Operations
日常の開発フロー — 超過しないために
コミットは何回でもOK。Push の回数 = Vercel デプロイの回数。区切りがついた1日の終わりに1回だけ Push する。
npm run dev でローカルサーバ起動。ポートはプロジェクトごとに固定済み(/projects?view=urls の Local 列参照)。
共有デザインシステム更新等で複数プロジェクトに同時 Push すると、プロジェクト数 × ビルド時間が発生する。分散させるか、本当に必要なプロジェクトだけに Push する。
Pro $20 Included Credit ÷ $4/h ≒ 300 分。1 ビルド 4 分 × 75 回 = 300 分。ippuku + mirror を毎日 Push しても月 60 回、残り 3 プロジェクトは週 1-2 回で収まる。
構造的ガード(設定済み)
On-Demand Budget $10 + Pause Production Deployments ON
Budget $10 + Pause ON = $10 を超えない限りサイトは動く。超えた瞬間に全プロジェクト停止で課金を構造的にブロック。 復旧: Budget を引き上げて Pause OFF → Promote to Production。 注意: Pause は「チーム全体」に適用(全5プロジェクトが同時停止)。
Dependabot ブランチのプレビュービルドをスキップ
vercel.json の ignoreCommand で dependabot/* ブランチからのビルドを exit 0 でスキップ。失敗ビルドによるビルド時間の浪費を防止。
メジャーバージョン更新を自動作成しない
.github/dependabot.yml で major を ignore。メジャー更新 PR が作成されない = ビルド失敗ループが発生しない。
21 → 5 プロジェクトに削減済み(seediv チーム)
ippuku, mirror, seehub, life, pair のみ。不要なプロジェクトを Vercel から削除し、一斉 Push のビルド数を最小化。
2026-02-17 全4プロジェクト + stale 1件を削除(0件運用)
ngc-external, ngc-internal, ngc-admin, ngc-gateway, i2 の全5プロジェクトを削除。 Hobby プラン(無料)+ 決済手段未登録で構造的に課金ゼロだったが、 ローカル開発で全機能が動作するため Vercel 自体を不使用に。 localhost:3005(external), :3002(internal), :3004/admin(admin), :3010(gateway) で開発。
制御の 3 層
- 常駐ワーカー・常駐プロセスを Vercel で動かさない(SIA Layer 2)
- 関数は短く・メモリ制限(vercel.json の maxDuration / memory)
- ビルドは main のみ。ignoreCommand で不要ブランチをスキップ
- Dependabot は minor/patch のみ。メジャー更新は手動
- Vercel プロジェクト数を必要最小限に維持
- ローカル開発で完結するプロジェクトは Vercel を使わない(NGC: 全削除済み)
- Usage の定期確認(Build Minutes が最大コスト要因)
- Spend Management の通知を有効化
- プロジェクト別の内訳を把握し、急増時に原因を特定
- Spend Management: On-Demand Budget $10 + Pause Production Deployments ON
- 予算内ならサイトは動く。超過で全プロジェクト停止 → それ以上の課金を構造的に排除
- 復旧手順: Budget 引き上げ → Pause OFF → Save → Promote to Production
超過インシデント記録
過去の失敗から学び、同じ過ちを繰り返さないための記録。
関連ドキュメント
- Vercel 課金制御の体系 — 最大公約数(課金要因一覧・チェックリスト)
- Vercel でワーカーを動かさない — SIA(Layer 2)(CI 検証・禁止パターン)
- Vercel チーム Paused の解消手順(解消・再発防止)