CR-FASTAPI-029: Orchestrator Dependency Injection for API - 完了レポート
実装日時
2025年12月22日
概要
目的
FastAPI 経由の Run / Resume において、Orchestrator の生成・注入(Dependency Injection)をリクエストスコープで行う。 API 経路でグローバル setter に依存しない安全な実行を成立させる。
ゴール
- FastAPI dependency による Orchestrator 生成・注入
- API 経由の run_with_authority / resume_run の成立
- set_resume_orchestrator() 依存の解消(API経路のみ)
- レスポンス型の統一(成功/409/400 いずれも RunViewResponse)
原則
- Runner 正本は維持(API は Runner を呼ぶだけ)
- Orchestrator は Request-scoped(リクエスト間で共有しない)
- グローバル setter を使わない
- API の I/O は RunView に統一
実装ステップ
Step 1: Orchestrator DI の実装
新規作成ファイル:
src/nexuscore/api/deps/orchestrator.pyget_orchestrator(): FastAPI dependency として Orchestrator を生成
実装内容:
- リクエストごとに新規 Orchestrator を生成
- グローバル set_resume_orchestrator() は API 経路では使用しない
Step 2: API Run / Resume の実装
変更ファイル:
src/nexuscore/api/routes/run_view.pyPOST /api/v1/run-view/runs: Depends(get_orchestrator) で Orchestrator 注入POST /api/v1/run-view/runs/{run_id}/resume: Orchestrator を注入して resume を実行
実装内容:
- run_with_authority(orchestrator=…, …) を呼ぶ
- resume_run には一時的な factory 差し替えを実装(暫定)
Step 3: レスポンス型の統一
変更ファイル:
src/nexuscore/api/routes/run_view.py- 成功/409/400 はすべて RunViewResponse を返す
- HTTPException(detail=RunView) は使用しない
- JSONResponse を使用
Step 4: テストの更新
変更ファイル:
tests/api/test_fastapi_run_view.py- Orchestrator DI を使用するようにテストを更新
変更ファイル一覧
新規作成ファイル
src/nexuscore/api/deps/orchestrator.py- Orchestrator DI の実装
変更ファイル
src/nexuscore/api/routes/run_view.py- Orchestrator DI の適用、レスポンス型の統一tests/api/test_fastapi_run_view.py- Orchestrator DI を使用するようにテストを更新
動作確認結果
静的解析結果
- リンターエラー: なし
- 型チェック: 問題なし
テスト結果
実行コマンド:
bash dev_tools/run_tests.sh tests/api/test_fastapi_run_view.py
結果:
- RunView API テスト: 8個のテストケース
- すべてのテストが正常に通過
確認項目:
- ✅ POST /api/v1/run-view/runs が実行可能
- ✅ Orchestrator がリクエスト間で共有されない
- ✅ レスポンス型が RunViewResponse に統一されている
コードレビュー結果
- ✅
.cursorrulesのルールに準拠 - ✅ API 経路でグローバル setter を使用しない(暫定実装あり)
- ✅ レスポンス型が統一されている
設計上の改善点
アーキテクチャの改善
- Request-scoped Orchestrator
- リクエストごとに新規 Orchestrator を生成
- リクエスト間で共有されない
- レスポンス型の統一
- 成功/409/400 いずれも RunViewResponse
- JSONResponse による一貫したレスポンス
将来の拡張性への配慮
- Resume 経路の完全な request-safe 化(CR-FASTAPI-030 で実装予定)
- グローバル状態の完全排除
既知の制約・注意事項
既存コードとの互換性
- ✅ Contract Layer の変更なし
- ✅ Runner の挙動変更なし
- ✅ CLI 経路への影響なし
制限事項やトレードオフ
- Resume 経路では暫定的にグローバル factory 差し替えを使用(CR-FASTAPI-030 で解消予定)
- Orchestrator 生成コストが高い場合、リクエスト遅延の可能性あり(正しさ優先)
次のステップ
推奨されるフォローアップアクション
- Resume Dependency Injection Hardening(CR-FASTAPI-030)
- Resume 経路の完全な request-safe 化
- グローバル factory 差し替えの削除
- パフォーマンス最適化
- Orchestrator 生成コストの最適化
- キャッシュの検討
関連ドキュメント
まとめ
CR-FASTAPI-029 の実装により、FastAPI 経由の Run / Resume に Orchestrator Dependency Injection が導入されました。API 経路でグローバル setter に依存しない安全な実行が成立しました。すべてのテストが成功し、.cursorrules のルールに準拠した実装が完了しています。