$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
「アプリ」認証追加
Search
nikawa2161
November 25, 2025
0
2
「アプリ」認証追加
nikawa2161
November 25, 2025
Tweet
Share
More Decks by nikawa2161
See All by nikawa2161
UNIX哲学
nikawa2161
0
2
マッチング
nikawa2161
0
3
自己肯定感
nikawa2161
0
3
問題・解決空間
nikawa2161
0
2
コンパイルの違い
nikawa2161
0
4
error-marp.pdf
nikawa2161
0
5
difit
nikawa2161
0
63
フロントのキャッシュ
nikawa2161
0
6
Dia
nikawa2161
0
3
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
KATA
mclloyd
PRO
33
15k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
120
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
290
Speed Design
sergeychernyshev
33
1.4k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
390
Docker and Python
trallard
47
3.7k
Being A Developer After 40
akosma
91
590k
The SEO Collaboration Effect
kristinabergwall1
0
300
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Making Projects Easy
brettharned
120
6.5k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
250
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