Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
「アプリ」認証追加
Search
nikawa2161
November 25, 2025
0
1
「アプリ」認証追加
nikawa2161
November 25, 2025
Tweet
Share
More Decks by nikawa2161
See All by nikawa2161
マッチング
nikawa2161
0
3
自己肯定感
nikawa2161
0
3
問題・解決空間
nikawa2161
0
2
コンパイルの違い
nikawa2161
0
3
error-marp.pdf
nikawa2161
0
5
difit
nikawa2161
0
49
フロントのキャッシュ
nikawa2161
0
6
Dia
nikawa2161
0
3
LLMを拡張機能に
nikawa2161
0
11
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Agile that works and the tools we love
rasmusluckow
331
21k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
690
The Pragmatic Product Professional
lauravandoore
37
7k
How STYLIGHT went responsive
nonsquared
100
5.9k
Building Adaptive Systems
keathley
44
2.9k
BBQ
matthewcrist
89
9.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Scaling GitHub
holman
464
140k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Transcript
Supabase 認証基盤の導入 2025.11.25 マッチングアプリ開発 nikawa2161 1
本日のアジェンダ 1. 認証基盤の選定 2. Supabase Auth の実装 3. 今後の課題と改善 nikawa2161
2
認証基盤の選定 自前で構築したくない →SaaS 選定 候補: Auth0 Clerk Supabase Auth nikawa2161
3
ユースケース マッチングアプリの要件 SNS / メールアドレス / 電話番号でログイン アプリを繰り返し開く 個人利用が前提 シンプルなログイン体験が重要
企業向け SSO は不要 UI はシンプルで十分 nikawa2161 4
認証基盤の比較 項目 Auth0 Clerk Supabase 想定利用者 企業・B2B SaaS / 個人向け
個人向け SSO 強い そこそこ 弱い UI 独自 UI 強い UI 優秀 最低限 開発体験 複雑 手軽 シンプル 価格 やや高い 中程度 最安 nikawa2161 5
Supabase Auth を選んだ理由 1. 要件とのマッチ SSO 不要 シンプルな個人向けアプリに最適 2. 統一管理
DB も Supabase を使う予定 auth.users とアプリ users が同じ DB 外部連携不要 3. コストと柔軟性 無料枠が広い 後から UI カスタマイズ可能 nikawa2161 6
Supabase 認証の仕組み 2 つのテーブルを連携 auth.users(Supabase 管理) 認証情報のみを保持 users(アプリ管理) プロフィール等のアプリ固有情報 なぜ分ける?
→ 認証と業務データの責務分離 nikawa2161 7
ユーザーテーブル設計 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
連携の仕組み トリガー + ファンクションで自動連携 1. ユーザーが新規登録 2. auth.users にレコード作成 3.
トリガーが発火 4. ファンクションが実行 5. users テーブルにレコード作成 メリット: 自動同期・アプリ側で意識不要 nikawa2161 9
実装の流れ ユーザー新規登録 ↓ auth.users 作成 ← Supabase管理 ↓ トリガー発火 ↓
ファンクション実行 ↓ nikawa2161 10
トリガー実装 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
ファンクション実装 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
認証パッケージ化 packages/auth/src/ ├── client/ # ブラウザ実行コード │ ├── hooks/ #
Reactフック │ └── supabase.ts # クライアント ├── server/ # サーバー実行コード │ ├── actions/ # Server Actions │ ├── supabase.ts # サーバークライアント │ └── utils.ts # ユーティリティ └── types/ # 型定義 方針: クライアント側で処理する方向で実装 nikawa2161 13
現状の課題 ロールバック機構がない users テーブル作成に失敗した場合 auth.users はそのまま残る データの不整合が発生する可能性 nikawa2161 14
今後の改善案 1. エラーハンドリング強化 ファンクション内でエラーをキャッチ ロールバック対応 2. リトライ機構 失敗時に自動再試行の検討 3. 監視・アラート
不整合検知の仕組み nikawa2161 15
まとめ やったこと Supabase Auth を認証基盤に選定 auth.users と users の自動連携 認証処理をパッケージ化
現状の課題 ロールバック機構がない エラー時のデータ不整合リスク 今後の方針 まずは動くものを優先 課題は運用しながら改善 nikawa2161 16