広告枠を募集中 ご相談ください

開発者が IDE で GitHub Copilot Chat とワークスペース文脈コマンドを活用してコードを理解・文書化・リファクタリングする方法

365Finds Editorial
Wiki 記事 11,430 本収録

あなたの AI で 365 Wiki を使う

下のプロンプトをコピーして、普段使っている AI に貼り付け、そのまま質問してください。

完全版 Skill をダウンロード

まずはプロンプトでお試しください。よく使う場合は完全版 365Wiki Skill をインストールすると、毎回貼り付ける必要がありません。普段使う AI がなければ、Gemini や Microsoft Copilot のウェブ版でも使えます。

日々のソフトウェア開発において、白紙の状態から新しいコードを書く時間はごく一部に過ぎません。エンジニアの業務の大半は、見慣れないリポジトリの構造を読み解き、レガシーコードの暗黙の依存関係を解き明かし、ドキュメントが不足している実装に仕様を書き加え、既存機能を壊さずに安全にリファクタリングすることに費やされています。エディタ内補完がタイピングの生産性を変革したとすれば、IDE に統合された GitHub Copilot Chat は、プロジェクト全体のコンテキストを把握した「対話型ペアプログラマー」としての役割を果たします。

チャット参加者(@workspace など)、スラッシュコマンド(/explain、/doc、/fix、/tests など)、そしてコンテキスト変数(#file、#selection、#codebase など)を組み合わせることで、開発者は Copilot にリポジトリ固有の文脈を的確に認識させることができます。本ガイドでは、主要な IDE(VS Code、JetBrains 各種 IDE、Visual Studio 2022)において、これらのコマンドを駆使して既存コードの読解・ドキュメント化・リファクタリングを確実に行う実践手法を解説します。


コアコンテキスト構造:参加者・スラッシュコマンド・コンテキスト変数

IDE 内の GitHub Copilot Chat は、主に 3 つの構文要素によって制御されます。

  1. チャット参加者(@):特定のドメインに特化したエージェント。既存コードの分析で最も重要なのが @workspace であり、リポジトリ全体のファイルツリー、シンボル情報、セマンティック検索インデックスにアクセスできます。
  2. スラッシュコマンド(/):意図したタスクを即座に指示するための定型ショートカット。冗長なプロンプトを作成する手間を省きます。
  3. コンテキスト変数(#):明示的に文脈をモデルへ渡すアンカー。特定のファイル、選択範囲、シンボル、ターミナル出力などを正確にコンテキストウィンドウへ注入します。
構文要素主な例IDE における役割典型的なユースケース
参加者(@)@workspace、@vscode、@terminal、@github専門ドメインの推論エンジンやツールへルーティングプロジェクト全体のアーキテクチャ把握;ターミナルエラー解析
スラッシュコマンド(/)/explain、/doc、/fix、/tests、/clear実行したいタスクの意図を直接指定アルゴリズム解説;API ドキュメント生成;構文バグ修正
コンテキスト変数(#)#file、#selection、#codebase、#sym、#terminalSelectionモデルが参照するソースコード範囲を限定トークン消費を抑えつつ対象ファイルを確実に指定

開発者は主に次の 2 つのインターフェースでこれらの構文を利用します:


1. 既存コードおよび複雑なロジックの理解

初めて触れるコードベースや数千行におよぶ巨大なモジュールに遭遇した際、一行ずつコードを追うのは非効率であり、見落としの原因になります。エンジニアは @workspace と /explain を併用して迅速に構造を把握します。

リポジトリ全体のアーキテクチャ探索

ファイルツリーを手作業で探す代わりに、チャットビューで @workspace を使って包括的な質問を投げます。

@workspace このプロジェクトにおけるユーザー認証フローはどこで処理されていますか?また、JWT トークンの検証を行うミドルウェアはどれですか?

Copilot は @workspace のセマンティック検索、AST シンボルインデックス、ローカルベクトルデータベースを駆使し、ルート定義、ミドルウェア、データベースモデルを特定した上で、関連ファイルと呼び出し関係を提示します。

局所的なロジックとデータフローの分析

複雑な分岐や暗黙のビジネスロジックを含むコードブロックを選択し、インラインチャット(Ctrl+I / Cmd+I)またはチャットパネルで /explain を実行します。

#selection /explain この注文データ処理のライフサイクルを追跡し、潜在的な競合状態(Race Condition)を指摘してください。

Copilot は以下の観点から体系的な回答を生成します:

Mermaid を用いたシーケンス図・状態遷移の可視化

複雑な非同期処理や Saga パターンを理解するために、ダイアグラム生成を依頼することも定石です。

#file:payment_saga.go /explain このトランザクション補償とリトライフローを Mermaid のシーケンス図で表現してください。

生成された Mermaid コードは IDE の Markdown プレビューで即座に視覚化され、改修前にシステム全体の挙動を直感的に確認できます。


2. 既存コードのドキュメント化と仕様コメントの作成

コメントのないコードは技術的負債を増大させます。Copilot Chat を使えば、各言語の標準仕様に準拠したドキュメントを短時間で自動整備できます。

関数・メソッド単位の Docstring 自動生成

/doc コマンド(Visual Studio や Xcode に標準搭載、VS Code や JetBrains ではインラインプロンプトやスマートアクションから実行可能)を使うことで、言語固有の仕様に沿ったコメントが一括生成されます。

#sym:calculateInterestRate /doc

Copilot は対象言語のコーディング標準を自動判別します:

実装例:TypeScript の計算処理に関数仕様を付与

未文書化の関数に対し、インラインチャットで指示を入力します:

/doc 入力パラメータのバリデーション制約、戻り値の構造、およびスローされる例外を詳細に記載した TSDoc を作成してください。

Copilot の出力結果:

/**
 * 元金と年利率に基づき、ローンの元利均等返済スケジュールを計算します。
 *
 * @param principal - 基準通貨単位での初期借入金額(0 より大きい正数)。
 * @param annualRate - 小数表記の年利(例: 5% の場合は 0.05)。
 * @param tenureMonths - 返済期間(月数、1 以上の整数)。
 * @returns 各月の返済元金、利息、借入残高を含む明細リスト。
 * @throws {RangeError} principal が 0 以下、または tenureMonths が 1 未満の場合に発生。
 * @throws {TypeError} 数値以外の型が渡された場合に発生。
 */
export function calculateAmortization(principal: number, annualRate: number, tenureMonths: number): PaymentRecord[] {
    // ...
}

モジュール概要と ADR(アーキテクチャ決定記録)の作成

関数単位にとどまらず、ワークスペース全体の情報を要約して README を起草させることも可能です:

@workspace #file:src/billing この請求モジュールの役割と主要インターフェースをまとめ、必要な環境変数を含めた README セクションを作成してください。

チーム標準の統一:リポジトリ独自指示(Custom Instructions)の設定

リポジトリのルートに .github/copilot-instructions.md を配置すると、Copilot はチャットセッション開始時にその内容を自動読み込みします。


3. 既存コードの安全なリファクタリング手法

レガシーコードのリファクタリングにおける最大の課題はデグレ(先祖返りや既存機能の破壊)です。インライン差分レビューとテスト駆動の仕組みを組み合わせることで、Copilot を安全なリファクタリング基盤として活用できます。

インラインチャットによるピンポイントなモダナイズ

Ctrl+I(macOS は Cmd+I)でインラインチャットを呼び出し、選択したコードに対して具体的な変換を命じます:

  1. コールバック地獄・Promise チェーンの解消:
    この多段ネストされた Promise チェーンを標準的な async/await 構文にリファクタリングし、適切な try/catch 例外処理を追加してください。
    
  2. 巨大関数の責務分離:
    入力値検証と DB データ整形処理を 2 つの純粋関数として抽出し、メインの処理関数を 20 行以内に収めてください。
    
  3. 条件分岐のストラテジーパターン化:
    10 個以上の分岐を持つ switch 文を、型安全なハンドラーマップを用いた Strategy パターンへ書き換えてください。
    

インラインチャットではエディタ内に直感的な差分(緑の追加行・赤の削除行)が表示されるため、変更内容を 1 行ずつ確認した上で Enter で確定、または Escape で破棄できます。

/fix によるコンパイル警告や Lint エラーの解消

型定義の不整合や未処理の例外警告が生じた場合は、対象コードを指定して修復させます:

/fix このブロックにおける TypeScript の型推論エラーを解消し、undefined の可能性があるプロパティアクセスを安全に保護してください。

VS Code ではターミナルのログ選択(#terminalSelection)と組み合わせることで、ビルドエラーのスタックトレースを直接 Copilot に渡して原因コードを修正させることができます。

複数ファイルの一括編集:Copilot Edits と Agent Mode

VS Code や JetBrains IDE の最新環境では、Copilot Edits や Agent Mode が提供されています:

  1. 作業セット(Working Set)の定義:改修対象となるインターフェース、実装クラス、コントローラーをリストに追加。
  2. 全体リファクタリングのプロンプト発行:
    UserService.GetUserById のシグネチャを変更し、例外をスローする代わりに Result<User, UserError> を返すようにしてください。作業セット内のすべての呼び出し箇所も追従して更新してください。
    
  3. ファイルごとの個別確認:Copilot が関連ファイルを順次修正し、ファイル単位で差分を提示するため、納得のいく修正だけを選択的に取り込めます。

安全装置としての /tests:リファクタリング前の防衛線

熟練のエンジニアは、ロジック変更に着手する前に Copilot で回帰テストを生成します:

  1. リファクタリング対象の古い関数を選択。
  2. チャットで /tests を実行:
    /tests 境界値、null 入力、ネットワークタイムアウト時の挙動を網羅する単元テストを生成してください。
    
  3. 生成されたテストを実行し、現行コードで全件パスすることを確認。
  4. コードのリファクタリングを実行。
  5. テストを再実行。もし失敗した場合は、エラー出力を指定して /fixTestFailure で迅速に不整合を特定・修正。

主要 IDE における機能対応・コマンド比較表

主要な開発環境における Copilot Chat の機能対応状況は以下の通りです:

機能項目Visual Studio CodeJetBrains IDEs(IntelliJ / PyCharm 等)Visual Studio 2022
ワークスペースの全体把握@workspace(セマンティックインデックス)Copilot Edits 作業セット;プロジェクト全体コンテキストソリューション全体の把握;#solution タグ
主なスラッシュコマンド/explain、/fix、/tests、/clear、/new/explain、/fix、/tests、/help、/chronicle/doc、/explain、/fix、/optimize、/tests
コンテキスト変数#file、#selection、#codebase、#sym、#terminalSelectionファイルのドラッグ&ドロップ;右クリックからチャット参照#file.cs、#file.cs:lines、#solution
インラインチャット起動Ctrl+I / Cmd+Iインライン質問ショートカット / インテンション機能Alt+/ または右クリック「Copilot に質問」
複数ファイルの同時改修Copilot Edits;Agent Mode;Plan Mode作業セット対応 Copilot EditsAgent Mode(v17.14 以降)
ターミナル直接実行Agent Host 環境での ! コマンド(!npm test)統合された Copilot CLI セッション環境統合 Developer PowerShell / コマンドプロンプト

ベストプラクティスとセキュリティ境界

AI の支援を安全に享受し、コード品質を維持するために遵守すべき原則です:

1. 文脈を明確に絞り込み、ハルシネーションを防ぐ

自動インデックスは強力ですが、文脈が曖昧な質問は不正確な回答を招きます。常に変数で対象を明示してください:

2. .copilotignore による機密コードの保護

API キー、秘密鍵、顧客個人情報、社内機密アルゴリズムを含むファイルは、リポジトリに .copilotignore を配置して除外設定を行います。除外されたファイルは Copilot のインデックス作成やコンテキスト送信から完全に遮断されます。

3. 人手による差分レビューの徹底

AI が提示した変更案は、他の開発者が書いたコードと同様に検証する必要があります:

4. プランと組織ガバナンス

GitHub Copilot は利用規模に応じて複数のプランを提供しています:


まとめ

GitHub Copilot Chat の真価は、単なるコード自動生成にとどまらず、リポジトリ全体の文脈を踏まえた思考のパートナーとして機能する点にあります。@workspace による構造把握、/explain によるアルゴリズム分解、/doc によるドキュメント標準化、そしてインライン差分と /tests を組み合わせた安全なリファクタリングを習得することで、開発者は既存システムの保守コストを劇的に削減し、より本質的な価値設計に集中できるようになります。

参考文献