Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

「アプリ」認証追加

Avatar for nikawa2161 nikawa2161
November 25, 2025
1

 「アプリ」認証追加

Avatar for nikawa2161

nikawa2161

November 25, 2025
Tweet

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