はじめに:500MBの壁にぶつかった日
先月、個人プロジェクトでSupabaseを使っていたら、突然「cannot execute INSERT in a read-only transaction」というエラーが出て、焦った経験をしました。原因は単純で、データベース容量が500MBの制限に達していた んです。
Supabaseの無料枠は「太っ腹」と評判ですが、実際に使ってみると意外な落とし穴があることがわかりました。今回は、無料枠とProプランの制限について、実際の開発者の声も交えながら詳しく解説していきます。
無料枠の制限、実際どこまで使える?
データベースサイズ500MBの現実
無料枠で最も厳しい制限がこれです。500MBというと結構余裕があるように見えますが、ユーザーデータやログが蓄積していくと、意外とあっという間に到達します。
ある開発者は「毎日新しいレコードを追加して、同じ量の古いレコードを削除、そしてVACUUMコマンドを実行する」という綱渡りのような運用をしていました。しかも、ダッシュボードの表示が実際のサイズと乖離することがあり(実際488MB vs 表示868MB)、管理が難しいという声も。
制限に達すると何が起きる?
- データベースが読み取り専用モードになる
- INSERT、UPDATE、DELETEができなくなる
- ユーザーからすると「サービスが壊れた」ように見える
その他の主要な制限
無料枠の制限一覧:
- ストレージ: 1GB
- 帯域幅: 5GB/月
- 月間アクティブユーザー: 50,000人
- Edge Functions: 500,000回/月
- リアルタイム接続: 200接続
- ログ保持: 1日間
- 自動バックアップ: なし
- プロジェクト数: 最大2つ
特に注意すべきはプロジェクトの自動停止機能。7日間アクセスがないと自動的に停止され、復旧は手動で行う必要があります。 しかも2024年6月からは、停止されたプロジェクトは90日間しか復旧できません。
メール送信制限の罠
回避策:Gmail SMTPの設定
Host: smtp.gmail.com
Port: 465 (SSL) または 587 (TLS)
認証: Googleアカウントの2段階認証とアプリパスワード
Proプランは本当に月額$25なのか?
基本料金の内訳
Proプランの料金体系、実は少し複雑です:
- 基本料金: $25/月
- コンピュートクレジット: $10/月(Microインスタンス相当)
- 追加プロジェクト: 約$10/月
つまり、最低でも月額$25かかりますが、実際にはコンピュートインスタンスの料金が別途必要になることがあります。
Proプランで拡張される制限
Proプランの制限:
- データベース: 8GB(超過分 $0.125/GB)
- MAU: 100,000人(超過分 $0.00325/MAU)
- ストレージ: 100GB(超過分 $0.021/GB)
- 帯域幅: 250GB(超過分 $0.09/GB)
- Edge Functions: 200万回(超過分 $2/100万回)
- リアルタイム接続: 500接続
- ログ保持: 7日間
- 自動バックアップ: 7日間
コンピュートインスタンスの選択
意外と知られていないのが、インスタンスサイズの選択肢の豊富さ:
Micro: $10/月(2コア、1GB RAM)← コンピュートクレジットでカバー
Small: $15/月(2コア、2GB RAM)
Medium: $60/月(2コア、4GB RAM)
Large: $110/月(2コア、8GB RAM)
小規模なプロジェクトならMicroで十分ですが、トラフィックが増えてくると上位プランが必要になってきます。
いつProプランに移行すべき?実際の判断基準
移行を検討すべき4つのサイン
- データベース容量が400MB(80%)を超えた
- 余裕を持って移行準備を始める
- データクリーンアップでは限界がある
- 月間アクティブユーザーが40,000人を超えた
- 成長予測を立てて早めに判断
- 突然の制限は避けたい
- 商用サービスをローンチする
- 7日間の自動停止は致命的
- バックアップも必須
- パフォーマンスに不満が出てきた
- 無料枠は共有リソース
- レスポンスタイムが安定しない
実際の移行事例
- *Mobbin(デザイン参考ツール)**は20万人のユーザーをFirebaseからSupabaseに移行し、コストと性能の両面で改善を実現。一方で、**Shotgun(イベントプラットフォーム)**は83%のコスト削減を達成しています。
開発者が陥りやすい落とし穴と対策
1. 予期しない課金
「APIコールは無制限無料」という表記を見て安心していたら、エグレス(データ転送)料金で課金されたケースも。 5秒間隔でポーリングしていたアプリが、想定外の転送量になっていた例もあります。
対策:Spend Cap機能を活用
- Proプランではデフォルトで有効
- 予算を超えたらサービスが停止(課金は防げる)
2. プロジェクト自動停止の対策
GitHub Actionsで定期的にpingを送る方法が人気:
name: Keep Supabase Alive
on:
schedule:
- cron: '0 9 * * 1,4' # 週2回実行
jobs:
ping:
runs-on: ubuntu-latest
steps:
- name: Ping Supabase
run: |
curl -X GET "${{ secrets.SUPABASE_URL }}/rest/v1/keep_alive" \\
-H "apikey: ${{ secrets.SUPABASE_ANON_KEY }}"
3. データベースサイズの監視
定期的にサイズをチェックする習慣をつけましょう:
-- 実際のデータベースサイズを確認
SELECT sum(pg_database_size(pg_database.datname)) / (1024 * 1024) as db_size_mb
FROM pg_database;
2024年の最新アップデート
改善された点
- 組織ベースの課金システム
- 複数プロジェクトを効率的に管理
- クォータが組織全体で共有
- エグレス制限の緩和
- 無料枠: 4GB → 5GB/月に増加
- データベース制限の明確化
- アクティブプロジェクトごとに500MB
- 削除・停止プロジェクトはカウントされない
まだ改善されていない点
無料枠($0)とProプラン($25)の間に中間プランがないことに対して、多くの開発者から不満の声が上がっています。GitHubのIssueには「$10プランを作って」という要望が88個の👍を集めていました。
まとめ:結局どう使うのが正解?
無料枠が向いているケース
- 個人の趣味プロジェクト
- プロトタイプ開発
- 学習目的
- トラフィックが少ないツール
Proプランへの移行が必要なケース
- 商用サービス
- データが着実に増えるサービス
- 安定性が求められるアプリ
- チーム開発
実践的なアドバイス
- 最初から監視体制を整える
- データベースサイズ
- エグレス使用量
- MAU数
- 早めの移行判断
- 制限の80%で検討開始
- 余裕を持った計画
- コスト最適化
- 不要データの定期削除
- 適切なインデックス設計
- キャッシュの活用
Supabaseは確かに素晴らしいサービスですが、無料枠の制限を理解して使わないと、ある日突然サービスが止まって焦ることになります。 特にデータベースの500MB制限は、思っているより早く到達するので要注意です。
一方で、Proプランは月額$25と聞くと高く感じるかもしれませんが、提供される機能と安定性を考えると、商用利用では十分にペイする価格設定だと思います。 FirebaseやAWSと比較しても、予測可能な料金体系は大きな魅力です。
個人的には、本番環境に移行する前の段階で一度Proプランを試してみることをお勧めします。無料枠との違いを実感できますし、本格運用時の判断材料にもなるはずです。