LabHub

ブログ

Backend-as-a-Service 2026 — Supabase・Firebase・Pocketbase・Appwrite・Convex・InstantDB 徹底比較(1 人 SaaS の背骨) (日本語)

한국어English日本語

プロローグ — 「1 人 SaaS」の背骨を何で組むか

2026 年 5 月。新規プロジェクトの最初の会議は、2020 年と妙に似ていて、しかし違う。

「バックエンド、自分で書く?それとも BaaS 使う?」

違いは、もはや 「BaaS を使わないチームがほとんどいない」 ことだ。1 人 SaaS、インディゲーム、サイドプロジェクト、シードのスタートアップまで。フルスタックの裏側をゼロから書くのはコストが高すぎる。認証・ストレージ・リアルタイム・ベクター・DB・エッジ関数を全部手で書くのは、「AI で 1 人が SaaS を作る」 という 2026 年の流れと真正面からぶつかる。

BaaS の地形そのものも 5 年前と違う。

本稿は 2026 年 5 月時点で、7 つの選択肢を比較する。

比較軸は 7 つ — データモデル・リアルタイム・認証・ベクター/AI・セルフホスト・ベンダーロックイン・スケール時の価格。最後はシナリオ別の推薦で締める。


1 章 · 地形 — 何が BaaS で、誰と誰が戦うか

まず分類から。みんな「BaaS」と呼ぶが、形は違う。

区分ツール一言で
フル BaaS(ホスト)Firebase・Supabase・Appwrite Cloud認証・DB・ストレージ・関数・リアルタイムを一か所で
セルフホスト フル BaaSAppwrite・Supabase(self-host)Docker や Kubernetes で自分で運用
単一バイナリ BaaSPocketbaseSQLite + Go バイナリ一つ、1 人 SaaS 向き
リアクティブ バックエンドConvex関数 + 購読 + 自動キャッシュ、React/TS-first
リアルタイム DBInstantDB・Firestoreクライアントがグラフでデータ購読
自前組み合わせPlanetScale + Clerk + Inngest + Resend などBaaS を拒否、各機能を別サービスで

本稿の中心は太字の 6 つ — Supabase・Firebase・Pocketbase・Appwrite・Convex・InstantDB。最後に自前組み合わせを短く扱う。

なぜこの 6 つか


2 章 · データモデル — SQL かドキュメントかグラフか

BaaS 選択の最初の分岐は データモデル だ。間違えると半年後に後悔する。

リレーショナル(SQL)         ドキュメント              グラフ/リアクティブ
     |                          |                          |
Supabase   Appwrite(SQL)   Firebase(Firestore)   InstantDB   Convex
Pocketbase(SQLite)          Appwrite(Docs)        Firestore Datastore

2.1 Supabase — Postgres そのもの

Supabase の本質は 「Postgres に BaaS の皮を被せた」 こと。データは本物の Postgres テーブルに入り、JOIN・トリガー・MV・CTE が普通に使える。

-- Supabase は本物の Postgres なのでそのまま動く
CREATE TABLE posts (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  author_id uuid REFERENCES auth.users (id),
  title text NOT NULL,
  body text,
  created_at timestamptz DEFAULT now()
);

-- Row Level Security が権限モデルの中心
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
CREATE POLICY "own_posts" ON posts
  USING (author_id = auth.uid());

強み

弱み

2.2 Firebase Firestore — ドキュメントの王

Firestore は コレクション + ドキュメント + サブコレクション の NoSQL ドキュメント DB。スキーマレスで、クライアントから直接読み書きが標準モデル。

import { getFirestore, collection, addDoc } from 'firebase/firestore'

const db = getFirestore()
await addDoc(collection(db, 'posts'), {
  authorId: 'user_123',
  title: 'Hello',
  createdAt: serverTimestamp(),
})

強み

弱み

2.3 Pocketbase — SQLite ベースの綺麗なリレーショナル

