Supabase とは
Supabase は、PostgreSQL をベースにしたオープンソースの BaaS(Backend as a Service)だ。
「オープンソース版 Firebase」と紹介されることが多い。Firebase と同じく「DB・認証・ストレージ・関数」が一通り揃っているが、決定的な違いが2つある。
- DB が PostgreSQL — Firestore のような NoSQL ではなく、SQL でクエリが書ける
- 完全 OSS — セルフホスト可能。ベンダーロックインが軽い
個人開発で「Firebase の代わりに」「次のサービスで」と選ばれることが急速に増えている。
Firebase との違い
| 項目 | Firebase | Supabase | |---|---|---| | DB | Firestore (NoSQL) | PostgreSQL (SQL) | | 認証 | Firebase Auth | Supabase Auth (GoTrue) | | リアルタイム | Realtime DB | Realtime (Postgres LISTEN/NOTIFY) | | ストレージ | Cloud Storage | Storage (S3 互換) | | 関数 | Cloud Functions | Edge Functions (Deno) | | OSS | × | ○ | | セルフホスト | × | ○ | | 料金(無料枠) | 寛容 | 寛容(500MB DB + 50K MAU) |
最大の違いは 「SQL が使えるかどうか」 だ。Firestore の NoSQL は柔軟だが、複雑なクエリ(JOIN・集計)が苦手で、データ構造の変更にも弱い。一方 PostgreSQL なら JOIN も GROUP BY も WINDOW も自由に書ける。リレーショナルデータを扱うアプリでは Supabase が圧倒的に有利だ。
Supabase の主要機能
1. Database (PostgreSQL)
完全な PostgreSQL が使える。バージョンは 15 以上で、pg_trgm(全文検索)・pgvector(ベクトル検索)・pg_cron(スケジューラ)など実用的な拡張機能も使える。
-- ベクトル検索(埋め込み)も標準で使える
CREATE TABLE documents (
id uuid PRIMARY KEY,
content text,
embedding vector(1536)
);
-- 類似ドキュメント検索
SELECT * FROM documents
ORDER BY embedding <=> $1::vector
LIMIT 5;2. Auth
メール・パスワード、Magic Link、OAuth(Google / GitHub / Apple など)に対応。クライアントから1行で呼び出せる:
// Magic Link 送信
await supabase.auth.signInWithOtp({ email });
// セッション取得
const { data: { user } } = await supabase.auth.getUser();Firebase Auth と違って、ユーザー情報は通常の auth.users テーブルとして PostgreSQL に保存される。これが後述する RLS と組み合わさって強力に機能する。
3. Row Level Security (RLS)
Supabase の最大の魅力が RLS だ。
「ユーザー A が自分のデータだけアクセスできる」というセキュリティルールを DB レベル で記述できる。
-- bookmarks テーブルの RLS 有効化
ALTER TABLE bookmarks ENABLE ROW LEVEL SECURITY;
-- ポリシー: 自分の bookmarks だけ SELECT 可能
CREATE POLICY "users can read own bookmarks"
ON bookmarks FOR SELECT
USING (auth.uid() = user_id);これがあることで、フロントエンドから直接 Supabase に SELECT を投げても、他人のデータは絶対に見えない。バックエンド API を書かずに済む場面が大幅に増える。
4. Realtime
PostgreSQL の LISTEN/NOTIFY を使ったリアルタイム同期が標準搭載されている。チャットや通知機能を作るときに便利だ。
supabase
.channel('messages')
.on('postgres_changes',
{ event: 'INSERT', schema: 'public', table: 'messages' },
(payload) => console.log('New message:', payload.new))
.subscribe();5. Storage
S3 互換のオブジェクトストレージ。画像・動画・PDF などを保存できる。RLS と連携して、「自分がアップロードしたファイルだけ表示」 といった制御もできる。
6. Edge Functions
Deno ランタイムで動くサーバーレス関数。Stripe Webhook の受け口や、特定の処理を切り出すのに便利。
Supabase の料金(2026年現在)
| プラン | 月額 | DB | 帯域 | MAU | |---|---|---|---|---| | Free | $0 | 500MB | 5GB | 50,000 | | Pro | $25 | 8GB | 250GB | 100,000 | | Team | $599 | カスタム | カスタム | カスタム |
Free プランの 500MB DB + 50K MAU は、個人開発のサービスなら十分すぎる枠だ。最初の1万ユーザーまでは無料で耐えられる規模感がある。
Firebase との比較では、Spark プラン(無料)はリクエスト数で制限がかかる一方、Supabase は MAU で制限される。SaaS や会員制サービスを作るなら Supabase の方が予測しやすい。
個人開発での実用例
例1: 会員制 LMS
[ブラウザ] → [Next.js] → [Supabase Auth + DB + RLS]
会員ログイン・コース閲覧履歴・進捗管理を Supabase ですべて完結できる。バックエンド API を書かずに、Next.js から直接 Supabase を叩く構成が現代的だ。
例2: ブックマークアプリ
X(Twitter)の保存ツイートを Supabase に保存し、ベクトル検索(pgvector)で類似ツイートを推薦する——という構成が30分で組める。
CREATE TABLE bookmarks (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
user_id uuid REFERENCES auth.users(id),
url text NOT NULL,
title text,
embedding vector(1536),
created_at timestamptz DEFAULT now()
);例3: フォーム送信ログ
問い合わせフォームの内容を Supabase に保存し、Edge Function で Slack 通知を飛ばす——というシンプルな構成も得意だ。
Supabase を使い始める手順
# 1. プロジェクト作成(supabase.com でサインアップ)
# 2. CLI インストール
npm install -g supabase
# 3. プロジェクト連携
supabase login
supabase link --project-ref <your-project-ref>
# 4. ローカル開発環境(Docker 必須)
supabase start
# 5. マイグレーション作成
supabase migration new create_bookmarksマイグレーションファイルは supabase/migrations/ に保存される。Git で管理することで「DB 構造の変更履歴」もコードとして追跡できる。
つまずきがちなポイント
1. RLS を有効化したのにポリシーがない → 全アクセス拒否
ALTER TABLE ... ENABLE ROW LEVEL SECURITY; を書いたら、必ず CREATE POLICY も書く。ポリシーがないテーブルは、認証済みユーザーでも一切アクセスできない。
2. service_role キーをフロントで使ってしまう
Supabase には2種類のキーがある:
anonキー: フロント用。RLS が効く。service_roleキー: バックエンド用。RLS をバイパスできる全権限。
service_role キーは絶対にフロントエンドコードに含めてはいけない。漏れると DB が丸見えになる。
3. RLS のデバッグが難しい
「なぜか SELECT が空になる」場合は、99% RLS の設定漏れだ。Supabase Dashboard の SQL Editor で SET ROLE authenticated; を実行してから SELECT を試すと、本番と同じ条件で確認できる。
まとめ
- Supabase は PostgreSQL ベースの OSS BaaS
- Firebase の代替として、特に SQL を使いたい個人開発者 に最適
- RLS により「フロントから直接 DB を叩く」設計が安全に成立する
- Free プランで 50K MAU まで耐える
Firebase 系サービスを使ってきた人がスムーズに移行できるし、最初からリレーショナルなデータ設計をしたい人にとっては「これしかない」という選択肢になっている。
Think You Lab では Next.js + Supabase + Stripe を使った会員制サービスの構築を実践形式で学べるコースを提供している。Supabase Auth + RLS の設定から Stripe Webhook での決済連携まで、実際に動くコードを写経しながら学べる構成だ。
LINE 公式アカウント
Supabase × Next.js の実装テンプレをLINEで配布中