vercel-billing-control-framework.md
# Vercel 課金制御の体系 — 最大公約数 > 作成: 2026-01-29 > 目的: 「気づいたら課金される」事態を防ぐため、Vercel の課金要因と制御を**最大公約数的に体系化**し、どのチーム・プロジェクトでも使える共通の枠組みを提供する。 --- ## 1. 前提 - **Vercel は従量課金**が多く、無料枠を超えると**チーム単位**で Paused になったり、Pro では超過分が請求される。 - **制御の目標**: 「勝手に課金しない」= **防止(発生させない)・検知(気づく)・上限(止める)** の 3 層で制御する。 - 本ドキュメントは **mirror / one-portal / seehub 等、Vercel を使う全プロジェクト** に共通する**最大公約数**として参照する。 --- ## 2. 課金要因の一覧(何が課金されるか) | カテゴリ | 主な項目 | 無料枠の目安(Hobby) | 想定外になりやすい理由 | | ----------------------------- | ------------------------- | -------------------------- | ------------------------------------------ | | **Compute(常駐・長時間)** | Fluid Provisioned Memory | 360 GB-Hrs/月 | 常駐ワーカー・ポーリングで**待機中も消費** | | | Fluid Active CPU | 4h/月 | 同上 | | **Compute(リクエスト単位)** | Function Invocations | 100万/月 | 高頻度 cron・webhook・ボット | | | Function Duration | 100 GB-Hrs/月 | 長時間処理・重い API | | **Traffic** | Edge Requests | 100万/月 | トラフィック急増・ボット | | | Fast Data Transfer | 100 GB/月 | 大容量レスポンス・アセット | | | Fast Origin Transfer | 10 GB/月 | オリジン往復 | | **Build** | Concurrent Build Minutes | 含まれる分あり、超過で従量 | 全ブランチ・PR ごとデプロイで増加 | | **Storage / Data** | Blob, KV, ISR, Data Cache | プランによる | 大量書き込み・キャッシュ無効化 | **最大のリスク**: **Fluid Provisioned Memory / Fluid Active CPU** — 常駐プロセスが動くと**待機中も**消費し続け、短時間で無料枠を超え、チーム全体が Paused になる(VERCEL_TEAM_PAUSED_RESOLUTION.md 参照)。 --- ## 3. 「気づいたら課金される」パターン | パターン | 何が起きるか | 主な課金要因 | 例 | | ---------------- | -------------------------- | -------------------------- | --------------------------------------------- | | **常駐型** | プロセスがずっと生きている | Fluid Memory / Fluid CPU | BullMQ ワーカー、Redis ポーリング、keep-alive | | **高頻度型** | 短時間に大量リクエスト | Invocations, Edge Requests | 1分ごと cron、webhook 連打、ボット | | **長時間型** | 1 リクエストが長く・重い | Function Duration, Fluid | 60秒超の API、重い SSR、大きなレスポンス | | **無制限型** | アラート・上限なし | すべて | 使用量を見ておらず、ある日 Paused / 高額請求 | | **ビルド過多型** | デプロイが多すぎる | Build Minutes | 全ブランチ・PR ごとプレビュー、リトライ多発 | --- ## 4. 制御の最大公約数(3 層) どのチーム・プロジェクトでも、次の **防止・検知・上限** を揃える。 ### 4.1 防止(Prevent)— 課金要因を「発生させない」 | 制御 | 内容 | 対象 | 参照 | | --------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------ | | **常駐を載せない** | Vercel にデプロイするコードパスで BullMQ ワーカー・常駐プロセスを**起動しない**。ワーカーは Container PaaS 等で別稼働。 | 全プロジェクト | vercel-no-workers-sia.md、one-portal `RENEW_VERCEL_RISK_ANALYSIS.md` | | **関数は短く・メモリ制限** | `vercel.json` で `maxDuration`(例: 10〜30秒)、`memory`(例: 512〜1024 MB)を設定。長時間 API は外部サービスに委譲。 | 全プロジェクト | `VERCEL_COST_OPTIMIZATION.md` | | **重い API は無効化可能に** | 長時間・高負荷の API は環境変数(例: `DISABLE_*_API=true`)で無効化できるようにする。 | 該当プロジェクト | `VERCEL_COST_VERIFICATION_CHECKLIST.md` | | **ビルドを限定** | デプロイは `main`(および必要なら `develop`)のみ。プレビューはラベル付き PR のみ、または無効化。リトライ無効化。 | 全プロジェクト | `VERCEL_COST_VERIFICATION_CHECKLIST.md` | ### 4.2 検知(Detect)— 「気づく」 | 制御 | 内容 | 対象 | 参照 | | -------------------- | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ----------------------------------------------------------- | | **Usage の定期確認** | 月 1 回以上、Vercel Dashboard → **Usage** で Fluid Memory/CPU、Invocations、Build を確認。プロジェクト別の内訳を把握。 | チーム | `VERCEL_TEAM_PAUSED_RESOLUTION.md` | | **Usage Alerts** | Fluid Provisioned Memory・Fluid Active CPU・Spend のアラートを設定(Pro なら Settings → Usage または Spend Management)。 | チーム | `VERCEL_ALERT_SETUP_GUIDE.md`、`VERCEL_COST_ALERT_SETUP.md` | | **CI / スクリプト** | 「Vercel に載るコードからワーカーを呼ばない」を CI で検証(one-portal の `check-vercel-no-workers.sh`)。 | Vercel にワーカーコードを持つプロジェクト | vercel-no-workers-sia.md | ### 4.3 上限(Limit)— 「勝手に課金しすぎない」 | 制御 | 内容 | 対象 | 参照 | | -------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------- | --------------------------------------- | | **Spend Management** | Pro の場合、Settings → **Spend Management** で**ハードキャップ**(例: 月 $50 でデプロイ停止)を設定。超過前に通知。 | チーム(Pro) | `VERCEL_ALERT_SETUP_GUIDE.md` | | **Usage の閾値** | Fluid Memory/CPU が無料枠の何割かでアラート(例: 80%)を出し、超過前に手を打つ。 | チーム | `VERCEL_COST_VERIFICATION_CHECKLIST.md` | | **プラン方針** | Free の場合は無料枠超過で Paused。Pro の場合は従量課金になるため、防止・検知・上限を必ず揃える。 | チーム | `VERCEL_TEAM_PAUSED_RESOLUTION.md` | --- ## 5. チェックリスト(最大公約数) ### 5.1 チーム単位でやること - [ ] **Usage** で Fluid Provisioned Memory / Fluid Active CPU / Invocations / Build の**プロジェクト別内訳**を把握する。 - [ ] **防止**: どのプロジェクトも「常駐ワーカー・常駐プロセスを Vercel で動かさない」設計になっているか確認する。 - [ ] **検知**: Usage Alerts(Fluid Memory/CPU、Spend)を設定する(Pro なら Spend Management も)。 - [ ] **上限**: Pro なら Spend Management でハードキャップを設定する。 - [ ] **定期**: 月 1 回以上、Usage を確認し、急増があれば原因(どのプロジェクト・どのパターン)を特定する。 ### 5.2 プロジェクト単位でやること(Vercel にデプロイする場合) - [ ] **常駐なし**: エントリ(src/app, instrumentation, middleware, next.config)から `createAllWorkers()` / `createWorker()` を呼んでいない(CI で検証する場合はスクリプト実行)。 - [ ] **関数制限**: `vercel.json` で `maxDuration`・`memory` を設定している。 - [ ] **重い API**: 長時間・高負荷の API は環境変数で無効化できるようにしている(必要なら)。 - [ ] **ビルド**: 本番デプロイは `main` 等に限定し、プレビュー・リトライは必要最小限にしている。 ### 5.3 新規プロジェクトを Vercel に載せるとき - [ ] 本体系の **防止・検知・上限** を満たす設計・設定になっているか確認する。 - [ ] ワーカー・バックグラウンドジョブが必要な場合は **Vercel 外**(Container PaaS、Durable Workflow)に置く方針にする。 --- ## 6. 体系の位置づけ | レイヤー | 内容 | 本ドキュメントでの対応 | | -------- | ------------------------------------ | --------------------------------------------- | | **防止** | コード・設計で課金要因を発生させない | 常駐を載せない、関数制限、ビルド限定、CI 検証 | | **検知** | アラート・定期確認で気づく | Usage 確認、Usage Alerts、Spend 通知 | | **上限** | 勝手に課金しすぎない | Spend Management ハードキャップ、閾値アラート | **SIA との関係**: 「Vercel でワーカーを動かさない」は **SIA Layer 2(デプロイによる不可能性)** として CI で強制する(vercel-no-workers-sia.md)。その他の制御(関数制限、アラート、Spend Management)は**ガイドライン+設定**で行い、チーム・プロジェクトで揃える。 --- ## 7. 参照 - VERCEL_TEAM_PAUSED_RESOLUTION.md — Paused の解消と再発防止。 - vercel-no-workers-sia.md — BullMQ ワーカー・常駐を Vercel で動かさない SIA(Layer 2)。 - VERCEL_COST_OPTIMIZATION.md — コスト最適化の一般的な対策。 - VERCEL_COST_VERIFICATION_CHECKLIST.md — 検証チェックリスト(詳細)。 - VERCEL_ALERT_SETUP_GUIDE.md — アラート・Spend Management の設定。 - one-portal: `docs/RENEW_VERCEL_RISK_ANALYSIS.md` — 設計制約・禁止事項(C-1〜C-4)。 - Vercel: Spend ManagementUsage and BillingFair use Guidelines