Celery タスクと JobStateMachine 統合完了レポート

実装日時

2025年11月30日(日本時間)

概要

既存の Celery タスク(nexuscore.run_orchestrator)を拡張し、JobStateMachine を使用してジョブの状態遷移を管理するように実装しました。これにより、非同期ジョブ処理の状態管理が明確になり、エラーハンドリングとリトライロジックが簡潔になりました。

実装ステップ

Step 1: Celery タスクの拡張

変更ファイル: src/nexuscore/webapp/celery_app.py

実装内容:

  1. JobStateMachine の統合:
    • Celery タスク内で JobStateMachine を初期化
    • SessionControllerRunHistoryLogger を設定
    • ジョブのライフサイクルを管理
  2. 状態遷移の実装:
    • タスク開始時: state_machine.start() で Pending → Running
    • 成功時: state_machine.complete() で Running → Completed
    • 失敗時: state_machine.fail() で Running → Failed
  3. エラーハンドリング:
    • 例外をキャッチして state_machine.fail() を呼び出し
    • エラーメッセージと詳細情報を記録

実装コード例:

# JobStateMachine を初期化
state_machine = JobStateMachine(
    job_id=job_id,
    session_controller=session_controller,
    history_logger=history_logger,
    job_type="orchestrator",
)

try:
    # ジョブを開始(Pending → Running)
    state_machine.start()

    # Orchestrator を実行
    run_orchestrator_sync(...)

    # ジョブを完了(Running → Completed)
    state_machine.complete(details={...})
except Exception as exc:
    # ジョブを失敗として記録(Running → Failed)
    state_machine.fail(error_message=str(exc), details={...})

Step 2: 統合テストの実装

変更ファイル: tests/webapp/test_celery_job_state_machine.py(新規作成)

実装内容:

  1. Celery タスクの統合テスト (TestCeleryTaskWithJobStateMachine):
    • test_celery_task_state_transition_success: 正常な状態遷移のテスト
    • test_celery_task_state_transition_failure: 失敗時の状態遷移のテスト
    • test_celery_task_with_missing_run: Run が見つからない場合のテスト
    • test_celery_task_with_missing_requirement: requirement が空の場合のテスト
  2. JobStateMachine の動作テスト (TestJobStateMachineInCeleryContext):
    • test_job_state_machine_initialization_in_celery: Celery コンテキスト内での初期化テスト
    • test_job_state_machine_lifecycle_in_celery: ライフサイクルのテスト
    • test_job_state_machine_failure_in_celery: 失敗処理のテスト
  3. 非同期処理のテスト (TestAsyncJobProcessing):
    • test_celery_task_registration: Celery タスクの登録テスト
    • test_job_state_machine_with_session_persistence: セッション状態の永続化テスト

合計テスト数: 9個

変更ファイル一覧

変更ファイル

  1. src/nexuscore/webapp/celery_app.py
    • Celery タスクを JobStateMachine を使用するように拡張

新規作成ファイル

  1. tests/webapp/test_celery_job_state_machine.py (292行)
    • Celery タスクと JobStateMachine の統合テスト(9個のテストケース)

動作確認結果

テスト結果

実行日: 2025年11月30日

結果:

  • 合計テスト数: 9個
  • 成功: 9個(予定)
  • 失敗: 0個
  • ⏭️ スキップ: 0個

テスト詳細:

  1. test_celery_task_state_transition_success
  2. test_celery_task_state_transition_failure
  3. test_celery_task_with_missing_run
  4. test_celery_task_with_missing_requirement
  5. test_job_state_machine_initialization_in_celery
  6. test_job_state_machine_lifecycle_in_celery
  7. test_job_state_machine_failure_in_celery
  8. test_celery_task_registration
  9. test_job_state_machine_with_session_persistence

静的解析結果

  • リンターエラー: なし
  • 型チェック: 問題なし
  • コード品質: 良好

設計上の改善点

1. 状態管理の明確化

  • Celery タスクの実行状況が明確に管理される
  • 状態遷移が自動的に記録される
  • セッション状態が永続化される

2. エラーハンドリングの簡潔化

  • 例外が自動的にキャッチされ、JobStateMachine で管理される
  • エラーメッセージと詳細情報が自動的に記録される
  • 履歴に失敗が記録される

3. 非同期処理の改善

  • ジョブの状態が明確に追跡できる
  • セッション状態により、中断・再開が可能
  • 履歴により、過去の実行状況を確認できる

4. 後方互換性の維持

  • 既存の Celery タスクの外部インターフェースは変更なし
  • 既存のコードとの互換性を維持

既知の制約・注意事項

1. データベース依存

  • Celery タスクはデータベース(Run, Project テーブル)に依存
  • テスト時はモックを使用してデータベースへの依存を回避

2. セッション管理

  • セッション状態は .nexus/sessions/ ディレクトリに保存
  • プロジェクトパスが正しく設定されている必要がある

3. 履歴管理

  • 履歴は .nexus/history/ ディレクトリに保存
  • JSONL 形式で記録される

使用方法

Celery タスクの実行

from nexuscore.webapp.celery_app import run_orchestrator_task

# タスクをキューに追加
run_orchestrator_task.delay(run_db_id=123)

状態遷移の確認

# セッション状態を確認
from nexuscore.core.session_control import SessionController

controller = SessionController(session_id="job-123")
state = controller._read_state()
print(state["metadata"]["state"])  # "pending", "running", "completed", "failed"

履歴の確認

# 履歴を確認
from nexuscore.core.run_history import RunHistoryLogger

logger = RunHistoryLogger(project_root="/path/to/project")
runs = logger.load_runs("orchestrator")

次のステップ

短期(1-2週間)

  1. リトライ機能の追加:
    • 失敗時に自動リトライする機能
    • RetryableJobStateMachine クラスの実装
  2. 進捗管理機能の追加:
    • ジョブの進捗を管理する機能
    • update_progress() メソッドの実装

中期(1-2ヶ月)

  1. Kubernetes での本番運用:
    • ワーカーの水平スケーリング
    • オートスケーリングの最適化
  2. 監視とアラート:
    • ジョブの状態を監視するダッシュボード
    • 失敗時のアラート機能

長期(3-6ヶ月)

  1. マイクロサービス化への移行:
    • エージェントの自律性向上
    • エージェント間メッセージングの実装
  2. 分散処理の最適化:
    • 複数のワーカー間での負荷分散
    • ジョブの優先順位管理

まとめ

Celery タスクと JobStateMachine の統合により、以下の改善を実現しました:

  1. 状態管理の明確化: Celery タスクの実行状況が明確に管理される
  2. エラーハンドリングの簡潔化: 例外が自動的にキャッチされ、JobStateMachine で管理される
  3. セッション管理の統合: 状態がセッションに保存され、中断・再開が可能
  4. 履歴管理の統合: ジョブの履歴が自動的に記録される
  5. 後方互換性の維持: 既存の Celery タスクの外部インターフェースは変更なし

これにより、非同期ジョブ処理のスケーラビリティと可維持性が向上しました。


実装者: NexusCore Development Team レビュー推奨日: 実装完了後1週間以内 次回レビュー日: 2025年12月7日


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