はじめに

GitHub Copilotを使っていて、「いきなりコードを書き始めるのではなく、まず実装計画を立てたい」と感じたことはないでしょうか。特に大規模なリファクタリングや新機能の追加では、どのファイルをどのように変更するか、事前に整理しておきたい場面が多くあります。

GitHub Copilot ChatのPlanモードは、まさにこのニーズに応えるために設計された機能です。コード変更を行う前に、すべての要件を考慮した実装計画を作成し、レビューと承認を経てから実装に移行できます。

本記事では、Planモードの技術的な仕組みから具体的な活用シナリオ、メリット・デメリット、そして代替手段まで詳しく解説します。この記事を読むことで、以下のことが理解できます:

  • Planモードがどのような機能で、他のモードとどう違うのか
  • どのような場面でPlanモードを活用すべきか
  • Planモードのメリットと制約事項
  • Planモードが使えない場合の代替アプローチ

Planモードとは

Planモードの正体

Planモードは、VS CodeのCopilot Chatで利用できる4つの組み込みエージェントの1つです。2025年に導入されたプレビュー機能で、コード変更を直接行うのではなく、実装計画の策定に特化しています。

チャットビューのエージェントピッカーから「Plan」を選択することで利用できます。Planモードを選択すると、Copilotは以下のような動作をします:

  1. ユーザーのリクエストを分析し、必要な変更範囲を特定する
  2. 実装に必要なステップを詳細に計画する
  3. 各ステップで変更が必要なファイルと内容を明確化する
  4. 潜在的な課題や考慮事項を洗い出す

他のモードとの違い

VS CodeのCopilot Chatには、Plan以外に3つの組み込みエージェントがあります。それぞれの特徴と違いを理解することで、適切なモードを選択できます。

モード 主な用途 ファイル編集 ターミナル実行 自律的動作
Ask 質問・情報収集 しない しない しない
Edit 指定ファイルの編集 する しない しない
Agent 自律的なタスク実行 する する する
Plan 実装計画の策定 しない しない しない

Askモードとの違い

Askモードは汎用的な質問応答に適していますが、Planモードは実装計画の策定に特化しています。Planモードでは、単なる回答ではなく、実行可能なステップに分解された計画が出力されます。

Editモードとの違い

Editモードは実際にファイルを編集しますが、Planモードは計画のみを生成し、コードには一切触れません。これにより、変更を加える前に計画をレビューする時間を確保できます。

Agentモードとの違い

Agentモードは最も強力で、ファイルの検索・編集からターミナルコマンドの実行まで自律的に行います。一方、Planモードは読み取り専用のツールのみを使用し、計画立案に集中します。

技術的な仕組み

Planモードは、以下のような技術的特徴を持っています:

読み取り専用ツールの使用

Planモードでは、ファイル編集やターミナル実行のツールは使用されません。代わりに、コードベースの検索、ファイルの読み取り、シンボルの参照など、読み取り専用のツールが利用されます。これにより、計画段階で意図しないコード変更が発生することを防ぎます。

コンテキスト収集

Planモードは、ユーザーのプロンプトに基づいて関連するファイルやコードを自動的に検索し、計画に必要なコンテキストを収集します。#codebaseを明示的に指定しなくても、必要に応じてコードベース検索が行われます。

構造化された出力

Planモードの出力は、以下のような構造を持つMarkdownドキュメントとして生成されることが多いです:

  • 概要(Overview)
  • 要件(Requirements)
  • 実装ステップ(Implementation Steps)
  • テスト計画(Testing)
  • 考慮事項(Considerations)

実行環境と前提条件

Planモードを利用するには、以下の環境が必要です。

必須要件

項目 要件
VS Code 1.99以降(2025年3月リリース)
GitHub Copilot 有効なサブスクリプション(Free、Pro、Business、Enterprise)
Copilot Chat拡張機能 最新版を推奨

確認方法

  1. VS Codeのバージョンは、メニューの「ヘルプ」→「バージョン情報」から確認できます
  2. Copilot Chat拡張機能がインストールされていることを確認します
  3. チャットビューを開き(Ctrl+Alt+I)、エージェントピッカーに「Plan」が表示されることを確認します

組織ポリシーの確認

Copilot BusinessやEnterpriseを利用している場合、組織の管理者によってPlanモードが無効化されている可能性があります。エージェントピッカーにPlanが表示されない場合は、組織のCopilotポリシーを確認してください。

具体的な活用例

ユースケース1: 大規模なリファクタリング

既存のコードベースをリファクタリングする際、Planモードで事前に計画を立てることで、作業の見通しを立てやすくなります。

ユーザー:
このプロジェクトでは、現在すべてのAPIハンドラーが1つのファイルに記述されています。
機能ごとにファイルを分割し、適切なディレクトリ構造に整理したいです。
実装計画を作成してください。

