コンテンツにスキップ
X

Level 8: Orchestrator — 並列エージェントを指揮する

複数の独立した機能を同時に実装したいとき、順番に実装するより並列で進めた方が大幅に速くなります。オーケストレーターパターンを使うと、Claude(または自作スクリプト)が指揮者となって複数のスペシャリストエージェントを並列実行し、結果を統合できます。

対象読者: ヘッドレス自動化を使いこなしており、さらに処理速度とスケールを求める方。

学習時間の目安: 読了 30分 + 実践 50分


オーケストレーターパターンとは

Section titled “オーケストレーターパターンとは”

オーケストレーターパターンは「指揮者(オーケストレーター)」が複数の「専門家(スペシャリスト)」を管理する構造です。

オーケストレーター(指揮者)
    ├── スペシャリスト A: 機能 1 の実装
    ├── スペシャリスト B: 機能 2 の実装
    └── スペシャリスト C: 機能 3 の実装

各スペシャリストは独立したタスクを担当し、互いの依存なく並列で作業します。オーケストレーターはすべての完了を待ってから結果を統合します。

シェルスクリプトで並列実行する方法

Section titled “シェルスクリプトで並列実行する方法”

& でバックグラウンド実行し、wait ですべての完了を待ちます。

#!/bin/bash
# 複数タスクを並列実行するシンプルな例

# タスク A をバックグラウンドで実行
(
  claude --print --dangerously-skip-permissions "タスク A を実行してください" \
    > /tmp/result_a.txt 2>&1
  echo "タスク A 完了"
) &
PID_A=$!

# タスク B をバックグラウンドで実行
(
  claude --print --dangerously-skip-permissions "タスク B を実行してください" \
    > /tmp/result_b.txt 2>&1
  echo "タスク B 完了"
) &
PID_B=$!

# タスク C をバックグラウンドで実行
(
  claude --print --dangerously-skip-permissions "タスク C を実行してください" \
    > /tmp/result_c.txt 2>&1
  echo "タスク C 完了"
) &
PID_C=$!

# すべてのプロセスの完了を待つ
wait $PID_A $PID_B $PID_C

echo "=== 全タスク完了 ==="
cat /tmp/result_a.txt
cat /tmp/result_b.txt
cat /tmp/result_c.txt

$! は直前に起動したバックグラウンドプロセスの PID を保持する変数です。wait に複数の PID を渡すことで、指定したプロセスがすべて終了するまで待機します。

Git worktree を使うと、1 つのリポジトリに対して複数のブランチを別々のディレクトリに同時にチェックアウトできます。

# ブランチを別ディレクトリに展開する
git worktree add ../project-feature-a feature/feature-a
git worktree add ../project-feature-b feature/feature-b
git worktree add ../project-feature-c feature/feature-c

# それぞれのディレクトリで独立して作業できる
ls ../project-feature-a  # feature/feature-a ブランチの内容
ls ../project-feature-b  # feature/feature-b ブランチの内容

# 作業が終わったら worktree を削除する
git worktree remove ../project-feature-a
git worktree remove ../project-feature-b
git worktree remove ../project-feature-c

通常のブランチ切り替え(git checkout)では同じディレクトリを共有するためファイルが上書きされますが、worktree を使えば複数ブランチを同時に展開して並列作業できます。

Claude 自身をオーケストレーターとして使う方法

Section titled “Claude 自身をオーケストレーターとして使う方法”

Claude に直接「複数のロールを切り替えながら並行して実行してください」と指示することで、Claude 自身がオーケストレーターとして動作します。

> 以下の3タスクを並行して実行してください。
>
> タスク 1(API 設計の専門家として):
> Python + FastAPI で /users エンドポイントの CRUD を設計・実装する。
>
> タスク 2(テストエンジニアとして):
> 上記 API の pytest によるテストコードを作成する。
>
> タスク 3(ドキュメント担当として):
> OpenAPI 仕様を Markdown で記述する。
>
> 各タスクが完了したら統合レポートをまとめてください。

Claude はそれぞれのロールで独立した出力を生成し、最後に統合します。

大規模コードベースの並列分析例

Section titled “大規模コードベースの並列分析例”

大きなコードベースを複数の視点から同時に分析するスクリプトです。

#!/bin/bash
# scripts/parallel_analysis.sh
# コードベースを複数の視点で並列分析する

REPO_PATH=${1:-"."}

echo "=== 並列コード分析を開始 ==="

# セキュリティ分析
(
  find "$REPO_PATH/src" -name "*.py" | head -20 | xargs cat | \
  claude --print "このコードのセキュリティ上の問題を列挙してください。" \
    > /tmp/analysis_security.txt 2>&1
) &

# パフォーマンス分析
(
  find "$REPO_PATH/src" -name "*.py" | head -20 | xargs cat | \
  claude --print "このコードのパフォーマンス上の問題を列挙してください。" \
    > /tmp/analysis_performance.txt 2>&1
) &

# テストカバレッジ分析
(
  find "$REPO_PATH" -name "*.py" | xargs grep -l "def test_" | head -10 | xargs cat | \
  claude --print "テストの網羅性を評価し、不足しているテストケースを提案してください。" \
    > /tmp/analysis_tests.txt 2>&1
) &

# 全プロセスの完了を待つ
wait

echo ""
echo "=== セキュリティ分析結果 ==="
cat /tmp/analysis_security.txt

echo ""
echo "=== パフォーマンス分析結果 ==="
cat /tmp/analysis_performance.txt

echo ""
echo "=== テストカバレッジ分析結果 ==="
cat /tmp/analysis_tests.txt

Q. 並列実行するタスクはどう選ぶ?

タスク間に依存関係(A の完了が B の前提)がある場合は並列にできません。互いに独立したタスク、または異なるディレクトリ・ファイルを扱うタスクが並列化に適しています。

Q. worktree で作業した後、元のリポジトリに影響は出ますか?

worktree は同じリポジトリの .git を共有しますが、ファイルシステム上は別ディレクトリです。git worktree remove で削除すれば元のリポジトリへの影響はありません。


このレベルの実践チュートリアル →

並列エージェントの指揮と Git worktree を使った並列開発を理解しました。次は GitHub Actions と cron を組み合わせた 24/7 常時稼働のバックグラウンドジョブを学びます。

Level 9: Infrastructure Operator — 24/7 バックグラウンドジョブ へ進みましょう。