Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新

Feb 3, 2026 - 日記

Supabaseのコストが気になったらPocketBase: $4 VPSで動くBaaSの選択基準

Supabaseのコストが気になったらPocketBase cover image

Supabase は、PostgreSQLを中心に「欲しい機能がだいたい揃ってる」優れたBaaSです。一方で、プロダクトが伸びる前段の個人開発やMVPだと「まず固定費を抑えたい」「リソース使用量が読めない」といった理由で、コストが気になる場面もあります。関連記事は baassupabase にまとめています。

自分は なんでも解説動画ジェネレーター で、ジョブキュー管理のために PocketBase を採用しました。理由は単純で、要件がそこまで複雑ではなく、運用コストを最小にしたかったからです。

本記事では、PocketBaseを「Supabaseの代替」として雑に推すのではなく、PocketBaseを選ぶべき条件(そして選ぶべきでない条件)を整理します。どちらも素晴らしいサービスで、勝ち筋は要件次第です。

Supabaseのコスト構造を理解する

クラウド版の料金(Free / Pro / Team)

Supabase Cloudの料金は Supabase Pricing にまとまっています。

  • Free: まず試すには十分。ただし「本番運用の安定性」「上限」「サポート」など、どこかで壁に当たります。
  • Pro: $25/月〜 が起点になりやすいです(プロジェクト単位の固定費として効いてくる)。
  • Team: チーム運用・権限・監査など、組織向けの要件が主軸です。

ここで大事なのは「Supabaseが高い」ではなく、クラウド運用で面倒な部分(DB運用、バックアップ、監視、アップデートなど)を丸ごと引き受けてくれる分、固定費が発生する、という構造です。

セルフホストの現実(複雑さと必要リソース)

Supabaseはセルフホストもできますが、実運用に乗せると現実的なコストが見えてきます。

  • 構成がシンプルではない: supabase/supabase のDocker Composeはコンポーネントが多く、全体を理解して保守する必要があります。
  • 必要リソースがそれなり: 「4GB+ RAM推奨」「10+コンテナ構成」あたりが、最低ラインとして効いてきます(プロジェクト規模・ワークロードで上下します)。
  • VPS代だけでは終わらない: バックアップ、監視、アップグレード、障害対応の“人件費”がじわじわ来ます。

つまり「月額は下がったが、運用責務が増えた」という状態になりがちです。ここを受け入れられるかが分岐点です。

PocketBaseという選択肢

PocketBaseは、単一バイナリで動く軽量BaaSです。データストアはSQLiteで、認証・ストレージ・リアルタイム購読が一体になっています。

特徴(刺さるところだけ):

  • 単一バイナリ(公式いわく約12MB)で、デプロイが簡単
  • SQLite(WALモード)で、運用が軽い
  • 認証・ファイルストレージ込みで「まず動く」までが速い
  • Go/JavaScriptで拡張できる一方、Cloud Functionsのようなマネージド実行基盤はありません

なお、PocketBaseは現時点で v1.0 未満です。また、水平スケーリング(同一アプリを複数台に増やして分散する)は前提としていません。この制約は、後述の「向かないケース」に直結します。

機能比較

両者の機能を整理します。「どちらが優れているか」ではなく、「何ができて、何ができないか」を把握するのが目的です。

データベース

機能SupabasePocketBase
DB エンジンPostgreSQLSQLite(WALモード)
SQL クエリフル SQL 対応制限付き(フィルタ構文)
JOIN / ビュー / 関数×
トランザクションACID 完全対応単一ライタ制約あり
拡張機能(pgvector等)×
スキーマ管理マイグレーション + GUIコレクション定義 + GUI

Supabaseは「PostgreSQLそのもの」なので、複雑なクエリや拡張機能が使えます。PocketBaseはSQLiteベースで、シンプルなCRUDに特化しています。

認証

機能SupabasePocketBase
メール/パスワード
OAuth(Google, GitHub等)○(多数対応)○(15+プロバイダ)
マジックリンク
電話認証(SMS)×
MFA(多要素認証)×
SAML / SSO○(Team以上)×
Row Level Security○(PostgreSQL RLS)○(コレクションルール)

認証の基本機能は両者とも揃っています。エンタープライズ向け(MFA、SAML)が必要ならSupabase一択です。

ストレージ

機能SupabasePocketBase
ファイルアップロード
アクセス制御RLS ベースコレクションルール
画像変換(リサイズ等)×
CDN○(Smart CDN)×
最大ファイルサイズ500GB(Pro)設定次第

Supabaseはストレージ機能が充実しています。PocketBaseは「ファイルを保存できる」レベルで、画像変換やCDNは自前で用意する必要があります。

リアルタイム

機能SupabasePocketBase
DB 変更の購読○(Postgres Changes)○(コレクション購読)
Broadcast(任意データ配信)×
Presence(オンライン状態)×
同時接続数(目安)プランによる10,000+($4 VPS)

リアルタイム機能は両者ともDB変更の購読に対応しています。Supabaseはチャットやコラボレーション向けのBroadcast/Presenceも備えています。

サーバーサイドロジック

機能SupabasePocketBase
Edge Functions○(Deno)×
DB トリガー / 関数○(PostgreSQL)×
カスタムフック×○(Go / JS)
拡張方法マネージド関数バイナリに組み込み

ここが設計思想の違いです。Supabaseは「マネージドな関数実行基盤」を提供し、PocketBaseは「フレームワークとして拡張する」アプローチです。PocketBaseでカスタムロジックを書く場合、Go/JSでフックを実装し、バイナリをビルドし直す必要があります。

