DEV Community

スシロー
スシロー

Posted on

【実体験】個人開発のSaaSサブスク棚卸し:年12万円を削った乗り換え先5選

個人開発のSaaSサブスク棚卸し:年12万円を削った乗り換え先5選

結論

個人開発で「とりあえず契約した」有料SaaSを棚卸しした結果、月1万円・年間12万円を削減できた。鍵は「使用率が低いマネージドサービスを、無料枠の広い競合かセルフホストへ移すこと」。以下の5本が削減額の大半を占めた。

旧サービス 旧月額 乗り換え先 新月額 月削減
Heroku Eco + DB $12 Fly.io / Railway 無料枠 $0 約¥1,800
Vercel Pro $20 Cloudflare Pages $0 約¥3,000
Auth0 $0→従量 Supabase Auth $0 約¥2,000
Datadog $15 Grafana Cloud Free $0 約¥2,200
Mailgun Foundation $35 Resend Free(3,000通/月) $0 約¥1,000

根拠:個人開発の負荷では「Pro」はオーバースペック

個人開発のトラフィックは月数千〜数万PVが大半で、有料プランの上限に到達しない。にもかかわらずPro契約するのは「将来の不安」と「解約の面倒さ」が理由。実際の使用量をまず計測すべきだ。

# Vercelの帯域使用量を確認(無料枠100GB/月に対し実測を見る)
vercel inspect --usage

# Herokuのdyno稼働時間を確認
heroku ps -a your-app
Enter fullscreen mode Exit fullscreen mode

筆者の場合、Vercel Proの帯域使用は月8GB(無料枠の8%)、Datadogもホスト1台のメトリクスしか送っておらず、Grafana Cloud Freeの10,000シリーズ枠で十分だった。

手順:ダウンタイムを出さずに移す

1. Heroku → Fly.io

flyctl launchProcfileを自動検出する。Postgresも無料枠(共有1GB)で建つ。

flyctl launch --copy-config --name your-app
flyctl postgres create --name your-db --vm-size shared-cpu-1x
flyctl postgres attach your-db   # DATABASE_URLを自動注入
flyctl deploy
Enter fullscreen mode Exit fullscreen mode

DBはHeroku側からダンプして流し込む。

heroku pg:backups:capture -a old-app
heroku pg:backups:download -a old-app   # latest.dump
pg_restore --no-owner --dataonly -d "$(fly ssh console -C 'echo $DATABASE_URL')" latest.dump
Enter fullscreen mode Exit fullscreen mode

2. Vercel → Cloudflare Pages

ビルド設定をほぼそのまま移植できる。Next.jsなら@cloudflare/next-on-pagesを使う。

npm i -D @cloudflare/next-on-pages
npx @cloudflare/next-on-pages   # .vercel/output/static を生成
npx wrangler pages deploy .vercel/output/static
Enter fullscreen mode Exit fullscreen mode

DNSはCloudflareに移管済みなら切替が一瞬。旧Vercelは1週間並走させ、確認後に削除する。

3. Auth0 → Supabase Auth

JWTベースなので、フロントの検証ロジックは発行元を差し替えるだけ。

import { createClient } from '@supabase/supabase-js'
const supabase = createClient(URL, ANON_KEY)
// メール+パスワード/OAuthが標準装備、MAU 50,000まで無料
await supabase.auth.signInWithOAuth({ provider: 'github' })
Enter fullscreen mode Exit fullscreen mode

既存ユーザーはAuth0のExport APIでエクスポートし、supabase.auth.admin.createUser()で流す(パスワードハッシュ移行はbcryptならそのまま投入可)。

4. Datadog → Grafana Cloud

OpenTelemetry Collectorのexporter先を変えるだけで済む。

# otel-collector.yaml
exporters:
  otlphttp:
    endpoint: https://otlp-gateway-prod.grafana.net/otlp
    headers:
      authorization: "Basic ${GRAFANA_CLOUD_TOKEN}"
Enter fullscreen mode Exit fullscreen mode

5. Mailgun → Resend

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":"Hi","html":"<p>移行完了</p>"}'
Enter fullscreen mode Exit fullscreen mode

まとめ

ポイントは3つ。(1) 解約前に実使用量を計測して過剰プランを特定する、(2) JWT・OTLP・SMTPなど標準プロトコルに乗っているサービスは差し替えコストが低い(3) 旧サービスを1〜2週間並走させて安全に切る。年12万円は個人開発者にとってサーバー数年分。まずvercel inspect --usageから始めてほしい。


関連リンク

※自社商品(プロモーションを含みます)。

Top comments (0)