メインコンテンツまでスキップ
バージョン: design-archive

エラー処理設計

本システムにおけるエラー処理は、ユーザーエクスペリエンスの維持、システムの安定性確保、および問題の早期発見・解決を目的として設計される。

1. エラー分類​

システム内で発生するエラーを以下のカテゴリに分類し、それぞれに応じた処理を行う。

  • 入力検証エラー: ユーザーからの入力データが不正な形式、または制約を満たさない場合に発生。
  • 認証・認可エラー: ユーザーの認証情報が不正、またはリソースへのアクセス権限がない場合に発生。
  • ビジネスロジックエラー: 業務処理中に発生する予期されたエラー(例: グラフデータが見つからない)。
  • 外部サービス連携エラー: LLM API、データベース、メッセージブローカーなど、外部サービスとの通信中に発生するエラー。
  • システム内部エラー: 予期せぬ例外、バグ、リソース不足など、システム内部で発生するエラー。

2. エラー処理の原則​

  • ユーザーへの適切なフィードバック: フロントエンドは、ユーザーに分かりやすいエラーメッセージを表示し、必要に応じて対処方法を提示する。
  • 機密情報の非公開: エラーメッセージには、スタックトレースやデータベース情報など、システム内部の機密情報を決して含めない。
  • ログ記録: すべてのエラーは適切にログに記録され、問題の追跡と分析に利用できるようにする。
  • 回復性: 可能な限り、エラー発生後もシステムが正常な状態に回復できるよう設計する。
  • 冪等性: 再試行可能な操作においては、エラー発生時の再試行がシステムの整合性を損なわないように考慮する。

3. エラー処理フロー​

3.1. フロントエンド​

  • バックエンドからのエラーレスポンスを捕捉し、ユーザーフレンドリーなメッセージに変換して表示する。
  • ネットワークエラーやタイムアウトなど、クライアントサイドで発生するエラーも適切に処理する。

3.2. バックエンド (FastAPI)​

  • 入力検証: Pydanticモデルによる自動検証を活用し、不正なリクエストを早期に拒否する。HTTPValidationErrorを捕捉し、標準的なエラーレスポンスを返す。
  • 例外ハンドリング: カスタム例外を定義し、@app.exception_handlerデコレーターを用いて一元的に処理する。
  • データベースエラー: データベース操作中に発生するエラー(例: 接続エラー、制約違反)は、適切な例外に変換し、ビジネスロジック層で捕捉・処理する。
  • 外部サービスエラー: LLM APIやCeleryタスクの呼び出し時に発生するエラーは、リトライメカニズムを導入し、一定回数失敗した場合はエラーとして処理する。
  • WebSocketエラー: WebSocket接続中に発生するエラーは、接続を安全にクローズし、必要に応じてクライアントにエラーメッセージを送信する。

4. エラーメッセージ​

  • HTTPステータスコード: エラーの種類に応じて適切なHTTPステータスコード(例: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 500 Internal Server Error)を返す。
  • エラーレスポンスボディ: 標準的なJSON形式でエラー詳細を提供する。
    {
    "detail": "エラーメッセージ",
    "code": "エラーコード (オプション)"
    }

5. ログ記録​

  • エラー発生時には、エラーレベル、タイムスタンプ、発生箇所、スタックトレース、関連するリクエスト情報などをログに記録する。
  • ログは集中ログ管理システム(例: Cloud Logging)に送信され、分析・監視に利用される。