Pocketbase は SQLite の上にコレクションモデルを乗せた形。「ドキュメントっぽいが実はリレーショナル」のハイブリッド。

強み

弱み

2.4 Appwrite — ドキュメント型、マルチバックエンド

Appwrite はドキュメント/コレクションモデルだが、内部的に MariaDB・MySQL・MongoDB を選べる。運用者が自分のインフラに合わせて選べるのが強みでもあり複雑さでもある。

2.5 Convex — ドキュメント + reactive ビュー

Convex のデータモデルは ドキュメント + インデックス + 関数。データを直接公開せず、常に TypeScript 関数 を経由して見る。

// convex/posts.ts
import { query } from './_generated/server'

export const list = query(async (ctx) => {
  return await ctx.db.query('posts').order('desc').take(20)
})
// クライアントは関数結果を購読する — 自動でリアルタイム
const posts = useQuery(api.posts.list)

2.6 InstantDB — トリプルストア + グラフクエリ

InstantDB は entity-attribute-value(トリプルストア) モデルの上にグラフクエリ層を持つ。

import { useQuery } from '@instantdb/react'

// 「todos を取って、その中の owner も一緒に」
const { data } = useQuery({ todos: { owner: {} } })

スキーマは任意 — スキーマなしで始めて、徐々に強化できる。


3 章 · リアルタイム — 「プッシュ」が標準か任意か

2026 年の BaaS において、リアルタイムは 任意ではなく標準。ただし実装モデルは違う。

ツールリアルタイム モデル備考
Supabase RealtimePostgres 論理レプリ → WebSocketRLS 適用
Firebase Firestoreスナップショット リスナー自動、オフライン向き
Firebase RTDBWebSocket でツリー/ノード購読最古のリアルタイム NoSQL
Pocketbase RealtimeSSE でコレクション購読シンプル、単一ノード
Appwrite RealtimeWebSocket でチャネル購読コレクション/ドキュメント単位
ConvexWebSocket — 関数結果を自動無効化最も滑らかな reactive
InstantDBWebSocket — クエリグラフを購読差分を丸ごとプッシュ

3.1 Supabase — RLS とリアルタイムの邂逅

Supabase Realtime は Postgres の論理レプリケーションを聞いていて、RLS ポリシーを満たす変更だけをクライアントにプッシュする。

const channel = supabase
  .channel('posts')
  .on('postgres_changes',
      { event: '*', schema: 'public', table: 'posts' },
      (payload) => { /* ... */ })
  .subscribe()

RLS がリアルタイムにも適用される — 一か所でポリシーを書けば、読み・書き・リアルタイム全部を同じポリシーで守れる。

3.2 Firestore — 最も滑らかなモバイル リアルタイム

onSnapshot はモバイル向きリアルタイムの事実上の標準。オフラインキュー、自動再接続、コレクションインデックスまで束ねられる。

3.3 Convex — 関数結果がそのまま購読単位

Convex の違いは 「クエリ関数の結果自体が購読単位」 という点。関数が読んだデータを自動追跡し、それが変わると関数を再実行してクライアントに新結果をプッシュする。

「どのチャネルを購読するか?」のような悩みが消える。ただし料金モデル・関数の書き方が一般 BaaS と違うので学習コストがある。

3.4 InstantDB — グラフ差分そのままプッシュ

InstantDB はクライアントが書いたグラフクエリ({ todos: { owner: {} } })をそのまま購読する。どの attribute が変わったか、サーバが知っている。


4 章 · 認証・権限 — 本当に運用可能か

BaaS の本当の価値は認証・権限システムにある。自分で書いた人は知っている — トークン回転・OAuth コールバック・メール確認・MFA・RLS がどれだけ面倒か。

