個人開発のSaaSサブスク棚卸し:年12万円を削った乗り換え先5選
結論
個人開発の固定費は「なんとなく契約した有料SaaS」の積み上げで膨らむ。筆者は5サービスを無料枠 or セルフホストへ乗り換え、月¥10,000・年¥120,000を削った。先に結論だけ:
| 乗り換え前 | 月額 | 乗り換え先 | 月額 | 削減/年 |
|---|---|---|---|---|
| Heroku Hobby (2 dyno+DB) | ¥2,800 | Fly.io / Railway 無料枠 | ¥0 | ¥33,600 |
| Vercel Pro | ¥3,000 | Cloudflare Pages | ¥0 | ¥36,000 |
| Datadog (1 host) | ¥2,300 | Grafana Cloud Free | ¥0 | ¥27,600 |
| Mailgun Foundation | ¥1,400 | Resend 無料枠 | ¥0 | ¥16,800 |
| Algolia Build超過 | ¥500 | Meilisearch (self-host) | ¥0 | ¥6,000 |
個人開発のトラフィック規模では、有料枠の機能の9割は使っていない。まず棚卸しして「実測値が無料枠に収まるか」を確認するのが先決だ。
根拠:まず実測してから判断する
削減判断は感覚ではなく実測で行う。請求の棚卸しから始める。
# 各サービスのプラン・直近の使用量をスプレッドシートに書き出す
# 例: 直近30日のリクエスト数を確認(nginx access.log の場合)
awk '{print $4}' access.log | grep -c "$(date +%d/%b/%Y)"
# → 1日あたり数千リクエスト程度なら、ほぼ全SaaSの無料枠に収まる
ポイントは「ピーク値」ではなく「実トラフィック」で見ること。個人開発の多くは Vercel/Cloudflare の無料枠(月10万リクエスト〜無制限帯域)に余裕で収まる。
手順
1. ホスティング:Heroku → Fly.io
# fly.io へデプロイ。既存の Dockerfile / buildpack をそのまま使える
curl -L https://fly.io/install.sh | sh
fly launch # fly.toml を対話生成
fly deploy
fly scale count 1 # 個人開発は1インスタンスで十分
fly postgres create # 無料相当の small インスタンス
fly scale count 1 と最小VM(shared-cpu-1x)に固定するのがコスト管理の肝。
2. フロント:Vercel Pro → Cloudflare Pages
帯域無制限・ビルド回数の実用上限が緩く、個人開発では Pro 機能(Analytics等)の代替が無料で揃う。
npm i -g wrangler
wrangler pages deploy ./dist --project-name my-app
3. 監視:Datadog → Grafana Cloud Free
Free プランで 10k メトリクス系列・50GBログ・14日保持。Prometheus からそのまま送れる。
# prometheus.yml — remote_write で Grafana Cloud へ転送
remote_write:
- url: https://prometheus-prod-XX.grafana.net/api/prom/push
basic_auth:
username: "123456"
password: "${GRAFANA_CLOUD_API_KEY}"
4. メール:Mailgun → Resend
無料枠で月3,000通・1日100通。トランザクションメール中心の個人開発には十分。
curl -X POST 'https://api.resend.com/emails' \
-H "Authorization: Bearer $RESEND_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"from": "you@yourdomain.dev",
"to": "user@example.com",
"subject": "Welcome",
"html": "<p>Thanks for signing up!</p>"
}'
5. 全文検索:Algolia → Meilisearch セルフホスト
すでに動いているVPSの空きリソースに同居させれば追加費用ゼロ。
docker run -d --name meili -p 7700:7700 \
-e MEILI_MASTER_KEY="$MEILI_KEY" \
-v $PWD/meili_data:/meili_data \
getmeili/meilisearch:v1.10
# インデックス投入
curl -X POST 'http://localhost:7700/indexes/posts/documents' \
-H "Authorization: Bearer $MEILI_KEY" \
-H 'Content-Type: application/json' \
--data-binary @posts.json
乗り換え時の注意
-
無料枠の超過挙動を必ず確認:自動課金されるサービス(Fly等)はハードリミットを設定。
fly scaleで上限を固定する。 - ベンダーロックインの薄い構成を選ぶ:Cloudflare Pages / Meilisearch は Docker・標準API中心で、再移行コストが低い。
- 段階移行:DNSの切り替えは TTL を短く(300秒)してから行い、旧サービスは1課金サイクル並走させて切り戻し可能にする。
棚卸しは一度やれば翌年以降も効く固定費削減だ。まず請求書を全部開き、実測トラフィックを無料枠と突き合わせるところから始めてほしい。
関連リンク
※一部にアフィリエイトリンク・自社商品を含みます。