Supabaseとは何か
Supabaseは「オープンソースのFirebase代替」を掲げるBaaSプラットフォームだ。
| 項目 | 内容 |
|---|---|
| 設立 | 2020年(YC W20出身) |
| 本社 | シンガポール |
| GitHub Stars | 78K+(2026年3月) |
| DB | PostgreSQL(フルマネージド) |
| ライセンス | Apache 2.0 |
| 累計調達額 | $160M+ |
FirebaseがGoogleのプロプライエタリ技術に依存するのに対し、Supabaseは標準的なPostgreSQLの上に構築されている。ベンダーロックインのリスクが低いことが最大の差別化要素だ。
Supabaseの主要機能
| 機能 | 説明 | Firebase相当 |
|---|---|---|
| Database | フルマネージドPostgreSQL | Firestore |
| Auth | メール/OAuth/MFA認証 | Firebase Auth |
| Storage | ファイルストレージ(S3互換) | Cloud Storage |
| Edge Functions | Deno ベースのサーバーレス関数 | Cloud Functions |
| Realtime | WebSocketでのリアルタイム同期 | Realtime Database |
| Vector | pgvectorによるベクトル検索 | (対応なし) |
| Cron | 定期実行ジョブ | (対応なし) |
特にVector(ベクトル検索)機能はAI時代に強力だ。RAGアプリケーションのバックエンドをSupabase単体で構築できる。
Firebase vs Supabase — 徹底比較
| 比較軸 | Supabase | Firebase |
|---|---|---|
| データベース | PostgreSQL(リレーショナル) | Firestore(NoSQL) |
| クエリ言語 | SQL | 独自API |
| オープンソース | はい | いいえ |
| セルフホスト | 可能 | 不可 |
| Row Level Security | PostgreSQL RLS | Security Rules |
| 価格体系 | 使用量ベース | 使用量ベース |
| 無料枠 | 2プロジェクト、500MB DB | Spark(制限あり) |
| ベンダーロックイン | 低い(標準SQL) | 高い(Google依存) |
| リアルタイム | WebSocket | WebSocket |
| AI/ベクトル検索 | pgvector組み込み | 別途構築が必要 |
Supabaseの始め方 — 10分でCRUDアプリ
ステップ1: プロジェクト作成
supabase.com でアカウント作成後、「New Project」をクリック。リージョンは東京(ap-northeast-1)を選択する。
ステップ2: テーブル作成
Table Editor で GUI からテーブルを作成できる。SQLエディタでの直接記述も可能。
CREATE TABLE articles (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
title TEXT NOT NULL,
body TEXT,
status TEXT DEFAULT 'draft',
created_at TIMESTAMPTZ DEFAULT now()
);
-- RLS有効化
ALTER TABLE articles ENABLE ROW LEVEL SECURITY;
ステップ3: クライアント接続
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
)
// データ取得
const { data } = await supabase
.from('articles')
.select('*')
.eq('status', 'published')
.order('created_at', { ascending: false })
料金プラン
| プラン | 月額 | DB容量 | 特徴 |
|---|---|---|---|
| Free | $0 | 500MB | 2プロジェクト、50K MAU |
| Pro | $25 | 8GB | 100K MAU、自動バックアップ |
| Team | $599 | 8GB+ | SOC2、優先サポート |
| Enterprise | カスタム | 無制限 | SLA、専任エンジニア |
個人開発やMVP検証ならFreeプランで十分だ。Proプランも月$25と、Firebase の従量課金と比べて予測しやすい料金体系になっている。
Supabase × Next.js 実践パターン
| パターン | 実装 | ユースケース |
|---|---|---|
| SSR認証 | @supabase/ssr + middleware | ダッシュボード、管理画面 |
| RLS + anon key | クライアント直接アクセス | 公開データの取得 |
| Server Actions + service role | サーバーサイド処理 | データ更新、管理操作 |
| Edge Functions | Deno Deploy互換 | Webhook、外部API連携 |
| Realtime | チャンネル購読 | チャット、通知、ダッシュボード |
Next.js App Router との統合は特に強力で、Server Components からの直接クエリ、Server Actions でのミューテーション、middleware での認証チェックがシームレスに行える。
Row Level Security(RLS) — Supabaseのセキュリティの要
RLSはPostgreSQL のネイティブ機能で、テーブルの行レベルでアクセス制御を行う。
-- 自分の記事だけ読める
CREATE POLICY "Users can read own articles"
ON articles FOR SELECT
USING (auth.uid() = author_id);
-- 公開記事は誰でも読める
CREATE POLICY "Public articles are readable"
ON articles FOR SELECT
USING (status = 'published');
RLSを正しく設計すれば、クライアントから直接DBにアクセスしても安全だ。これにより、従来必要だったAPIレイヤーを大幅に削減できる。
あなたの次のプロジェクトに、SQLの力を
Supabaseが証明したのは、「モダンなWebアプリケーションにNoSQLは必須ではない」ということだ。50年の歴史を持つPostgreSQLの堅牢さに、リアルタイム、認証、ストレージ、ベクトル検索を統合した Supabase は、2026年のフルスタック開発における最有力候補のひとつだ。
次にアプリを作るとき、バックエンドの選択肢を「Firebase一択」で終わらせていいだろうか?
Supabaseでつまずきやすいポイント
導入は簡単だが、本番運用に入ってから直面しやすい落とし穴がいくつかある。
最も多いのは、RLSポリシーの設計漏れだ。テーブルを作ってRLSを有効化しただけでポリシーを書かないと、クライアントからは「エラーは出ないが0件しか返らない」という状態になる。逆に、開発中の暫定ポリシーを USING (true) のまま本番に出してしまい、全データが誰でも読める状態になっている事例も珍しくない。テーブルを追加するたびにポリシーを1本以上書く、を習慣にしておきたい。
次に多いのがインデックス不足だ。PostgreSQLなので、行数が増えれば当然フルスキャンが効いてくる。よく使う絞り込みと並び替えの組み合わせに複合インデックスを張っておかないと、数千行の段階でレスポンスが目に見えて落ちる。
無料枠特有の制約もある。Freeプランは1週間アクセスがないとプロジェクトが一時停止し、コンピュートも最小構成のため、ディスクI/Oのバースト予算を使い切ると読み取りが軒並み遅くなる。検証用途なら問題ないが、実サービスを載せるならProプランへの移行を前提に考えたほうがいい。
Firebaseから移行すべきか
すでにFirebaseで動いているプロダクトを無理に移す必要はない。判断の分かれ目は、データの形が「関係」を持ち始めているかどうかだ。
Firestoreで複数コレクションをまたぐ集計をアプリ側のループで書いている、あるいは非正規化のためにデータを何箇所にも複製している——こうした兆候が出てきたら、SQLで一発で書ける処理をNoSQLで代替している状態であり、移行の効果が大きい。
逆に、単純なドキュメント読み書きとリアルタイム同期しか使っていないなら、移行コストに見合うリターンは薄い。ベンダーロックインの低さは保険としての価値であって、それ自体が今日の開発速度を上げるわけではない。
よくある質問
SupabaseとFirebaseはどちらを選ぶべきですか?
データがリレーショナルで、集計やJOINを多用するアプリならSupabaseが有利です。PostgreSQLをそのまま使えるため、既存のSQL知識が活き、複雑なクエリも書けます。一方、リアルタイム同期が主役のモバイルアプリや、Google系サービスとの統合を重視する場合はFirebaseに分があります。料金の読みやすさではSupabaseのPro月$25という定額が予測しやすい設計です。
Supabaseの無料プランでどこまでできますか?
Freeプランは月額$0で、DB容量500MB、プロジェクト2つ、50K MAUまで使えます。個人開発やMVPの検証には十分な範囲です。ただし自動バックアップは付かず、一定期間アクセスがないとプロジェクトが一時停止されるため、本番運用に乗せる段階ではPro(月$25・8GB・100K MAU・自動バックアップ)への移行を検討してください。
Row Level Security(RLS)とは何ですか?
PostgreSQLのネイティブ機能で、テーブルの行単位でアクセス可否を制御する仕組みです。Supabaseでは「ログイン中のユーザーは自分の行だけ読める」といったポリシーをSQLで定義します。これによりクライアントから匿名キーで直接クエリしても、他人のデータは返りません。RLSを有効にせずに公開するとテーブル全体が読み放題になるため、本番前の必須チェック項目です。
Next.jsとSupabaseはどう組み合わせますか?
代表的なのは4パターンです。ダッシュボードなど認証必須の画面は @supabase/ssr とmiddlewareでSSR認証、公開データの取得はRLS+anon keyでクライアントから直接、データ更新や管理操作はServer Actions+service roleでサーバー側から、Webhookや外部API連携はEdge Functionsで処理します。App Routerとの相性が良く、Server Componentsから直接クエリできます。


