関連記事:データベース設計入門
Supabaseは、オープンソースのBaaS(Backend as a Service)です。Firebaseと同様のバックエンド機能を提供しますが、内部ではPostgreSQLを使用しているため、リレーショナルデータベースの知識がそのまま活かせます。
SupabaseとFirebaseの違い
| 項目 | Supabase | Firebase |
|---|---|---|
| データベース | PostgreSQL(RDB) | Firestore(NoSQL) |
| クエリ | SQL対応 | 独自クエリAPI |
| オープンソース | はい | いいえ |
| セルフホスト | 可能 | 不可 |
| リアルタイム | あり | あり |
| 料金モデル | 予測しやすい | 従量課金中心 |
セットアップ
npm install @supabase/supabase-js
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
'https://your-project.supabase.co',
'your-anon-key'
);
データベース操作
SQLベースなので、テーブル作成はSQLで行います。
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
published BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT NOW()
);
データの追加・取得
// データの追加
const { data, error } = await supabase
.from('posts')
.insert({ title: 'Supabase入門', content: '基本を学ぼう' });
// データの取得
const { data: posts } = await supabase
.from('posts')
.select('*')
.eq('published', true)
.order('created_at', { ascending: false });
// リレーション付き取得
const { data: postsWithAuthor } = await supabase
.from('posts')
.select('*, author:users(name, email)');
認証
// メール・パスワードでサインアップ
const { data, error } = await supabase.auth.signUp({
email: 'user@example.com',
password: 'password123',
});
// ログイン
const { data, error } = await supabase.auth.signInWithPassword({
email: 'user@example.com',
password: 'password123',
});
// Googleログイン
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'google',
});
Row Level Security(RLS)
Supabaseの大きな特徴がRLSです。データベースレベルでアクセス制御ができます。
Prisma ORM入門も参考にしてください。
-- RLSを有効化
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
-- 自分の投稿だけ読める
CREATE POLICY "Users can read own posts"
ON posts FOR SELECT
USING (auth.uid() = user_id);
-- 公開された投稿は誰でも読める
CREATE POLICY "Anyone can read published posts"
ON posts FOR SELECT
USING (published = true);
ストレージ
// ファイルのアップロード
const { data, error } = await supabase.storage
.from('avatars')
.upload('user1/avatar.png', file);
// 公開URLの取得
const { data } = supabase.storage
.from('avatars')
.getPublicUrl('user1/avatar.png');
料金体系
| プラン | 月額 | 主な制限 |
|---|---|---|
| Free | $0 | 500MB DB、1GB Storage |
| Pro | $25 | 8GB DB、100GB Storage |
無料プランでも個人開発には十分な容量です。
Supabaseが向いている場面
- SQLやリレーショナルデータベースの知識がある方
- ベンダーロックインを避けたい場合
- 複雑なクエリ(JOIN、集計)が必要なアプリ
- 将来的にセルフホストの可能性がある場合
まとめ
Supabaseは、SQLの知識がある方にとって非常に使いやすいBaaSです。Firebaseと比較してデータの柔軟性が高く、セルフホストも可能なため、長期的なプロジェクトにも適しています。