Planモードは以下のような計画を生成します:

  • 現在のファイル構造の分析
  • 提案するディレクトリ構造
  • 各ハンドラーの移動先
  • インポートパスの更新箇所
  • テストファイルの更新箇所
  • 段階的な移行手順

ユースケース2: 新機能の実装前計画

新しい機能を追加する前に、影響範囲と実装手順を明確にできます。

ユーザー:
このアプリケーションにダークモード機能を追加したいです。
既存のスタイル管理の仕組みを活用しながら、ユーザー設定で切り替えられるようにする実装計画を作成してください。

ユースケース3: チームでの計画レビュー

Planモードで生成した計画は、チームメンバーとの共有やレビューに適しています。

  1. Planモードで実装計画を生成する
  2. 計画をMarkdownファイルとして保存する
  3. プルリクエストやドキュメントとしてチームに共有する
  4. フィードバックを受けて計画を修正する
  5. 承認後、AgentモードやEditモードで実装に着手する

ユースケース4: 技術的な要件整理

要件が曖昧な場合、Planモードを使って具体化できます。

ユーザー:
ユーザー認証機能を追加したいのですが、セキュリティ要件や必要なコンポーネントを整理してください。
JWTを使用し、リフレッシュトークンにも対応する計画を作成してください。

Planモードのメリット

変更前のレビューが可能

最大のメリットは、コードを変更する前に計画をレビューできることです。特に以下の場面で有効です:

  • 複雑な変更でミスを防ぎたい
  • 影響範囲を事前に把握したい
  • チームメンバーの承認を得てから実装したい

学習と理解の促進

Planモードの計画を読むことで、コードベースの構造やベストプラクティスについて学ぶことができます。特にプロジェクトに新しく参加したメンバーにとって、コードベースの理解を深める良い機会となります。

ドキュメントとしての活用

生成された計画は、実装後もドキュメントとして活用できます。なぜその設計を選んだか、どのような考慮事項があったかが記録として残ります。

見積もりの精度向上

実装前に詳細な計画があることで、作業量の見積もりが正確になります。どのファイルにどの程度の変更が必要かが明確になるため、スケジュール管理が容易になります。

Planモードのデメリット・制約

プレビュー機能としての制限

2025年12月時点で、PlanモードはまだPreview(プレビュー)段階の機能です。以下の点に注意が必要です:

  • 機能や動作が変更される可能性がある
  • すべてのモデルで最適化されているとは限らない
  • 一部の環境で利用できない場合がある

計画から実装への連携

Planモードで生成した計画を、そのままAgentモードやEditモードに引き継ぐ機能は限定的です。計画を参照しながら手動でモードを切り替える必要があります。

ただし、カスタムエージェント機能のハンドオフを使用すれば、Planエージェントから実装エージェントへのスムーズな移行が可能です(後述)。

コンテキストの制限

非常に大規模なコードベースでは、すべてのファイルを考慮した完璧な計画を生成することは困難です。必要に応じて、関連ファイルを明示的に指定する必要があります。

最新情報への対応

Planモードで使用されるLLMには学習データのカットオフがあります。最新のフレームワークやライブラリについては、#fetchツールで公式ドキュメントを参照するよう指示すると良いでしょう。

Planモードが使えない場合の代替方法

Planモードが利用できない環境や、より高度なカスタマイズが必要な場合の代替手段を紹介します。

方法1: カスタムエージェントでPlannerを作成

VS Code 1.106以降では、カスタムエージェント機能を使って独自のPlanエージェントを作成できます。以下は公式ドキュメントで紹介されているPlanエージェントの例です。

ワークスペースの.github/agents/フォルダにplanner.agent.mdファイルを作成します:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
---
description: Generate an implementation plan for new features or refactoring existing code.
name: Planner
tools: ['fetch', 'githubRepo', 'search', 'usages']
model: Claude Sonnet 4
handoffs:
  - label: Implement Plan
    agent: agent
    prompt: Implement the plan outlined above.
    send: false
---
# Planning instructions
You are in planning mode. Your task is to generate an implementation plan for a new feature or for refactoring existing code.
Don't make any code edits, just generate a plan.

The plan consists of a Markdown document that describes the implementation plan, including the following sections:

* Overview: A brief description of the feature or refactoring task.
* Requirements: A list of requirements for the feature or refactoring task.
* Implementation Steps: A detailed list of steps to implement the feature or refactoring task.
* Testing: A list of tests that need to be implemented to verify the feature or refactoring task.

このカスタムエージェントには以下の特徴があります:

  • 読み取り専用ツールのみ指定: fetchgithubReposearchusagesなど、コードを変更しないツールのみを使用
  • ハンドオフ機能: 計画完了後に「Implement Plan」ボタンが表示され、Agentモードへスムーズに移行可能
  • モデル指定: 推論能力の高いモデル(例: Claude Sonnet 4)を指定可能

方法2: Askモードでの計画立案

