GitHub Copilotで既存コードを修正するときの使い方

GitHub Copilotで既存コードを修正するときの使い方。GitHub Copilotなどを対象に、向き不向きが分かるように整理します。

AIものさし編集部

GitHub Copilotで既存コードを修正するときは、変更の大きさと不確実さで依頼方法を分けます。対象が一つの関数なら該当箇所を示して小さく直す。複数ファイルにまたがる仕様変更なら、先に調査と計画を出させてから編集する。この切り分けが、意図しない広範囲の変更を防ぎます。

Copilot Chatの画面や使えるモードは、IDE、拡張機能のversion、plan、organization policyによって異なります。公式DocsでAsk、Plan、Agentなどが説明されていても、どの環境にも同じ選択肢が表示されるとは限りません。機能がない場合も、通常のchatで「調査だけ」「計画だけ」「編集して検証」と段階を明示できます。

変更前の状態を固定する

既存コードでは、まずbranch、未保存変更、現在のtest状態を確認します。変更前から失敗しているtestがあるなら、今回新たに起きた問題と分けて記録してください。対象file、呼び出し元、関連type、testを読み、既存の実装方針を把握してから依頼します。

症状だけを伝えても入力は足りません。期待挙動、実際の挙動、再現条件、変更可能な範囲、触れてはいけないAPIや画面、実行する検証を一緒に示します。例:「保存buttonで空文字も保存される。空文字は無効にする。API response形式と既存error表示は変えず、関連formとtestだけを先に調査する」。問題と制約を分けて書けば、実装の前提を見直せます。

Ask / Plan / Agentを作業段階に合わせる

コードの理解にはまず説明を求めます。影響範囲が分からない段階で編集を許すと、推測によるrefactorが混ざりやすいためです。IDEにPlan modeがあれば、要件、触るfile、未確定事項、test方法を先に計画させます。計画時はコードを変更しないよう指定し、内容を読んでから実装へ進みます。

Agent機能が利用できる環境では、複数fileを調べて編集し、terminal操作を含む作業を依頼できる場合があります。しかし「必要なら何でも変えて」は範囲が広すぎます。変更を許すfile群、data変更の禁止、新規dependency、実行commandの範囲を指定します。組織管理者が機能を制限する場合もあるため、操作が見当たらなければ計画を通常chatへ貼り、作業段階を分ければ足ります。

依頼文を受け入れ条件にする

表は横にスクロールできます

項目書く内容例
目的何を直すか空の名前を保存できないようにする
現状何が起きるか空文字でも成功responseになる
期待どうなればよいか保存せず既存errorを表示
範囲変更可能な場所form、validation、関連test
禁止変えないものAPI response、URL、共通form
確認実行するもの対象test、typecheck、lint

変更に複数の解釈があるなら、編集前に仮定と未確定事項を列挙させます。ユーザーへ確認が必要なProduct判断と、既存codeから確かめられる実装判断を分けます。小さな修正でも受け入れ条件を一文で書くと、reviewの視点がぶれません。

Repository instructionsを短く保つ

GitHubのrepository custom instructionsは、共通のcoding ruleやtest方法を伝える手段です。たとえば.github/copilot-instructions.mdに、test command、format、命名規則、避ける変更を記載します。特定directory向けの指示は、IDEや機能ごとに対応が違うため、いつでも読み込まれると決めつけずsupport範囲を確認してください。

指示fileを置いてもreviewは不要になりません。今回固有の禁止事項はpromptにも書きます。内容が古いcommandや過去のarchitectureを前提にしていないか定期的に確認します。Copilotの応答がruleを読み違える場合、指示を大量に増やす前に今回必要な制約をpromptで明示します。

変更差分を小さく保つ

対象fileと関連testをcontextに加え、不要なfolderを無差別に含めないようにします。大きなrepositoryでは、余計なfileが似た実装を混同させることがあります。逆に呼び出し元やtype定義が必要なのに関数だけを見せると、局所変更が契約を壊すことがあります。「編集するfile」「読むfile」「変更禁止」を分けて依頼します。

出力差分では、要求と関係ない整形、命名変更、dependency追加、error handling削除、定数変更を探します。diffが急に大きくなったら、不要な変更を戻すかtaskを分けます。「既存コードを修正」はfile全体を作り直す許可ではありません。

まずは使ってみる

記事の文脈に合うToolへ進めます。報酬の有無で見た目は変えていません。

