SupabaseはFirebaseの最強代替ツール
SupabaseはFirebaseのオープンソース代替として急速に人気を集めているBaaS(Backend as a Service)です。PostgreSQLをベースにしており、Firebase同様にデータベース・認証・ストレージ・リアルタイム機能・Edge Functionsを提供しています。
FirebaseではなくSupabaseを選ぶ理由:
・PostgreSQL(SQLデータベース)を使うため、複雑なクエリ・JOIN・トランザクションが可能
・オープンソースなのでセルフホスティング可能(ベンダーロックインリスクが低い)
・Row Level Security(RLS)による強力なセキュリティ
・REST API・GraphQL・リアルタイムサブスクリプションを自動生成
・無料枠が充実している(Projectあたり500MB DB・50,000月間アクティブユーザー等)
Supabaseのセットアップ(5分でできる)
Supabaseプロジェクトの作成からNext.jsへの統合手順を解説します。
Step 1:Supabaseプロジェクト作成
supabase.comでアカウント作成 → 「New Project」でプロジェクトを作成。データベースパスワードを設定します。
Step 2:Next.jsへの統合
npm install @supabase/supabase-js @supabase/ssr でパッケージをインストール。
Step 3:環境変数の設定
.env.localに NEXT_PUBLIC_SUPABASE_URL と NEXT_PUBLIC_SUPABASE_ANON_KEY を設定(Supabaseダッシュボードから取得)。
Step 4:Supabaseクライアントの作成
utils/supabase/client.ts にSupabaseクライアントを作成して各コンポーネントからimportして使用します。
Supabase Authによるユーザー認証の実装
Supabase Authはメール/パスワード・OAuth(Google・GitHub等)・マジックリンク・SMSによる認証を簡単に実装できます。
Next.js App Routerでの認証実装ポイント:
・@supabase/ssr パッケージを使ってサーバーサイドでのCookieベースセッション管理を実装
・middleware.tsでルート保護を設定(認証なしでアクセスできるページを制限)
・Server ComponentsでSupabaseのセッションを確認してユーザー情報を取得
ソーシャルログインの設定:SupabaseダッシュボードのAuthentication→Providers でGoogleやGitHubなどのOAuthプロバイダーを有効化。OAuthアプリの設定(GoogleはGoogle Cloud Console等)をするだけで実装完了です。
Supabaseデータベース・Row Level Securityの活用
SupabaseのデータベースはPostgreSQLをフル活用できます。特に重要なRow Level Security(RLS)の設定方法を解説します。
Row Level Security(RLS)とは:データベーステーブルへのアクセスをユーザーごとに行レベルで制御する機能です。「自分のデータしか読み書きできない」というセキュリティポリシーをSQL文で定義できます。
RLSの基本的な設定例:
① テーブルのRLSを有効化(ALTER TABLE notes ENABLE ROW LEVEL SECURITY)
② ポリシーを作成:「認証済みユーザーは自分のuser_idと一致するレコードのみSELECT可能」というポリシーをSupabase ダッシュボードまたはSQLで設定
Supabaseのリアルタイム機能・ストレージの活用
Supabaseはリアルタイム機能とファイルストレージも提供しています。
リアルタイムサブスクリプション:
supabase.channel('messages').on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'messages' }, callback).subscribe() のように書くと、テーブルへのINSERT・UPDATE・DELETEをリアルタイムでフロントエンドに届けられます。チャット・通知機能の実装に活用できます。
Supabase Storage:
画像・動画・ファイルのアップロード・管理ができます。バケット単位でのアクセス制御・画像変換(Transformations)機能も備えています。