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 Management、Usage and Billing、Fair use Guidelines。