運用と注意点

本番投入前に押さえるべきこと。スキーマ管理、環境分離、ホスティング統合、料金最適化、 セルフホスト、トラブルシュートまで。

環境分離(dev / staging / prod)

マイグレーション運用

typical CI パイプライン

PR 作成 → preview 環境 (Vercel)
       ↓
ステージング DB に migration push (auto)
       ↓
e2e テスト
       ↓
main へ merge → 本番に migration push
      

型生成を CI で自動化

# GitHub Actions
- run: npx supabase gen types typescript \
    --project-id $PROJECT_ID > lib/database.types.ts
- run: |
    git diff --quiet || (git config user.name bot && \
      git commit -am "chore: update db types" && git push)

シードデータ

-- supabase/seed.sql
insert into posts (title, content) values
  ('hello', 'world'),
  ('foo', 'bar');

supabase db reset で migrations + seed が流れる。

Vercel / Next.js での統合

  1. Vercel プロジェクトの環境変数に URL / anon / service_role を設定
  2. Preview / Production で違うプロジェクトを指す
  3. middleware.ts でセッションリフレッシュ
  4. Server Component で createServerClient
  5. Client Component で createBrowserClient

環境変数の典型

# プレビュー(ステージング DB)
NEXT_PUBLIC_SUPABASE_URL=https://staging-xxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=...

# 本番
NEXT_PUBLIC_SUPABASE_URL=https://prod-xxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=...

# サーバ専用(Vercel の Environment Variables で「Hidden」に)
SUPABASE_SERVICE_ROLE_KEY=...

パフォーマンス

SELECT を絞る

インデックス

N+1 を避ける

Connection Pooler

料金最適化

監視・観測

バックアップ戦略

セルフホスト

OSS 版は完全無料。AWS / GCP / 自前サーバに Docker Compose で立てられる。

メリット

デメリット

サードパーティ運用

セキュリティ Tips の総まとめ

監査ログの実装例

create table audit_log (
  id bigserial primary key,
  user_id uuid,
  table_name text,
  operation text,
  old_data jsonb,
  new_data jsonb,
  at timestamptz default now()
);

create function log_change()
returns trigger as $$
begin
  insert into audit_log (user_id, table_name, operation, old_data, new_data)
  values (auth.uid(), tg_table_name, tg_op,
    case when tg_op != 'INSERT' then to_jsonb(old) else null end,
    case when tg_op != 'DELETE' then to_jsonb(new) else null end);
  return coalesce(new, old);
end;
$$ language plpgsql security definer;

create trigger posts_audit
  after insert or update or delete on posts
  for each row execute function log_change();

商用採用例

他の選択肢との比較

SupabaseFirebasePocketBaseHasura + DB
DBPostgresFirestoreSQLite任意
OSS×○ Go 1 バイナリ
セルフホスト×◎ 簡単
Realtime○ GraphQL Subscription
規模中〜大個人〜小

失敗事例から学ぶ

関連リソース

本セクションの総括

  1. セットアップ でローカルと本番を分ける
  2. Database でスキーマと SQL を書く
  3. Auth でログインフロー
  4. RLS必ず権限を定義
  5. Realtime / Storage / Edge Functions で機能拡張
  6. 本ページの運用を守る
最後に

Supabase は普通の Postgres + 周辺サービス。 BaaS を使っている自覚を持ちつつ、いざとなれば DB を持ち出して別環境で動かせる安心感が魅力。 まずローカルで触り、RLS の理解に時間をかけるのが本番化の近道。