#decision-making (1)
背景
フルスタック Web 開発では「どのバックエンド使うか」という選択肢が多い。
- Firebase Cloud Functions
- AWS Lambda
- Google Cloud Functions
- Cloudflare Workers
- Vercel Functions
- 自社 VM / Kubernetes
アンチパターン
単なる Slack webhook POST → Firebase Cloud Functions + GCP VM
課題
- 過剰エンジニアリング: インフラの複雑さが実装の 10 倍
- 学習曲線: Firebase SDK の理解 / GCP コンソール操作
- 運用コスト: 監視、ログ、スケーリング設定
- 冗長性: 単純な処理に高可用性インフラは不要
原則:逆算発想
1. 必要な処理は何か?
→ Slack Webhook 1 行の POST
2. どのくらいのスケールか?
→ コーポレートサイト、月 100 件程度の問い合わせ
3. どのインフラがそれに適切か?
→ API Gateway / Edge Function で十分
❌ Firebase(学習コスト高い)
❌ Cloud Run(常時起動 VM)
✓ CF Pages Functions(エッジで即実行、無制限)
判断表
| 必要な処理 | 推奨インフラ | 理由 |
|---|---|---|
| Webhook POST / メール送信 | CF Functions / Vercel API | 単発実行、低レイテンシ |
| CRUD API + DB | Supabase / Firebase Realtime | リアルタイム必須 |
| バッチ処理 / 長時間実行 | Cloud Tasks / Temporal | スケジュール・リトライ |
| リアルタイム双方向通信 | WebSocket (Vercel KV / Durable Objects) | ステートフル |
| 機械学習推論 | Lambda / Cloud Functions | 計算量多い |
移行ケース
Before(過剰)
Next.js (GCP App Engine)
↓
Firebase Cloud Functions
↓
Slack Webhook
- 起動:
gcloud app deploy(数分待ち) - 監視: GCP コンソール + Firebase console
- コスト: 月 $10-50(Free tier外)
After(最小化)
Astro static (CF Pages)
↓
CF Pages Functions(同一プロジェクト)
↓
Slack Webhook
- デプロイ:
wrangler deploy(秒単位) - 監視: CF dashboard 一箇所
- コスト: 月 $0(Free 10万req/日)
チェックリスト:この技術は必要か?
- 実装なしに同じ結果を得られないか?(No = 必要)
- 学習コストは実装メリットに見合うか?
- 運用オーバーヘッド(監視、スケーリング、ログ)は将来的に必要か?
- チーム全体が使いこなせるスキルセットがあるか?
- 本番環境での障害時の対応ができるか?
1 つでも No なら、もっと単純な選択肢を検討する。
学び
「機能しているから」という理由で複雑性を受け入れない。 移行時が技術選定を見直すベストタイミング。