運用・管理

機能SupabasePocketBase
管理ダッシュボード○(高機能)○(シンプル)
CLI
バックアップ自動(Pro以上)手動 or Litestream
ログ / 監視○(Log Drain対応)基本ログのみ
マイグレーション○(supabase db push)○(pb_migrations)

Supabaseは運用ツールが充実しています。PocketBaseは「シンプルに動く」ことを優先しており、監視やバックアップは自前で構築します。

コスト比較(ざっくり)

前提: ここでは「まず本番で回す」最小構成の固定費をイメージします。実際のコストは、トラフィック・データ量・運用体制で大きく変わります。

選択肢月額の目安運用コスト(手間)どんなときに効くか
Supabase Cloud Pro$25+低い(マネージド)DB運用を避けたい、PostgreSQL前提の設計
Supabase Self-hostedVPS $20〜(例)+ 付随コスト高い(自分で見る)クラウド固定費を下げたいが運用を持てる
PocketBaseVPS $4〜低〜中(単一ノード運用)シンプル要件で、固定費を極小にしたい

「PocketBaseは$4のVPSで動く」という話は、PocketBase FAQ の文脈(1台運用、想定接続数の話)に近いです。具体的には Hetzner CAX11(2vCPU、4GB RAM)で10,000+のリアルタイム接続が可能とされています。接続数や性能は環境依存なので、数値は目安として捉えてください。

PocketBaseを選ぶべき条件

✅ 向いているケース

  • 個人開発・MVP: まず固定費を抑えて、当たったら移行する前提で割り切れる
  • 社内ツール: 同時接続やSLAがそこまで厳しくない、CRUD中心
  • シンプルなCRUD: 複雑なSQL・高度なRLS(Row Level Security)・多段のトランザクションが不要
  • 単一ノード運用で成立する: 「1台落ちたら復旧する」で許される範囲

ポイントは「安いから」ではなく、「要件がシンプルなら、余計な構造を持ち込まずに安く済む」です。

❌ 向かないケース

  • 水平スケールが必須: 早期から複数台でさばきたい、HA(高可用性)が要件
  • PostgreSQL機能に依存: 複雑なJOIN、ビュー、関数、拡張、厳密なトランザクション設計が前提
  • エンタープライズ要件: 監査、権限、SLO/SLA、組織運用、コンプライアンス要件が強い
  • データの整合性を強く求める高更新ワークロード: SQLiteの特性(単一ライタ等)で設計が苦しくなる

実例: なんでも解説動画ジェネレーターでの採用理由

なんでも解説動画ジェネレーター では、PocketBaseを「ジョブキューの管理」にだけ使っています。

やりたいことはだいたいこれだけでした。

  • ジョブを作る(queued)
  • ワーカーがジョブを取って進める(processing)
  • 進捗・結果を更新する(completed / failed)
  • UI側は状態変化をリアルタイムに追いたい

Supabaseでももちろん実現できます。ただ、自分のケースでは「DBを賢く使う」より「キューを雑に管理できて、UIが追随すればOK」が優先でした。

採用理由:

  • ジョブキュー管理だけなら、SQLite + 単一ノードで十分だった
  • UIのリアルタイム更新が欲しかった(PocketBaseの購読で足りた)
  • 固定費を抑えたかった(VPS $4〜が現実的)
  • 依存コンポーネントが少なく、保守の心理的負担が小さい

アーキテクチャ(ざっくり):

flowchart LR
  U[User] --> W[Web UI]
  W -->|Create job| API[App API]
  API --> PB[(PocketBase
SQLite)]

  Worker[Worker] -->|Fetch queued jobs| PB
  Worker -->|Update status/progress| PB

  PB -->|Realtime subscription| W
  Worker --> Gen[Video generation
LLM/TTS/Render]
  Gen --> Store[(Object Storage
or local files)]
  Worker -->|Store result URL| PB

この構成だと、PocketBaseは「ジョブ状態の単一ソース」と「UI更新の通知役」に集中できます。逆に言うと、ここがスケール要件に当たった瞬間が、移行を考えるタイミングです。

移行の現実性

Supabase → PocketBase

現実的には「移し替え」というより「作り直し」に近いです。

  • PostgreSQL前提のスキーマ(複雑な正規化、ビュー、関数など)は再設計が必要
  • RLSを多用している場合、PocketBase側の権限モデルに合わせて組み直しになります
  • Supabase Auth前提のトークン設計をしていると、クライアント側の改修も出ます

PocketBase → Supabase

成長したら移行可能です。やることが明確なので、先に「出口」を意識しておくと安心です。

  • PocketBaseのコレクションを、後でPostgreSQLに落とせる形(過度にネストしない、ID設計を安定させる)にしておく
  • ファイルは最初から外部ストレージに寄せる(移行の痛みを減らす)
  • バックアップは Litestream などでSQLiteのレプリケーションを検討しておく
  • 認証まわりは"差し替える前提"で、アプリ層に寄せておく

PocketBaseは「小さく始める」には強いですが、長期のスケール戦略まで全部任せるタイプではない、という前提で設計しておくのが安全です。

まとめ

  • PocketBaseは「Supabaseの代替」ではなく「別の選択肢」です
  • コスト重視 + 要件がシンプル(単一ノードで成立)ならPocketBaseがハマります
  • スケール + PostgreSQL機能 + 組織要件ならSupabaseが強いです
  • どちらも良いので、先に要件(可用性、運用体制、SQL依存度)を言語化してから選ぶのが一番効きます

参考リンク