コンテンツにスキップ

Agent Modeによるマルチファイル自動実装

3.1 Agent Modeの概要と従来モードとの違い

Section titled “3.1 Agent Modeの概要と従来モードとの違い”

Copilot Chatには、目的に応じた3つのモードが用意されている。

flowchart LR
    subgraph Ask["Ask(質問)モード"]
        A1["`質問に回答
        コードは変更しない`"]
    end
    subgraph Edit["Edit(編集)モード"]
        B1["`ユーザーが指定した
        ファイルを編集
        各ターンで承認`"]
    end
    subgraph Agent["Agent(エージェント)モード"]
        C1["`自律的にサブタスクを分解
        複数ファイルを横断編集
        ターミナル実行・自己修復`"]
    end
    Ask --> Edit --> Agent
特性AskEditAgent
コードの変更しないするする
対象ファイルの決定ユーザーが指定Copilotが自動判断
ターミナルコマンド実行自動実行
エラーの自動修復ループで自己修復
MCPサーバー連携対応

Agent Modeは、Copilot Chatの中で最も自律性が高いモードであり、従来の「1ファイルの補完」から「プロジェクト全体を理解した上での自律的な実装」へとパラダイムを変えるものである。

Agent Modeでは、ユーザーからの指示を受け取ると、Copilotが以下のステップを自律的に繰り返す。

flowchart TD
    A["`ユーザーの指示
    自然言語で目的を記述`"] --> B["`タスク分解
    必要なサブタスクを特定`"]
    B --> C["`ファイル探索
    関連ファイルを自動検出`"]
    C --> D["`コード生成・編集
    複数ファイルを横断して変更`"]
    D --> E["`ターミナル実行
    ビルド・テスト・lint等`"]
    E --> F{"`エラー発生?`"}
    F -->|Yes| G["`自己修復
    エラー内容を分析して修正`"]
    G --> E
    F -->|No| H["`差分プレビュー
    ユーザーに確認を求める`"]
    H --> I{"`承認?`"}
    I -->|Yes| J["`変更を適用`"]
    I -->|No| K["`フィードバックを受けて再修正`"]
    K --> D

Agent Modeは以下のような場面で特に効果を発揮する。

新機能の実装: 「ユーザー認証機能をJWT+リフレッシュトークンで実装して」のように、複数ファイルにまたがる機能実装を一度の指示で完了できる。

バグ修正: エラーメッセージや再現手順を伝えると、原因の特定から修正、テストの追加までを一貫して行える。

リファクタリング: 「このモジュールをClean Architectureに沿って再構成して」のようなアーキテクチャレベルの変更にも対応する。

テスト追加: 「このディレクトリ内のすべてのサービスクラスに対してユニットテストを追加して」のように、広範囲のテスト生成が可能である。

3.2 自然言語による機能実装の実践例

Section titled “3.2 自然言語による機能実装の実践例”

Agent Modeで高品質な結果を得るには、プロンプトに以下の要素を含めることが重要である。

目的(What): 何を実現したいのかを明確に述べる。
制約(How): 使用する技術スタック、コーディング規約、設計パターンを指定する。
境界(Scope): 変更して良い範囲と、変更すべきでない範囲を明示する。
出力期待(Output): テスト追加の要否、ドキュメント更新の要否を指定する。

プロンプト例:APIエンドポイントの追加

Section titled “プロンプト例:APIエンドポイントの追加”
以下の要件でユーザープロフィール更新APIを実装してください。
## 要件
- PATCH /api/users/:id/profile エンドポイントを追加
- リクエストボディ: { displayName?: string, bio?: string, avatarUrl?: string }
- Zodによる入力バリデーション
- 認証済みユーザーのみアクセス可能(既存のauthMiddlewareを使用)
- 自分以外のプロフィールは更新不可
## 技術スタック
- Express.js + TypeScript
- Prismaを使用したDB操作
- 既存のエラーハンドリングパターンに従う
## 追加作業
- ユニットテストをVitestで作成
- 既存のOpenAPIスキーマ(docs/openapi.yaml)を更新

曖昧すぎる指示: 「APIを良くして」→ Copilotが何をすべきか判断できない。

指示の過積載: 1つのプロンプトに10以上の無関係な要件を詰め込むと、後半の要件が抜け落ちやすい。
大きなタスクは段階的に分割する。

否定形のみの指示: 「〜しないで」だけでなく、「代わりに〜して」と肯定形で方向性を示す。

3.3 MCP(Model Context Protocol)サーバー連携

Section titled “3.3 MCP(Model Context Protocol)サーバー連携”

Model Context Protocol(MCP)は、AIモデルと外部ツール・データソースを接続するためのオープン標準プロトコルである。
Agent ModeとMCPサーバーを組み合わせることで、Copilotの作業範囲がエディタ内のファイル操作を超え、外部サービスとの連携が可能になる。

flowchart TD
    A["`Copilot Agent Mode`"] --> B["`MCP プロトコル`"]
    B --> C["`GitHub MCP サーバー
    Issue・PR・リポジトリ操作`"]
    B --> D["`Playwright MCP サーバー
    ブラウザ自動操作・テスト`"]
    B --> E["`カスタム MCP サーバー
    DB・社内API・外部サービス`"]
    B --> F["`ファイルシステム MCP
    ファイル読み書き`"]

デフォルトで利用可能なMCPサーバー

Section titled “デフォルトで利用可能なMCPサーバー”

GitHub MCP サーバー: Copilotに標準搭載されており、ゼロコンフィグで利用できる。
Issue管理、PR操作、リポジトリ検索などGitHub.com上のリソースにアクセスできる。
OAuthによるワンクリック認証(推奨)またはPersonal Access Token(PAT)での認証に対応する。

Playwright MCP サーバー: ブラウザ自動操作とE2Eテストを提供する。
Agent Modeから「ログインフローのテストを書いて」と指示するだけで、Playwrightがテストを生成・実行し、結果をCopilotに返す。

MCPサーバーの設定方法(VS Code)

Section titled “MCPサーバーの設定方法(VS Code)”

VS CodeではCommand Paletteから MCP: Open User Configuration を実行し、mcp.json にサーバー定義を追加する。

{
"servers": {
"github": {
"url": "https://api.githubcopilot.com/mcp/"
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}

MCPサーバー利用時のベストプラクティス

Section titled “MCPサーバー利用時のベストプラクティス”
  • 最小権限の原則: MCPサーバーにはタスク遂行に必要な最小限の権限のみを付与する
  • 定期的な棚卸し: 開発環境にアクセスできるMCPサーバーの一覧を定期的に監査する
  • 段階的な導入: まず実績のあるMCPサーバー(GitHub、Playwright)から始め、徐々にカスタムサーバーを追加する
  • プロンプトファイルとの組み合わせ: MCPサーバーごとにCopilotの振る舞いをガイドするプロンプトファイルを用意する

3.4 チェックポイントと自動修復機能の活用

Section titled “3.4 チェックポイントと自動修復機能の活用”

Agent Modeでは、各ステップの途中結果がチェックポイントとして記録される。
問題が発生した場合、任意のチェックポイントまでロールバックして、そこから別のアプローチで再試行できる。

この機能は、Agent Modeが大量のファイルを変更する場面で特に重要である。
変更が意図した方向と異なると感じた場合、すぐに前の状態に戻して指示を修正できる。

Agent Modeはターミナルコマンド(ビルド、テスト、lint等)を自動実行し、エラーが発生した場合はエラーメッセージを分析して修正を試みる。
この「実行→エラー検出→修正→再実行」のループを自動で繰り返す。

flowchart LR
    A["`コード生成`"] --> B["`ビルド実行`"]
    B --> C{"`成功?`"}
    C -->|No| D["`エラー分析`"]
    D --> E["`自動修正`"]
    E --> B
    C -->|Yes| F["`テスト実行`"]
    F --> G{"`成功?`"}
    G -->|No| D
    G -->|Yes| H["`完了`"]