ツール認証方式権限モデル
Supabase AuthEmail・OAuth・Magic Link・SAML・MFAPostgres RLS
Firebase AuthEmail・OAuth・Magic Link・SAML・MFASecurity Rules
Pocketbase AuthEmail・OAuthコレクション API ルール
Appwrite AuthEmail・OAuth・Magic Link・SMS・MFATeams + Permissions
Convex AuthClerk・Auth0・NextAuth アダプタ関数内チェック
InstantDB AuthMagic Link + ClerkRules(Datalog 風)

4.1 Supabase Auth + RLS

中心は JWT + Postgres RLS。JWT の subauth.uid() 関数として全クエリで使える。

CREATE POLICY "select_own" ON posts FOR SELECT
  USING (author_id = auth.uid());

CREATE POLICY "insert_own" ON posts FOR INSERT
  WITH CHECK (author_id = auth.uid());

RLS は データ自体に権限が刻まれる ので強力だが、デバッグ難度がある — ポリシーを間違えると「原因不明の空結果」になる。

4.2 Firebase Security Rules

宣言的 DSL で権限を書く。

match /posts/{postId} {
  allow read: if true;
  allow write: if request.auth.uid == resource.data.authorId;
}

学習コストはあるが、慣れると非常に強力。

4.3 Convex — 関数内チェック

Convex には RLS のような DB レベル権限が無い。すべての権限チェックは関数内。

export const updatePost = mutation(async (ctx, { id, body }) => {
  const identity = await ctx.auth.getUserIdentity()
  if (!identity) throw new Error('unauthorized')
  const post = await ctx.db.get(id)
  if (post.authorId !== identity.subject) throw new Error('forbidden')
  await ctx.db.patch(id, { body })
})

長所は明示性 — 権限がコードに見える。短所は一貫性 — すべての関数に手で書く必要がある。

4.4 InstantDB Rules

InstantDB は Datalog 風のルール DSL を使う。データモデルがトリプルストアなのでルール言語もその形に合う。


5 章 · AI・ベクター — 2026 年の BaaS の差別化点

2026 年の BaaS で最も急進化した領域が ベクター・埋め込み・AI 機能 だ。

ツールベクター検索AI 連携
Supabasepgvector + HNSWEdge Functions + AI SDK 連携
FirebaseVertex AI Vector Search 連携Genkit(GA)
Pocketbaseビルトインなし(外部)別途
Appwritev1.7~ ベクターコレクション ベータFunctions から直接
Convexベクターインデックス ビルトイン関数内 OpenAI 呼び出し標準
InstantDBベクター検索 ベータトリガー + 外部

5.1 Supabase — pgvector の本拠地

Supabase の AI 親和度が最高と評される理由は pgvector を 1 級扱い している点。

CREATE EXTENSION vector;

CREATE TABLE documents (
  id bigserial PRIMARY KEY,
  content text,
  embedding vector(1536)
);

CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);

RAG・埋め込み検索・セマンティック検索が普通の Postgres クエリで書ける。AI アプリで BaaS とベクター DB を分ける必要が無い。

5.2 Firebase Genkit — Google の回答

Genkit は Firebase 側の AI フレームワークで正式に GA。Vertex AI 連携、Gemini モデル、retrieval、flow definition、評価まで束ねる。Firebase バックエンド + Genkit AI フローを一緒に書きたいチームに自然。

5.3 Convex — 関数内で LLM 呼び出しが標準

Convex 関数の中で OpenAI・Anthropic API を直接呼ぶパターンが標準化されている。ベクターインデックスがビルトインで RAG パイプラインが短い。

// convex/rag.ts
export const search = query(async (ctx, { q }) => {
  const embedding = await embed(q)
  const docs = await ctx.db
    .query('docs')
    .withIndex('by_embedding', q => q.vectorSearch('embedding', embedding))
    .take(5)
  return docs
})

6 章 · セルフホスト ストーリー — 「1 人 SaaS」では核心

セルフホストは単なるコスト削減ではなく、ベンダーロックインを断つ保険 だ。

