AI News HubLIVE
サイト内リライト6 分で読了

Copilot CLIの/fleetで複数のエージェントを同時に実行する

GitHub Copilot CLIに/fleetが登場。複数のAIサブエージェントを並列で調整し、異なるファイルに対して同時に作業を行います。効果的なプロンプトの書き方、依存関係の宣言、よくある落とし穴について学びましょう。

ソースGitHub AI & ML著者: Matt Nigh

もしGitHub Copilot CLIが1つのファイルではなく、同時に5つのファイルに取り組めたらどうでしょう?それが/fleetの役割です。

/fleetはCopilot CLIのスラッシュコマンドで、Copilotが複数のサブエージェントと同時に並行して作業できるようにします。タスクを順番に処理する代わりに、Copilotは舞台裏でオーケストレーターを持ち、目標を計画し独立した作業項目に分解し、複数のエージェントを同時にディスパッチします。異なるファイル、コードベースの異なる部分に、一度に取り組みます。

/fleetの仕組み、そしてより重要なのは、それを最も効果的に使用する方法について学びたいですか?さっそく見ていきましょう。

仕組み

/fleetをプロンプトとともに実行すると、舞台裏のオーケストレーターは:

  • タスクを依存関係を持つ個別の作業項目に分解します。
  • どの項目が並行して実行でき、どれが待機する必要があるかを特定します。
  • 独立した項目をバックグラウンドサブエージェントとして同時にディスパッチします。
  • 完了をポーリングし、次の波をディスパッチします。
  • 出力を検証し、最終的な成果物を合成します。

各サブエージェントは独自のコンテキストウィンドウを持ちますが、同じファイルシステムを共有します。直接通信することはできず、オーケストレーターのみが調整を行います。

これは、プロジェクトリーダーがチームに作業を割り当て、進捗を確認し、最終成果物を組み立てるようなものです。

はじめ方

/fleetを送信してフリートモードを開始します。例:

/fleet authモジュールをリファクタリングし、テストを更新し、docs/auth/フォルダの関連ドキュメントを修正してください。

これだけです。オーケストレーターが目標を受け取り、並列化できる部分を特定し、ディスパッチを開始します。

端末で非対話的に実行することもできます:

copilot -p "/fleet " --no-ask-user

--no-ask-userフラグは非対話モードでは必須です。プロンプトに応答する方法がないためです。それでは、良いプロンプトとは何かを見ていきましょう。

並列化しやすいプロンプトを書く

/fleetプロンプトの品質は、作業がどの程度効果的に分散されるかを決定します。鍵は、オーケストレーターにタスクをきれいに分解するための十分な構造を与えることです。

そのための良い方法は、成果物を具体的に指定することです。各作業項目を、ファイル、テストスイート、ドキュメントセクションなどの具体的な成果物にマッピングします。曖昧なプロンプトは、オーケストレーターが独立した部分を特定できないため、順次実行につながります。

例えば、/fleet ドキュメントを作成する ではなく、次のように試してみてください:

/fleet APIモジュールのドキュメントを作成:

  • docs/authentication.md:トークンフローと例をカバー
  • docs/endpoints.md:すべてのRESTエンドポイントのリクエスト/レスポンススキーマ
  • docs/errors.md:エラーコードとトラブルシューティング手順
  • docs/index.md:3ページすべてにリンク(他のページの完了に依存)

2番目のプロンプトは、オーケストレーターに4つの異なる成果物を与え、そのうち3つは並行して実行でき、1つはそれらに依存します。

明示的な境界を設定する

サブエージェントは、自分のスコープの開始と終了を正確に把握しているときに最も効果的に機能します。プロンプトを書く際には、以下を含めます:

  • ファイルまたはモジュールの境界:各トラックが担当するディレクトリまたはファイル
  • 制約:触れてはいけないもの(例:テスト変更なし、依存関係アップグレードなし)
  • 検証基準:合格すべきlint、型チェック、テスト

以下は、これらの境界を示すプロンプトです:

/fleet 3つのトラックでフィーチャーフラグを実装:

  1. APIレイヤー:src/api/middleware/にフラグ評価を追加し、フラグ評価の成功をチェックするユニットテストとAPIエンドポイントのテストを含める
  2. UI:src/components/flags/にトグルコンポーネントを配線し、新しい依存関係を導入しない
  3. 設定:config/features.yamlにフラグ定義を追加し、スキーマに対して検証

独立したトラックは並行して実行。割り当てられたディレクトリ外の変更は禁止。

依存関係がある場合は宣言する

ある作業が別の作業に依存する場合は、そのように明示します。オーケストレーターはそれらの項目をシリアル化し、残りを並列化します。例:

/fleet データベースレイヤーを移行:

  1. migrations/005_users.sqlに新しいスキーマを書く
  2. src/models/user.tsのORMモデルを更新(1に依存)
  3. src/api/users.tsのAPIハンドラーを更新(2に依存)
  4. tests/users.test.tsに統合テストを書く(2に依存)

