Firebase vs Supabase
Googleの包括的モバイルプラットフォームFirebaseと、オープンソースのPostgreSQL代替Supabaseが対決。Backend-as-a-Service選定の際に何を優先すべきか?
Postgresを中心に据えたフルバックエンド:auth、storage、realtime、functions
純粋なサーバーレスPostgres:copy-on-writeブランチング、今やDatabricksのエンジン
これは「どちらが優れているか」ではなく「自分に何が必要か」という問いだ。Auth+Storage+Realtime+Functionsを成熟した形で単一プラットフォームから求めるならSupabaseを選ぶべきだ。Postgresのみ+ブランチ単位のPR運用+コンピュート秒課金を求めるならNeonのほうが強力だ — Auth/Storage/Functionsは2026年9月17日にGAになったが、実運用での実績はまだはるかに短い。 Prisma/Drizzleはどちらでも動くが、プーラーのトランザクションモードではprepared statementの非互換性があり、追加設定が必須だ。ORMの選択自体が判断を左右するわけではない。
| カテゴリー | Supabase | Neon |
|---|---|---|
| パフォーマンス | 8/10 | 8/10 |
| 学習のしやすさ | 8/10 | 7/10 |
| エコシステム | 9/10 | 6/10 |
| コミュニティ | 9/10 | 6/10 |
| 求人市場 | 6/10 | 6/10 |
| 将来性 | 8/10 | 7/10 |
// Supabase — RLS保護されたクエリ + Storageアップロード(TypeScript)
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
process.env.SUPABASE_URL!,
process.env.SUPABASE_ANON_KEY!
)
// RLSポリシー"select_own_posts"で保護されたテーブル
const { data: posts, error } = await supabase
.from('posts')
.select('id, title, created_at')
.eq('author_id', userId)
.order('created_at', { ascending: false })
.limit(20)
if (error) throw error
// 同じプロジェクト内のStorage — 署名付きアップロードURL
const { data: uploadUrl } = await supabase.storage
.from('avatars')
.createSignedUploadUrl(`${userId}/profile.png`)
// Realtime — Postgres Changesによるライブリスニング
supabase
.channel('posts-changes')
.on(
'postgres_changes',
{ event: 'INSERT', schema: 'public', table: 'posts' },
(payload) => console.log('Yeni post:', payload.new)
)
.subscribe()# Neon — CLI + serverlessドライバー(bash + TypeScript)
# --- bash:PRごとにブランチを作成/削除(CIステップ) ---
# 1) メインブランチから即座にcopy-on-writeクローンを作成
neon branches create \
--project-id $NEON_PROJECT_ID \
--name "preview/pr-${PR_NUMBER}" \
--parent main
# 2) このブランチのpooled接続文字列を取得
neon connection-string "preview/pr-${PR_NUMBER}" --pooled
# 3) PRがクローズされたらブランチを削除(クリーンなプレビュー環境)
neon branches delete "preview/pr-${PR_NUMBER}" --project-id $NEON_PROJECT_ID
// --- TypeScript:serverless環境(Vercel Edge/Cloudflare Workers)でのHTTPベースドライバー ---
import { neon } from '@neondatabase/serverless'
const sql = neon(process.env.DATABASE_URL!) // pooled、PgBouncerの裏側
const rows = await sql`
SELECT id, title, created_at
FROM posts
WHERE author_id = ${userId}
ORDER BY created_at DESC
LIMIT 20
`これは「どちらが優れているか」ではなく「自分に何が必要か」という問いだ。Auth+Storage+Realtime+Functionsを成熟した形で単一プラットフォームから求めるならSupabaseを選ぶべきだ。Postgresのみ+ブランチ単位のPR運用+コンピュート秒課金を求めるならNeonのほうが強力だ — Auth/Storage/Functionsは2026年9月17日にGAになったが、実運用での実績はまだはるかに短い。 Prisma/Drizzleはどちらでも動くが、プーラーのトランザクションモードではprepared statementの非互換性があり、追加設定が必須だ。ORMの選択自体が判断を左右するわけではない。
無料相談を受ける短い答えはニーズ次第だ。純粋でブランチ可能なサーバーレスPostgres+最小限のベンダーロックインを求めるならNeon、auth・storage・realtime・edge functionsを単一プラットフォームから既製で求めるならSupabase。判断は本来「どちらが人気か」ではなく「自分に必要なのはプラットフォームか、それとも単なるデータベースか」という問いに帰着する。