Skip to content

OAuth認証エラーハンドリング基盤の実装(Phase 1)#356

Closed
gn-t-k wants to merge 1 commit intomainfrom
feat/oauth-error-handling-phase1
Closed

OAuth認証エラーハンドリング基盤の実装(Phase 1)#356
gn-t-k wants to merge 1 commit intomainfrom
feat/oauth-error-handling-phase1

Conversation

@gn-t-k
Copy link
Owner

@gn-t-k gn-t-k commented Nov 19, 2025

概要

OAuth認証のエラーハンドリング基盤を実装しました(Phase 1)。

実装内容

1. エラー型定義 (packages/authentication/src/errors.ts)

  • @praha/error-factoryを使用したカスタムエラークラス
  • エラーカテゴリ分類:
    • UserOperationError: ユーザー操作系(UIフィードバック必要)
    • ServerError: サーバー・設定系(Sentry送信必要)

Phase 1で使用: SessionErrorのみ
Phase 2で使用予定: OAuthProviderError, OAuthCancelledError, NetworkError, DatabaseError, InvalidConfigurationError

2. Sentry送信ロジック (apps/web/src/lib/report-authentication-error.ts)

  • サーバー系エラーのみSentryに自動送信
  • エラーコンテキスト情報を付与(name, message, cause)

3. Server Actionへの適用

  • sign-outアクションに@praha/byethrowのResult型を適用
  • エラーハンドリングフロー:
    1. Result.try()でエラーをキャッチ
    2. Result.isFailure()でチェック
    3. サーバー系エラーの場合はSentry送信
    4. エラーをthrowしてクライアント側でハンドリング可能に

設計判断

責務の分離

  • packages/authentication: エラー型定義のみ(@praha/error-factoryのみ使用)
  • apps/web: エラーハンドリング実装(@praha/byethrowを使用)、Sentry送信

これにより、認証パッケージがフレームワークに依存せず、再利用性が向上します。

Result型の使い方

redirect()はエラーをthrowするため、Server ActionからResult型を直接返すことはできません。
代わりに以下のパターンを採用:

  • エラー時: Sentry送信 → throw(クライアント側でキャッチ可能)
  • 成功時: redirect()を実行

次のステップ(Phase 2)

Phase 2では以下を実装予定:

  1. UIエラー表示コンポーネント
  2. エラーメッセージマッピング(UI側の責務)
  3. Google OAuth認証のServer Action化
  4. エラーケースのテスト

詳細は apps/web/docs/oauth-error-handling-handoff.md を参照してください(コミット対象外のため、ローカルで確認可能)。

チェックリスト

  • 型チェック通過
  • Lint通過
  • ビルド成功
  • 責務分離の設計確認
  • Phase 2への申し送り書作成

🤖 Generated with Claude Code

## 実装内容

### エラー型定義
- @praha/error-factoryを使用したカスタムエラークラス定義
- エラーカテゴリ分類(UserOperationError / ServerError)
- Phase 1ではSessionErrorのみ使用、他はPhase 2で使用予定

### Sentry送信ロジック
- apps/web側でサーバー系エラーのみSentryに送信
- エラーコンテキスト情報を付与

### Server Actionへの適用
- sign-outアクションにResult型を適用
- @praha/byethrowを使用したエラーハンドリング

## 設計判断

- packages/authentication: エラー型定義のみ(@praha/error-factory)
- apps/web: エラーハンドリング実装(@praha/byethrow)、Sentry送信
- 責務を明確に分離し、認証パッケージはフレームワークに依存しない

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@gn-t-k gn-t-k closed this Nov 19, 2025
@gn-t-k gn-t-k deleted the feat/oauth-error-handling-phase1 branch November 19, 2025 12:55
@github-actions
Copy link
Contributor

🗑️ Preview Environment Cleaned Up

✅ プレビュー環境をクリーンアップしました!

Database Name: preview-pr356-auth

PRがクローズされたため、関連するデータベースとVercel環境変数を自動的に削除しました。

@github-actions
Copy link
Contributor

🚀 Preview Environment Ready

✅ プレビュー環境のセットアップが完了しました!

🗄️ Database

Name: preview-pr356-auth
URL:

🌐 Deployment

Preview URL: https://next-lift-efs4s1eqm-gntks-projects.vercel.app

⚠️ このデータベースとデプロイメントはPRがクローズされると自動的に削除されます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant