CR-006-1: Orchestrator のフェーズ分割と Happy Path テスト追加 - 完了レポート
実装日時
2025-01-XX
概要
Orchestrator の run_full_project() メソッドをフェーズ別メソッドに分割し、実行順序を明確化しました。また、Happy Path(正常系フロー)を検証するテストを追加しました。
目的
- 「要件→計画→設計→実装→テスト→レビュー」という一連の流れを、コード構造として明示的な「フェーズ」として切り出す
- Orchestrator の “Happy Path”(正常系フロー)を pytest で検証できる状態にする
- 既存の公開 API シグネチャを維持しつつ、内部構造を改善する
原則
- 既存の
run_full_project()のシグネチャは変更しない(後方互換性100%) - フェーズごとに責務を明確に分離
- FastLane モードの並列実行機能を維持
- テストはモックベースで、実際の LLM 呼び出しは行わない
実装ステップ
Step 1: OrchestratorPhase Enum の追加
OrchestratorPhaseEnum を追加し、6つのフェーズ(REQUIREMENTS, PLAN, ARCHITECTURE, IMPLEMENTATION, TESTING, REVIEW)を定義- フェーズの順序を明示的に表現
Step 2: OrchestratorContext データクラスの追加
- フェーズ間で状態を引き継ぐための
OrchestratorContextdataclass を追加 - 各フェーズの出力(specs, plan, architecture, implementation, testing, review)を保持
- テスト用の
phase_logフィールドを追加
Step 3: フェーズ別メソッドの抽出
以下の6つのフェーズ別メソッドを追加:
run_requirements_phase(): Requirement Definition フェーズrun_planning_phase(): Planning フェーズ(FastLane の場合は並列実行)run_architecture_phase(): Architecture フェーズ(将来拡張用)run_implementation_phase(): Implementation (Coding) フェーズrun_testing_phase(): Testing フェーズrun_review_phase(): Review フェーズ(将来拡張用)
各メソッドは OrchestratorContext を受け取り、更新して返す。
Step 4: run_full_project() の簡素化
- 既存の大量のネストしたコードを削除
- 各フェーズメソッドを順番に呼び出すだけの構造に変更
- フェーズの実行順序が一目で分かるように改善
Step 5: Happy Path テストの追加
tests/nexuscore/core/test_orchestrator_happy_path.py を新規作成し、以下のテストを追加:
test_run_full_project_calls_phases_in_order: フェーズが期待順序で呼ばれることを確認test_each_phase_receives_and_returns_context: コンテキストの受け渡しが正しく行われることを確認test_requirements_phase_updates_context: Requirements フェーズがコンテキストを更新することを確認test_planning_phase_updates_context: Planning フェーズがコンテキストを更新することを確認test_architecture_phase_updates_context: Architecture フェーズがコンテキストを更新することを確認test_implementation_phase_updates_context: Implementation フェーズがコンテキストを更新することを確認test_testing_phase_updates_context: Testing フェーズがコンテキストを更新することを確認test_review_phase_updates_context: Review フェーズがコンテキストを更新することを確認test_fast_lane_mode_executes_planning_code_test_in_parallel: FastLane モードで並列実行されることを確認test_orchestrator_context_dataclass: OrchestratorContext データクラスの動作確認test_orchestrator_phase_enum: OrchestratorPhase Enum の動作確認
変更ファイル一覧
新規作成ファイル
tests/nexuscore/core/test_orchestrator_happy_path.py: Happy Path テストファイル(296行)
変更ファイル
src/nexuscore/core/orchestrator.py:OrchestratorPhaseEnum を追加(6つのフェーズ)OrchestratorContextdataclass を追加- 6つのフェーズ別メソッドを追加
run_full_project()を簡素化(約200行削減)
動作確認結果
静的解析結果
- リンターエラー: なし
- 型チェッカー: エラーなし
テスト結果
- テストファイル:
tests/nexuscore/core/test_orchestrator_happy_path.py - テストケース数: 11件
- テスト実行コマンド:
pytest tests/nexuscore/core/test_orchestrator_happy_path.py -v
コードレビュー結果
- 既存の
run_full_project()シグネチャを維持(後方互換性100%) - FastLane モードの並列実行機能を維持
- フェーズごとに責務を明確に分離
- 例外処理を各フェーズ内で適切に処理
設計上の改善点
アーキテクチャの改善
- フェーズの明確化: 開発フローの各フェーズがコード構造として明示的に表現されるようになった
- 責務の分離: 各フェーズの処理が独立したメソッドに分離され、保守性が向上
- テスト容易性の向上: フェーズごとにテスト可能になり、Happy Path の検証が容易に
将来の拡張性への配慮
- Architecture / Review フェーズ: 将来拡張用のプレースホルダーを追加
- OrchestratorContext: フェーズ間の状態管理が構造化され、新しいフェーズの追加が容易
- フェーズ Enum: 新しいフェーズの追加が容易
コード品質の向上
- 可読性:
run_full_project()が簡潔になり、フェーズの実行順序が一目で分かる - 保守性: 各フェーズの処理が独立したメソッドに分離され、変更の影響範囲が明確
- テスト容易性: モックベースのテストにより、実際の LLM 呼び出しなしで正常系フローを検証可能
既知の制約・注意事項
既存コードとの互換性
run_full_project()の公開 API シグネチャは変更していないため、既存の呼び出し側(CLI / API / Gradio UI)に影響なし- FastLane モードの動作は維持されている
制限事項やトレードオフ
- Architecture / Review フェーズは現在空の実装(将来拡張用)
- FastLane モードの場合、Planning フェーズで Implementation と Testing も並列実行されるため、これらのフェーズはスキップされる
移行時の注意点
- 既存のコードは変更不要(後方互換性100%)
- 新しいフェーズメソッドは内部実装の改善であり、外部から直接呼び出す必要はない
次のステップ
推奨されるフォローアップアクション
- Architecture フェーズの実装: 現在空の実装を、実際のアーキテクチャ設計ロジックで実装
- Review フェーズの実装: 現在空の実装を、実際のコードレビューロジックで実装
- エラーハンドリングの強化: 各フェーズでのエラーハンドリングをより詳細に実装
- 統合テストの追加: 実際のエージェントを使用した統合テストの追加を検討
- パフォーマンステスト: FastLane モードの並列実行の効果を測定するテストの追加
関連するタスク
- CR-006-2(予定): Architecture / Review フェーズの実装
- CR-006-3(予定): エラーハンドリングの強化
- CR-006-4(予定): 統合テストの追加