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 の追加

  • OrchestratorPhase Enum を追加し、6つのフェーズ(REQUIREMENTS, PLAN, ARCHITECTURE, IMPLEMENTATION, TESTING, REVIEW)を定義
  • フェーズの順序を明示的に表現

Step 2: OrchestratorContext データクラスの追加

  • フェーズ間で状態を引き継ぐための OrchestratorContext dataclass を追加
  • 各フェーズの出力(specs, plan, architecture, implementation, testing, review)を保持
  • テスト用の phase_log フィールドを追加

Step 3: フェーズ別メソッドの抽出

以下の6つのフェーズ別メソッドを追加:

  1. run_requirements_phase(): Requirement Definition フェーズ
  2. run_planning_phase(): Planning フェーズ(FastLane の場合は並列実行)
  3. run_architecture_phase(): Architecture フェーズ(将来拡張用)
  4. run_implementation_phase(): Implementation (Coding) フェーズ
  5. run_testing_phase(): Testing フェーズ
  6. 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:
    • OrchestratorPhase Enum を追加(6つのフェーズ)
    • OrchestratorContext dataclass を追加
    • 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 モードの並列実行機能を維持
  • フェーズごとに責務を明確に分離
  • 例外処理を各フェーズ内で適切に処理

設計上の改善点

アーキテクチャの改善

  1. フェーズの明確化: 開発フローの各フェーズがコード構造として明示的に表現されるようになった
  2. 責務の分離: 各フェーズの処理が独立したメソッドに分離され、保守性が向上
  3. テスト容易性の向上: フェーズごとにテスト可能になり、Happy Path の検証が容易に

将来の拡張性への配慮

  1. Architecture / Review フェーズ: 将来拡張用のプレースホルダーを追加
  2. OrchestratorContext: フェーズ間の状態管理が構造化され、新しいフェーズの追加が容易
  3. フェーズ Enum: 新しいフェーズの追加が容易

コード品質の向上

  1. 可読性: run_full_project() が簡潔になり、フェーズの実行順序が一目で分かる
  2. 保守性: 各フェーズの処理が独立したメソッドに分離され、変更の影響範囲が明確
  3. テスト容易性: モックベースのテストにより、実際の LLM 呼び出しなしで正常系フローを検証可能

既知の制約・注意事項

既存コードとの互換性

  • run_full_project() の公開 API シグネチャは変更していないため、既存の呼び出し側(CLI / API / Gradio UI)に影響なし
  • FastLane モードの動作は維持されている

制限事項やトレードオフ

  • Architecture / Review フェーズは現在空の実装(将来拡張用)
  • FastLane モードの場合、Planning フェーズで Implementation と Testing も並列実行されるため、これらのフェーズはスキップされる

移行時の注意点

  • 既存のコードは変更不要(後方互換性100%)
  • 新しいフェーズメソッドは内部実装の改善であり、外部から直接呼び出す必要はない

次のステップ

推奨されるフォローアップアクション

  1. Architecture フェーズの実装: 現在空の実装を、実際のアーキテクチャ設計ロジックで実装
  2. Review フェーズの実装: 現在空の実装を、実際のコードレビューロジックで実装
  3. エラーハンドリングの強化: 各フェーズでのエラーハンドリングをより詳細に実装
  4. 統合テストの追加: 実際のエージェントを使用した統合テストの追加を検討
  5. パフォーマンステスト: FastLane モードの並列実行の効果を測定するテストの追加

関連するタスク

  • CR-006-2(予定): Architecture / Review フェーズの実装
  • CR-006-3(予定): エラーハンドリングの強化
  • CR-006-4(予定): 統合テストの追加

This site uses Just the Docs, a documentation theme for Jekyll.