ツールセルフホスト難易度
Supabase公式 Docker compose / Kubernetes Helm中(Postgres + マイクロサービス複数)
Firebase不可(エミュレータのみ)n/a
Pocketbase単一バイナリ非常に低(1 分)
Appwrite公式 Docker compose低~中(モノリシック、Docker 一行)
ConvexOSS セルフホスト(2025 公開)
InstantDBベータ段階のセルフホスト中~高

6.1 Pocketbase — 最もシンプル

Pocketbase のセルフホストは 1 分。

# バイナリをダウンロード後
./pocketbase serve --http=0.0.0.0:8090

Fly.io・Railway・任意の VPS — 単一バイナリと SQLite ファイルが全構成。バックアップはそのファイルをコピー。

6.2 Supabase — 強力だが運用コストあり

Supabase のセルフホストは可能だが、複数サービス(Postgres + GoTrue + Realtime + Storage + Studio + ...)を一緒に運用 する必要がある。Docker compose で開始はできるが、本番運用には真剣な運用工数が必要。

6.3 Appwrite — Docker 親和

Appwrite はセルフホストが 1 級市民。docker-compose up -d で全スタックが立ち上がる。インディと小規模チームに自然。

6.4 Convex — OSS 登場

2025 年後半に Convex が OSS セルフホスト版を公開。ホスト版と 100% 同等ではないが、ロックインを本気で減らした。

6.5 Firebase — 不可能

Firebase にはセルフホストオプションが無い。ローカルエミュレータは開発用。これが Firebase の最大の弱点。


7 章 · ベンダーロックイン — 抜けられるか

セルフホストとは別に、データ・コード・運用知識の可搬性 がロックインの本質だ。

ツールデータ ロックインコード ロックイン
Supabase低(Postgres)低(SDK が薄い)
Firebase高(Firestore export が大変)高(Security Rules・トリガー・Hosting)
Pocketbase非常に低(SQLite ファイル)
Appwrite中(ドキュメント export)
Convex中(関数 + インデックスが一体)中~高
InstantDB中(トリプルストア)

Supabase が最低の理由

Supabase の真の強みは 「データはただの Postgres」 ということ。pg_dump で他の Postgres にそのまま入る。SDK も PostgREST・GoTrue といった標準の上にあるので乗り換えコストが低い。

Firebase が最高の理由

Firestore export → 他 DB は自動ではない。モデルが違い(ドキュメント → リレーショナル写像が必要)、Security Rules・トリガー・Functions は Google Cloud に埋め込まれている。ロックインが本質的だ。


8 章 · 料金・スケール — 「エッジケース」が決める

料金比較は単純な表ではない。「何が課金単位か」 が核心だ。

ツール課金単位
SupabaseDB サイズ + Egress + アクティブユーザ + 関数呼び出し
Firebaseドキュメント read/write/delete + 保存 + Egress + 関数呼び出し
Pocketbaseセルフホスト(VPS 費用) — ホスト版なし
AppwriteProject + 関数実行 + ストレージ(Cloud) / セルフホストは無料
Convex関数呼び出し + ストレージ + WebSocket 接続時間
InstantDBアクティブユーザ + トランザクション

料金の罠

最もよくある誤りは 「無料 tier が手厚い」だけ見て決めること

1 人 SaaS シナリオ(月 1,000 ユーザ)

おおよそ(正確な数字は常に最新の料金ページ確認)。

この段階では Pocketbase・セルフホスト Appwrite が圧倒的に安い。代わりに運用は自分の時間。

シード SaaS シナリオ(月 5 万ユーザ)


9 章 · 7 軸比較 — ひと目で

9.1 コア マトリクス

