Appearance
料金見積もり
staging のみ (現状)
| 項目 | 月額 | 備考 |
|---|---|---|
| Cloud SQL (db-f1-micro / 10GB) | ¥1,500〜2,000 | shared-core / ZONAL / daily backup |
| Cloud Run (min=0, dev traffic) | ¥0 | 無料枠内 |
| Artifact Registry | ¥30〜80 | image 数 GB |
| Secret Manager (12 slot) | ¥50 | $0.06/version × 12 |
| Cloud Logging / Monitoring | ¥0 | 無料枠 50GiB |
| Networking (dev egress) | ¥0〜100 | ほぼゼロ |
| GCP 小計 | 約 ¥1,700〜2,300 | |
| Netlify Pro (1 site) | ¥3,000 | branch deploy で staging/prod 共有可 |
| Cloudflare R2 (10GB 内) | ¥0 | Free tier |
| Stripe test mode | ¥0 | 取引手数料のみ |
| SendGrid Free | ¥0 | 100通/日, 3,000通/月 |
| Sentry Free | ¥0 | 5,000 エラー/月 |
| ドメイン | ¥100〜300 | 年 ¥1,200-3,000 ÷ 12 |
| 合計 | 約 ¥4,800〜5,600 |
$300 Free Trial の効き
- GCP 新規アカウントには $300 USD (~¥45,000) / 90 日 のクレジット
- 上記 GCP 部分は月 ~$15 (¥2,300)
- 90 日制限が先に効くので 最初 3 ヶ月は実質 ¥3,100/月 (Netlify + ドメインのみ実費)
staging + prod (本番化後)
prod を同 GCP project に追加した場合の合計目安:
| 項目 | 月額 |
|---|---|
| Cloud SQL staging (ZONAL) | ¥1,500 |
| Cloud SQL prod (REGIONAL HA, db-custom-1-3840) | ¥3,000 |
| Cloud Run staging (min=0) + prod (min=1 warm) | ¥1,000〜2,000 |
| Artifact Registry (共有) | ¥50 |
| Secret Manager (24 slot) | ¥100 |
| Logging / Networking | ¥0〜200 |
| GCP 計 | ¥6,000〜7,000 |
| Netlify Pro (1 site, branch deploy) | ¥3,000 |
| ドメイン | ¥200 |
| 合計 | 約 ¥9,200〜10,400 |
依頼書の予測 (¥8,000〜10,000) のド真ん中に収まる。
想定外で膨らむケース 🚨
| シナリオ | 対策 |
|---|---|
| db-f1-micro が GCP で廃止 → 最小 tier 強制移行 (~¥3,000/月) | tier 変更で対応 (data 保持) |
| 画像アップロードで R2 10GB 超 | $0.015/GB-月 で微増、egress 0 円 |
| Cloud Run 頻繁呼出 (Cron 毎分発火 / bot) | min/max instance を制限、Cloud Armor で bot 除外 |
| Sentry 5,000 エラー/月 突破 | Team プラン $26/月 (¥3,900) |
| SendGrid 3,000 通/月 突破 | Essentials $19.95/月 (¥3,000) |
| Cloud SQL ログ吐きすぎ | log level を WARN に絞る |
集計方法
コンソール
- Cloud Console → 課金 → レポート → フィルタ "ラベル env = staging"
BigQuery (billing export)
事前設定:
sh
bq mk --dataset --location=asia-northeast1 ${PROJECT_ID}:billing_export
# Cloud Console: Billing → Billing export → BigQuery export → 該当 datasetenv 別月次コスト:
sql
SELECT
labels.value AS env,
service.description,
SUM(cost) AS cost_usd
FROM `<dataset>.gcp_billing_export_v1_*`,
UNNEST(labels) AS labels
WHERE labels.key = "env"
AND _PARTITIONDATE BETWEEN ... AND ...
GROUP BY env, service.description
ORDER BY cost_usd DESC;