日常の開発フロー — 超過しないために

Push は 1 日 1 回

コミットは何回でもOK。Push の回数 = Vercel デプロイの回数。区切りがついた1日の終わりに1回だけ Push する。

開発中は localhost で確認

npm run dev でローカルサーバ起動。ポートはプロジェクトごとに固定済み(/projects?view=urls の Local 列参照)。

一斉 Push を避ける

共有デザインシステム更新等で複数プロジェクトに同時 Push すると、プロジェクト数 × ビルド時間が発生する。分散させるか、本当に必要なプロジェクトだけに Push する。

月間ビルド予算: 75 回以内

Pro $20 Included Credit ÷ $4/h ≒ 300 分。1 ビルド 4 分 × 75 回 = 300 分。ippuku + mirror を毎日 Push しても月 60 回、残り 3 プロジェクトは週 1-2 回で収まる。

構造的ガード(設定済み)

Spend Management Hard Limit

On-Demand Budget $10 + Pause Production Deployments ON

Budget $10 + Pause ON = $10 を超えない限りサイトは動く。超えた瞬間に全プロジェクト停止で課金を構造的にブロック。 復旧: Budget を引き上げて Pause OFF → Promote to Production。 注意: Pause は「チーム全体」に適用(全5プロジェクトが同時停止)。

ignoreCommand(全 5 プロジェクト)

Dependabot ブランチのプレビュービルドをスキップ

vercel.json の ignoreCommand で dependabot/* ブランチからのビルドを exit 0 でスキップ。失敗ビルドによるビルド時間の浪費を防止。

Dependabot minor/patch 制限

メジャーバージョン更新を自動作成しない

.github/dependabot.yml で major を ignore。メジャー更新 PR が作成されない = ビルド失敗ループが発生しない。

プロジェクト数の最小化

21 → 5 プロジェクトに削減済み(seediv チーム)

ippuku, mirror, seehub, life, pair のみ。不要なプロジェクトを Vercel から削除し、一斉 Push のビルド数を最小化。

NGC: Vercel 全プロジェクト削除

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 層

防止(Prevent)
  • 常駐ワーカー・常駐プロセスを Vercel で動かさない(SIA Layer 2)
  • 関数は短く・メモリ制限(vercel.json の maxDuration / memory)
  • ビルドは main のみ。ignoreCommand で不要ブランチをスキップ
  • Dependabot は minor/patch のみ。メジャー更新は手動
  • Vercel プロジェクト数を必要最小限に維持
  • ローカル開発で完結するプロジェクトは Vercel を使わない(NGC: 全削除済み)
検知(Detect)
  • Usage の定期確認(Build Minutes が最大コスト要因)
  • Spend Management の通知を有効化
  • プロジェクト別の内訳を把握し、急増時に原因を特定
上限(Limit)
  • Spend Management: On-Demand Budget $10 + Pause Production Deployments ON
  • 予算内ならサイトは動く。超過で全プロジェクト停止 → それ以上の課金を構造的に排除
  • 復旧手順: Budget 引き上げ → Pause OFF → Save → Promote to Production

超過インシデント記録

過去の失敗から学び、同じ過ちを繰り返さないための記録。

関連ドキュメント

Vercel 課金制御の体系(全文)を読む