SupabaseFirebasePocketbaseAppwriteConvexInstantDB
データモデルSQL(Postgres)ドキュメントSQL(SQLite)ドキュメントドキュメントトリプル/グラフ
リアルタイムRLS + LRsnapshotSSEWSreactiveグラフプッシュ
認証RLSRulesAPI ルールTeamsアダプタMagic + Rules
ベクター・AIpgvector 1 級Genkit/Vertex外部ベータビルトインベータ
セルフホスト可(Docker/K8s)不可可(バイナリ)可(Docker)可(OSS)ベータ
ロックイン非常に低非常に高非常に低
1 人コスト低(無料)非常に低

9.2 シナリオ別 推薦

AI アプリ(RAG・埋め込み・LLM フロー)

  1. Supabase — pgvector + Edge Functions、最も滑らか。
  2. Convex — 関数 + ベクター ビルトイン、TS-first。
  3. Firebase + Genkit — Google 陣営を既に使っている場合。

B2B SaaS(関係データ・複雑クエリ)

  1. Supabase — Postgres が第一。
  2. PlanetScale・Neon + Clerk + 自前バックエンド — 自前組み合わせ陣営。
  3. Convex — TS-first チームで reactive を望む場合。

モバイル優先(オフライン・プッシュ通知)

  1. Firebase — 依然事実上の標準。オフライン同期が成熟。
  2. Supabase — モバイル SDK 進化中だが、オフラインはまだ Firebase 水準ではない。
  3. InstantDB — リアルタイム グラフがモバイル UX に合う。

1 人 SaaS・インディ・サイドプロジェクト

  1. Pocketbase — 単純さの価値が圧倒的。
  2. Supabase — 無料 tier + Postgres 運用知識の再利用。
  3. InstantDB — 小チーム + リアルタイム向き。

セルフホスト優先(規制・セキュリティ・コスト)

  1. Appwrite — Docker 一行、フルスタック。
  2. Supabase セルフホスト — 強力だが運用コスト。
  3. Pocketbase — 最もシンプル。

10 章 · 自前組み合わせ — BaaS を拒否する道

最後のカード。意識的に BaaS を拒否し、各責務を別サービスで組むチームもいる。

Auth        Clerk / WorkOS / Auth.js
DB          PlanetScale / Neon / Supabase Postgres(のみ)
Realtime    Liveblocks / Ably / 自前 WS
Storage     S3 / R2 / UploadThing
Functions   Inngest / Cloudflare Workers
Email       Resend
Vector      Pinecone / Turbopuffer / pgvector

強み

弱み

いつ良いか


11 章 · この 1 年で何が変わったか

各ツールの 2025~2026 年の主な変更。

Supabase

Firebase

Pocketbase

Appwrite

Convex

InstantDB


エピローグ — 「1 人が SaaS を作る」時代の道具選び

BaaS 選択は 「何を課金単位として受け入れるかの意思決定」 でもある。1 年後の請求書を頭の中で先に描くことが、価格表を暗記するより大事だ。

2026 年 5 月時点の結論。

意思決定 チェックリスト

アンチパターン

  1. 無料 tier だけで判断する — 1 年後の請求書は曲線。課金単位を見よ。
  2. 「トレンド」だけで乗り換える — Convex がかっこよく見えて移ったが、RLS 風の権限が恋しくなるケース多数。
  3. SLA 計算なしの 1 人セルフホスト — バックアップ・監視・アップグレードは自分の時間。
  4. Firebase で日 30 万 read を無料 tier 内と仮定する — 課金モデルを先にモデリング。
  5. BaaS A と B を同時に使う — 「認証は Firebase、DB は Supabase」。統合コストで一シーズン消える。
  6. ロックイン 0 を追求して何も作れない — ロックインはトレードオフ、ゼロは不可能。
  7. AI アプリなのにベクター ビルトイン無しを選ぶ — BaaS の価値の半分が消える。

次回予告

「BaaS とはバックエンドを書く仕事ではない。バックエンドを書かないという意思決定を書く仕事だ。」

— BaaS 2026、終。


参考 / References

コメント

まだコメントはありません。

ログインするとコメントできます