CR-FASTAPI-028: RunView API Projection - 完了レポート
実装日時
2025年12月22日
概要
目的
RunState ベースの RunView 投影 API を FastAPI で実装する。 外部 API は RunView のみを返し、RunState の生 JSON を公開しない。
ゴール
- RunView API エンドポイントの実装
- RunState の生 JSON 露出を禁止
- 認証必須の実装
- HTTP ステータスコード(409 / 400 等)の正しい返却
- CONFLICT / FAILED / ABORTED 時に Explainability を返す
原則
- 外部 API は RunView のみを返す
- RunState の raw JSON を返さない
- 認証は
Depends(get_current_user)を使用 - エラーハンドリングは統一された形式を使用
実装ステップ
Step 1: RunView スキーマの作成
新規作成ファイル:
src/nexuscore/api/schemas/run_view.pyExplainabilityModel: Explainability 投影モデルRunViewResponse: RunView 投影レスポンスモデルRunCreateRequest: Run 作成リクエストモデル
Step 2: RunView API ルータの実装
新規作成ファイル:
src/nexuscore/api/routes/run_view.pyGET /api/v1/run-view/runs/{run_id}: RunView 取得POST /api/v1/run-view/runs/{run_id}/resume: Run 再開POST /api/v1/run-view/runs: Run 作成
実装内容:
- RunState から RunView への投影ロジック
- HTTP ステータスコードのマッピング(CONFLICT → 409, FAILED/ABORTED → 400)
- Explainability の必須化(CONFLICT, FAILED, ABORTED 時)
Step 3: FastAPI アプリへのルータ登録
変更ファイル:
src/nexuscore/api/fastapi_app.py- RunView ルータを
/api/v1プレフィックスでマウント
- RunView ルータを
Step 4: テストの作成
新規作成ファイル:
tests/api/test_fastapi_run_view.py- RunView API の正常系・異常系テスト
変更ファイル一覧
新規作成ファイル
src/nexuscore/api/schemas/run_view.py- RunView API 用の Pydantic スキーマsrc/nexuscore/api/routes/run_view.py- RunView ルータの実装tests/api/test_fastapi_run_view.py- RunView API エンドポイントのテスト
変更ファイル
src/nexuscore/api/fastapi_app.py- RunView ルータの登録
動作確認結果
静的解析結果
- リンターエラー: なし
- 型チェック: 問題なし
テスト結果
実行コマンド:
bash dev_tools/run_tests.sh tests/api/test_fastapi_run_view.py
結果:
- RunView API テスト: 8個のテストケース
- すべてのテストが正常に通過
確認項目:
- ✅
/api/v1/run-view/runs/{run_id}GET が 200 を返す - ✅
/api/v1/run-view/runs/{run_id}/resumePOST が 409 (CONFLICT) を返す - ✅
/api/v1/run-view/runs/{run_id}/resumePOST が 400 (FAILED/ABORTED) を返す - ✅ RunState の raw JSON を返さない
- ✅ Explainability が CONFLICT / FAILED / ABORTED 時に含まれる
コードレビュー結果
- ✅
.cursorrulesのルールに準拠 - ✅ RunState の raw JSON を公開しない
- ✅ 認証必須の実装
- ✅ 統一されたエラーハンドリング
設計上の改善点
アーキテクチャの改善
- RunView 投影の分離
- RunState と RunView の責務分離
- 外部 API と内部実装の分離
- Explainability の必須化
- CONFLICT / FAILED / ABORTED 時に Explainability を返す
- ユーザーに次のアクションを提示
将来の拡張性への配慮
- RunView スキーマの拡張が容易
- Explainability モデルの拡張が可能
既知の制約・注意事項
既存コードとの互換性
- ✅ Contract Layer の変更なし
- ✅ Runner の挙動変更なし
- ✅ CLI 経路への影響なし
制限事項やトレードオフ
- RunView は RunState の投影であり、完全な情報を含まない
- RunState の raw JSON へのアクセスは外部 API 経由では不可能
次のステップ
推奨されるフォローアップアクション
- Orchestrator DI の導入(CR-FASTAPI-029)
- API 経路で request-scoped Orchestrator DI を導入
- グローバル状態への依存を排除
- RunView スキーマの拡張
- 必要に応じて RunView スキーマを拡張
関連ドキュメント
まとめ
CR-FASTAPI-028 の実装により、RunState ベースの RunView 投影 API が完成しました。外部 API は RunView のみを返し、RunState の生 JSON を公開しない設計を実現しました。すべてのテストが成功し、.cursorrules のルールに準拠した実装が完了しています。