Validationも依頼の一部にする

READMEやpackage設定から既存の検証commandを確認し、修正後にtest、typecheck、lintなどを実行します。存在しないcommandを推測してはいけません。結果が出ていないなら「通った」ではなく「未実行」と報告します。

表は横にスクロールできます

症状Copilotへ渡す情報受け入れ条件
型error全文、関連type、差分typecheck成功、既存契約維持
画面不具合操作、幅、期待表示同じ操作で再現しない
test失敗test名、入力、期待値behaviorを弱めず成功
大きいdifffile一覧、目的各変更が説明できる

testが失敗したときは、変更前からの失敗か今回の差分が原因か分けます。assertion削除、期待値の弱化、skip追加でtestを通さないようにします。実装を直した後は同じtestを再実行し、差分も確認します。

変更を取り込む前にreviewする

Copilotの編集はdiffを人が確認してから採用します。各変更が受け入れ条件に対応するか、既存動作を壊さないか、dataやURLの意味を変えていないかを見ます。Agentがterminal commandを実行しても、実行結果とcode差分は別に確認します。

採用しない変更を破棄するときは、作業前の未commit変更まで消さないよう注意します。Gitを使わない環境なら、履歴や編集前copyなど戻せる方法を確認してください。完了後に、変更、検証したcommand、未確認事項を記録すると引き継ぎやすくなります。

AIものさしの判断

既存コードの修正では、Copilotのmode名より「調査と編集を分けられるか」「範囲を限定できるか」「同じ条件で検証できるか」が判断軸です。小さな局所修正なら直接の質問と限定編集で十分です。複数fileならPlan相当の段階で影響とtestを確認してから編集を許可します。

Repository instructionsは毎回の説明を減らす補助として使い、今回固有の制約は依頼文に残します。test結果だけでなくdiffを読み、結果が期待通りか人が判断します。AIの説明やtest成功は要求を満たす証拠の一部ですが、既存仕様を理解せず採用する理由にはなりません。

次は一つの小さな修正で「調査→差分→検証」を試してください。モードが利用できない環境でも、同じ段階をpromptで分ければ運用できます。

変更タイプ別の依頼例

バグ修正では症状と再現条件を中心に書きます。「原因候補を調べ、編集前に根拠を提示。原因確認後に対象関数とテストだけを変更」。機能追加では利用者の操作と成功・失敗状態を書きます。「新しい一覧filterを追加し、URL queryと既存paginationの契約を維持。空結果と戻る操作も確認」。refactorなら外から見えるbehaviorが変わらないことを条件にし、差分の対象を限定します。

依頼の種類によって、先に読むべきcontextも異なります。バグは呼び出し元とerror処理、機能追加は画面・データ契約・関連テスト、refactorは利用箇所と公開interfaceを優先します。Copilotが種類に合わないファイルまで変更し始めたら、作業を止めてscopeを戻します。

完了報告を再現可能にする

作業後は変更ファイル、検証したcommandと結果、未実行の項目、残る仮定を記録します。「直しました」だけでは、他の人が品質を判断できません。検証が失敗した場合も、成功と書き換えず原因を分けます。さらに次の人が同じtaskを再現できるよう、手動操作が必要ならその手順を記載します。

作業後に引き継ぐ情報

別の人がレビューするなら、変更理由と採用しなかった案も簡潔に共有します。特に、Copilotが提案したが仕様と合わず外した変更があれば、その理由を残します。完了報告には実行した確認だけを記し、未実行を明確にすることで、次の確認者が同じ作業を安全に続けられます。

既存branchに未コミット変更がある場合は、作業前後の範囲を区別し、AIが触れた差分だけレビューします。

たとえば入力検証を足す変更なら、拒否条件だけでなく正常値の保存結果も確認します。エラー表示が出たことだけで「修正成功」とせず、拒否時に保存APIが呼ばれないことと、正常時の既存responseが変わらないことを別々の受入条件にします。

引用・データ出典

公式情報を編集部が見た内容です。Hands-on未実施の記述は本文かここに分けています。

確認日:2026-10-09

GitHub Docs:Copilot Chat in your IDE(新しいタブで開く)

GitHub Docs:Repository custom instructions(新しいタブで開く)

GitHub Docs:IDE prompt examples(新しいタブで開く)

次の一手

記事の内容を踏まえて、公式とTool詳細から続けられます。

次に読む・使う

この記事の次に必要な情報へ進めます。