項目3と4は、項目2の完了後に並行して実行できます。

異なるジョブにカスタムエージェントを使用する

.github/agents/に特化したエージェントを定義し、/fleetプロンプトで参照できます。各エージェントは独自のモデル、ツール、指示を指定できます。使用するモデルを指定しない場合、エージェントは現在のデフォルトモデルを使用することに注意してください。

.github/agents/technical-writer.md

--- name: technical-writer description: ドキュメントスペシャリスト model: claude-sonnet-4 tools: ["bash", "create", "edit", "view"] --- あなたは明確で簡潔な技術ドキュメントを書きます。プロジェクトのスタイルガイド(/docs/styleguide.md)に従ってください。

そして、プロンプトでカスタムエージェントを参照します:

/fleet すべてのドキュメントタスクには@technical-writer.mdをエージェントとして使用し、コード変更にはデフォルトエージェントを使用してください。

これは、異なるトラックに異なる強みが必要な場合に役立ちます。複雑なロジックにはより重いモデルを、ボイラープレートのドキュメントには軽いモデルを使用するなどです。

サブエージェントがデプロイされていることを確認する方法

オーケストレーターがどのようにサブエージェントをデプロイするかを観察することは、並列化に優れたプロンプトを書く方法を学ぶ最速の方法です。

この簡単なチェックリストを使用してください:

  • 分解が表示される:作業を開始する前に、Copilotが共有する計画を確認し、作業が1つの長い線形計画ではなく、複数のトラックに分割されているかどうかを確認します。
  • バックグラウンドタスクUIがアクティビティを確認:作業が開始されたら、/tasksを実行してタスクダイアログを開き、実行中のバックグラウンドタスクを検査します。
  • 並行進捗が表示される:更新が同時に移動する別々のトラックを参照します。

フリートが並列化されていないように見える場合は、Copilotの作業を停止し、明示的な分解を要求してみてください:

まずこれを独立したトラックに分解し、その後トラックを並行して実行してください。各トラックをステータスとブロッカーとともに個別に報告してください。

よくある落とし穴を避ける

Fleetは強力ですが、いくつかの注意点を事前に知っておく価値があります。

ファイルの分割 サブエージェントはファイルロックなしでファイルシステムを共有します。2つのエージェントが同じファイルに書き込むと、最後に終了した方が勝ちます—静かに。エラーもマージもなく、単なる上書きです。

修正方法は、プロンプトで各エージェントに異なるファイルを割り当てることです。複数のエージェントが1つのファイルに貢献する必要がある場合は、各エージェントに一時パスに書き込ませ、オーケストレーターが最後にマージすることを検討してください。または、エージェントに明示的な順序を設定します。

プロンプトを自己完結型に保つ サブエージェントはオーケストレーターの会話履歴を見ることができません。オーケストレーターがサブエージェントをディスパッチするとき、プロンプトを渡しますが、そのプロンプトにはサブエージェントが必要とするすべてが含まれている必要があります。セッションの早い段階で有用なコンテキストを既に収集している場合は、/fleetプロンプトにそれを含めるか(またはサブエージェントが読み取れるファイルを参照する)ようにしてください。

進行中のフリートを導く ディスパッチ後、フォローアッププロンプトを送信してオーケストレーターを導くことができます:

  • 最初に失敗したテストを優先し、その後残りのタスクを完了してください。
  • アクティブなサブエージェントと、それぞれが現在何をしているかをリストしてください。
  • lint、型チェック、およびすべてのテストが合格した場合のみ完了とマークしてください。

/fleetを使用するタイミング(および使用しないタイミング)

/fleetは、タスクに自然な並列性がある場合に輝きます—複数のファイル、独立したモジュール、または分離可能な関心事。特に以下の場合に効果的です:

  • 複数ファイルにわたる同時リファクタリング。
  • 複数のコンポーネントのドキュメントを一度に生成。
  • API、UI、テストにまたがる機能の実装。
  • 状態を共有しない独立したコード変更の実行。

厳密に線形で単一ファイルの作業には、通常のCopilot CLIプロンプトの方がシンプルで同じくらい高速です。Fleetは調整のオーバーヘッドを追加するため、分散する実際の作業がある場合に効果を発揮します。

/fleetは、それを魔法のトリックではなくチームとして扱うときに最も役立ちます。小さく始めてください。明確な出力、きれいなファイル境界、明白な並列性を持つタスクを選んでください。オーケストレーターがどのように作業を分解するか、どこで役立つか、どこで邪魔になるかを観察してください。慣れてきたら、より大きなリファクタリング、マルチトラック機能、または並行したドキュメントとテストに挑戦してください。/fleetがいつ効果を発揮するかを学ぶ最速の方法は、実際の作業で試し、見たものに基づいてプロンプトを調整することです。

GitHub Copilot CLIを始める >