Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「アプリ」認証追加

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for nikawa2161 nikawa2161
November 25, 2025
11

 「アプリ」認証追加

Avatar for nikawa2161

nikawa2161

November 25, 2025

Transcript

  1. 認証基盤の比較 項目 Auth0 Clerk Supabase 想定利用者 企業・B2B SaaS / 個人向け

    個人向け SSO 強い そこそこ 弱い UI 独自 UI 強い UI 優秀 最低限 開発体験 複雑 手軽 シンプル 価格 やや高い 中程度 最安 nikawa2161 5
  2. Supabase Auth を選んだ理由 1. 要件とのマッチ SSO 不要 シンプルな個人向けアプリに最適 2. 統一管理

    DB も Supabase を使う予定 auth.users とアプリ users が同じ DB 外部連携不要 3. コストと柔軟性 無料枠が広い 後から UI カスタマイズ可能 nikawa2161 6
  3. ユーザーテーブル設計 CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT

    gen_random_uuid(), supabase_auth_id UUID UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); ポイント: supabase_auth_id で認証ユーザーと紐付け UNIQUE 制約で 1 対 1 を保証 nikawa2161 8
  4. 連携の仕組み トリガー + ファンクションで自動連携 1. ユーザーが新規登録 2. auth.users にレコード作成 3.

    トリガーが発火 4. ファンクションが実行 5. users テーブルにレコード作成 メリット: 自動同期・アプリ側で意識不要 nikawa2161 9
  5. トリガー実装 CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH

    ROW EXECUTE FUNCTION handle_new_user(); 役割: auth.users への INSERT を検知 handle_new_user() 関数を呼び出す nikawa2161 11
  6. ファンクション実装 CREATE FUNCTION handle_new_user() RETURNS TRIGGER AS $$ BEGIN INSERT

    INTO public.users (supabase_auth_id) VALUES (NEW.id); RETURN NEW; END; $$ LANGUAGE plpgsql SECURITY DEFINER; 役割: supabase_auth_id に認証 ID を設定 users テーブルに新規レコード作成 nikawa2161 12
  7. 認証パッケージ化 packages/auth/src/ ├── client/ # ブラウザ実行コード │ ├── hooks/ #

    Reactフック │ └── supabase.ts # クライアント ├── server/ # サーバー実行コード │ ├── actions/ # Server Actions │ ├── supabase.ts # サーバークライアント │ └── utils.ts # ユーティリティ └── types/ # 型定義 方針: クライアント側で処理する方向で実装 nikawa2161 13
  8. まとめ やったこと Supabase Auth を認証基盤に選定 auth.users と users の自動連携 認証処理をパッケージ化

    現状の課題 ロールバック機構がない エラー時のデータ不整合リスク 今後の方針 まずは動くものを優先 課題は運用しながら改善 nikawa2161 16