Planモードが使えない場合、Askモードで計画を立てることも可能です。

プロンプト例:
#codebase を参照して、認証機能を追加するための実装計画を作成してください。
コードの変更は行わず、以下の形式で計画を出力してください:
1. 概要
2. 影響を受けるファイル一覧
3. 実装ステップ(優先順位付き)
4. テスト計画
5. リスクと考慮事項

方法3: プロンプトファイルの活用

頻繁に計画立案を行う場合は、プロンプトファイル(.prompt.md)を作成しておくと便利です。

.github/prompts/implementation-plan.prompt.md:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
---
mode: 'ask'
description: 'Generate an implementation plan for the given task'
---
# Implementation Plan Request

以下のタスクについて、詳細な実装計画を作成してください。
コードの変更は行わず、計画のみを出力してください。

## 出力形式

1. **概要**: タスクの目的と範囲
2. **前提条件**: 必要なツール、ライブラリ、環境
3. **影響範囲**: 変更が必要なファイルとその理由
4. **実装ステップ**: 具体的な作業手順(優先順位付き)
5. **テスト計画**: 必要なテストケース
6. **リスク**: 潜在的な問題と対策

## タスク
{{user_input}}

チャットで/implementation-planと入力してプロンプトファイルを呼び出し、続けてタスクの説明を入力します。

方法4: ハンドオフワークフローの構築

カスタムエージェントのハンドオフ機能を活用して、計画から実装への流れを自動化できます。

  1. Planエージェント: 計画を生成(読み取り専用ツールのみ)
  2. ハンドオフボタン: 「Implement Plan」を表示
  3. Agentモード: 計画に基づいて実装を実行

この方法により、計画を確認・修正してから実装に進むワークフローが実現できます。

期待される結果

Planモードを適切に活用することで、以下のような結果が期待できます。

計画の出力例

認証機能の追加を依頼した場合の出力例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 認証機能実装計画

## 概要
JWTベースの認証機能を追加し、ユーザーのログイン・ログアウト・トークンリフレッシュを実現する。

## 影響を受けるファイル

| ファイル | 変更種別 | 説明 |
|----------|----------|------|
| src/middleware/auth.ts | 新規作成 | 認証ミドルウェア |
| src/routes/auth.ts | 新規作成 | 認証API エンドポイント |
| src/models/user.ts | 修正 | パスワードハッシュフィールド追加 |
| src/config/index.ts | 修正 | JWT シークレット設定追加 |

## 実装ステップ

### ステップ1: 依存関係のインストール
- jsonwebtoken
- bcrypt
- @types/jsonwebtoken
- @types/bcrypt

### ステップ2: 設定ファイルの更新
JWT_SECRETとTOKEN_EXPIRYの環境変数を追加

### ステップ3: ユーザーモデルの拡張
パスワードハッシュ化のロジックを追加

### ステップ4: 認証ミドルウェアの作成
トークン検証とユーザー情報の付与

### ステップ5: 認証エンドポイントの実装
- POST /auth/login
- POST /auth/logout  
- POST /auth/refresh

## テスト計画
- 正常なログイン/ログアウトのテスト
- 無効なトークンでのアクセス拒否テスト
- トークン期限切れ時のリフレッシュテスト

## 考慮事項
- リフレッシュトークンのセキュアな保存方法
- レートリミットの実装
- ログイン試行回数の制限

実装への移行

計画を確認・承認した後は、以下の方法で実装に移行します:

  1. Agentモードへの切り替え: エージェントピッカーでAgentを選択し、「上記の計画を実装してください」と指示
  2. ハンドオフの利用: カスタムエージェントのハンドオフボタンをクリック
  3. 段階的な実装: Editモードで各ステップを個別に実行

まとめ

GitHub CopilotのPlanモードは、大規模な開発タスクを計画的に進めるための強力なツールです。

本記事のポイントをまとめると:

  • Planモードの本質: コード変更前に詳細な実装計画を立てるための専用エージェント
  • 主な特徴: 読み取り専用ツールのみを使用し、計画立案に特化
  • 活用場面: 大規模リファクタリング、新機能追加、チームレビュー、要件整理
  • メリット: 変更前レビュー、学習促進、ドキュメント化、見積もり精度向上
  • 制約: プレビュー機能、実装への連携が限定的、コンテキスト制限
  • 代替手段: カスタムエージェント、Askモード、プロンプトファイル、ハンドオフワークフロー

Planモードは、「まず計画を立て、レビューしてから実装する」という堅実な開発アプローチをAIで支援する機能です。特に複雑なタスクや影響範囲が広い変更では、Planモードで事前に計画を立てることで、手戻りを減らし、品質の高い実装を実現できます。

まずは小規模なリファクタリングでPlanモードを試してみてください。計画を立てる習慣が身につくことで、より効率的で予測可能な開発ワークフローを構築できるはずです。

参考リンク