GitHub Copilotの近代化に取り組む

この記事では、GitHub Copilotモダン化エージェントと通信する方法、好みを教える方法、間違いを修正する方法、作業内容を確認する方法、複数のセッションにわたるアップグレードの管理を行う方法について説明します。

GitHub Copilotモダン化は、質問をしたり、戦略を提案したり、フィードバックに適応したり、時間の経過に伴う好みから学習したりする対話型のコラボレーターです。 最適な結果を得るには、エージェントコンテキストを指定します。 目標、制約、好みについて知っているほど、パフォーマンスが向上します。

❌ Vague — the agent has to guess
"Upgrade my project"

✅ Specific — the agent knows exactly what you need
"Upgrade the WebAPI project to .NET 10. We need to keep backward
compatibility with our existing REST clients, and we can't change the
public API surface."

ヒント

すべてのコンテキストを前もって提供する必要はありません。 エージェントは、詳細情報が必要な場合にフォローアップの質問をします。

会話の開始

  1. VS Code、Visual Studio、または COPILOT CLI で Copilot Chat を開きます。
  2. エージェント ピッカーから GitHub Copilot .NETを選択するか、環境に適したエージェントメンションを入力します(VS Code と Copilot CLI の、または Visual Studio の )。
  3. 自然言語で実行する内容について説明します。

何を言うか

自然言語が機能します。 次の例を試してください。

必要なもの 何を言うか
完全なソリューションをアップグレードする ソリューションを.NET 10にアップグレードします
特定のテクノロジをアップグレードする "EF6 から EF Core へのアップグレードに関するヘルプ"
利用可能な機能を確認する "使用可能なシナリオは何ですか?
最初に 1 つのプロジェクトをアップグレードする "最初に API プロジェクトをアップグレードし、次に共有ライブラリをアップグレードする"
現在の状態を理解する "アップグレードの現在の状態は何ですか?

次に何が起こるか

会話を開始すると、エージェントはワークスペース内の既存のアップグレード作業を確認します。

  • 既存の作業がない場合、エージェントは新たに開始され、通常はソリューションの評価から始まります。
  • 進行中の既存の作業がある場合、エージェントは中断した場所を選択し、現在の状態 ("8 つのタスクのうち 3 つが完了しました" など) を表示します。

フロー モードを選択する

エージェントは、入力に対してエージェントが一時停止する量を制御する 2 つのフロー モードをサポートしています。

自動モード

自動モードでは、エージェントは各境界で承認を一時停止することなく、ステージ (評価、計画、実行) を通じて動作します。 エージェントは引き続き本物の阻害要因で停止するか、自分だけが決定を下す必要がある場合に停止します。

経験豊富なユーザー、簡単なアップグレード、小さなソリューションに最適です。

ガイド付きモード

ガイド モードでは、エージェントはレビューの各ステージ境界で一時停止します。

  • 評価後、プランを作成する前。
  • 計画を立てた後、あらゆるタスクを実行する前に。
  • 複雑なタスクを分解する前に。
  • 複数の有効なアプローチが存在する重要な決定ポイント。

初めてのユーザー、複雑なソリューション、およびプロセスを学習する場合に最適です。

セッションの途中でモードを切り替える

モードをいつでも自由に切り替えることができます。

切り替える 何を言うか
ガイド付きモード "一時停止" または "ガイド付きモードに切り替える"
自動モード "続行" または "先に進む"

ヒント

最初のアップグレードのガイド付きモードから開始します。 ガイド付きモードは、エージェントがどのように考え、どのような決定を行うかを学習するための最良の方法です。 快適になったら、自動モードに切り替えます。

エージェントに教える

エージェントはユーザーから学習します。 エージェントは、修正、基本設定、および指示をscenario-instructions.mdのアップグレード状態フォルダーに保存します。 これらの基本設定は、セッション間で保持されます。

間違いを修正する

エージェントが同意しない決定を下したら、エージェントに次のことを伝えます。

You: "Actually, don't use Newtonsoft.Json — we're standardizing on System.Text.Json."
Agent: "Got it. I'll use System.Text.Json for all serialization going forward.
        I've saved this as a preference."

エージェントはscenario-instructions.mdを更新し、今後のセッションでも同じ選択を行うことはありません。

基本設定を設定する

エージェントに対して、作業の好みについて事前に指示します。

You: "Always use bottom-up strategy for this solution — upgrade leaf projects first."
Agent: "Noted. I'll use a bottom-up upgrade strategy, starting with projects that
        have no internal dependencies and working up to the top-level projects."

タスク固有の指示を与える

設定が特定のタスクにのみ適用される場合があります。

You: "For this task, skip the test validation — the tests are broken for a known
      reason and we'll fix them separately."
Agent: "Understood. I'll skip test validation for this task only."

エージェントが保存する内容

scenario-instructions.md ファイルは、明確なセクションに編成されています。

セクション​​ 内容は何か
ユーザー設定 (技術) パッケージの選択、フレームワークの決定、コーディング パターン "Newtonsoft ではなく System.Text.Json を使用する"
ユーザー設定 (実行スタイル) エージェントのしくみ "常にボトムアップ戦略を使用する"
主要な決定ログ 重要な決定とその根拠 "Dapper よりも EF Core を選択した理由..."
タスクごとのカスタム命令 タスク固有のオーバーライド "タスク 3.1 のテストをスキップする"

ヒント

また、 scenario-instructions.md を直接編集します。 .github/upgrades/{scenarioId}/の Markdown ファイルです。 エージェントは、すべての対話の開始時にファイルを読み取ります。

セッション中の修正を行う

エージェントは中断をスムーズに処理し、自分の位置や途中になっている作業を見失うことはありません。

一時停止して確認する

You: "Wait, stop — let me review that change first."
Agent: "Here's what I was about to do: [describes planned changes].
        Would you like me to proceed, or adjust the approach?"

転送

You: "Actually, let's do Project B before Project A — it has fewer dependencies."
Agent: "Good call. I'll reorder the tasks and start with Project B."

元に戻す

You: "That last change broke the build. Can we revert it?"
Agent: "I'll revert the last commit (abc1234: 'Migrate auth middleware').
        Reverting now."

また、自分で標準の Git コマンドを使用してコミットを戻せます。 エージェントは、各コミットが変更された内容を正確に把握できるように、明確でわかりやすいコミット メッセージを書き込みます。

フローの途中で質問する

質問してもワークフローは損なわれません。

You: "Why did you choose to migrate the data layer before the API controllers?"
Agent: "The API controllers depend on the data layer interfaces. By migrating
        the data layer first, we avoid temporary compilation errors in the
        controllers and can validate each layer independently."

エージェントの作業を確認する

エージェントには、その作業を確認する複数の方法が用意されています。

ソース管理

エージェントは別のブランチで作業することを提案し、動作に応じて変更をコミットします。 標準の Git コマンドを使用して、エージェントの変更を確認します。

git log --oneline -10
git diff main..<agent-branch>

ワークフロー ファイル

エージェントは、 .github/upgrades/{scenarioId}/ に複数のファイルを保持し、完全な可視性を提供します。

File 表示される内容
tasks.md すべてのタスク、状態インジケーター (✅ 完了、進行中の 🔄 、保留中)、⬜進行状況バーを含む視覚的な進行状況の概要
execution-log.md エージェントが実行したすべてのアクション、いつ、何が起こったかの時系列監査証跡を完了する
assessment.md 依存関係、破壊的変更、アップグレードの複雑さを含む、ソリューションの初期分析
scenario-instructions.md ユーザーの好みとエージェントが学習して決定した内容
tasks/{taskId}/progress-details.md タスクごとの詳細: 発生したビルド エラー、解決方法、テスト結果、および行われた決定

中断された作業を再開する

チャットを閉じるか、IDE をシャットダウンします。 エージェントはこの状況をシームレスに処理します。

エージェントは、リポジトリ内のすべての状態を .github/upgrades/ に格納します。 新しい会話を開始すると、エージェントは現在の状態を確認し、すぐに次のことが認識されます。

  • どのシナリオがアクティブですか。
  • 完了、進行中、または保留中のタスク。
  • 存在する成果物 (評価、計画、タスクファイル)
  • タスクが更新されていないように見えるかどうか、または前のセッションのステータス🔄 に停滞しているかどうか。

古いタスク検出

前のセッションからタスクが進行中の場合、エージェントはタスクが古くなっている可能性を認識し、続行、再起動、またはスキップするオプションを提供します。

ヒント

状態はリポジトリ内の .github/upgrades/ に存在するため、コードと共に移動します。 ブランチをリモートにプッシュし、別のマシンでプルすると、エージェントが中断したところから続行します。

複数のセッションで作業する

20 プロジェクト ソリューション、複雑なフレームワークのアップグレード、マルチステップモダン化などの大規模なアップグレードは、多くの場合、数日または数週間にわたって複数のセッションにまたがります。 エージェントは、マルチセッション作業を自然に処理します。

  • 永続的な状態: すべてが .github/upgrades/。 メモリ内の状態を失う必要はありません。
  • セッションの独立性: 各チャット セッションは独立しています。 エージェントは、毎回状態ファイルからコンテキストを再構築します。
  • Cross-IDE support: VS Code で開始し、Visual Studioまたは COPILOT CLI で続行します。 状態フォルダーは共有コントラクトです。

複数セッションの作業に関するヒント

  • 状態フォルダーをコミットします。 .github/upgrades/をブランチにプッシュしてフォルダーをバックアップし、チームに表示されるようにします。
  • セッション間で確認します。 tasks.mdexecution-log.mdを読み取り、最後のセッションで発生した内容についてメモリを更新します。
  • 学習に合わせて環境設定を更新します。 エージェントのアプローチを変更する必要があるテストで何かを検出した場合は、次のセッションの開始時にエージェントに指示します。

サポートの依頼

エージェントが何を実行できるか、または何が起こっているのか分かりませんか? 問い合わせ:

知りたいこと 何を言うか
使用可能なアップグレード シナリオ "何ができますか? または "使用可能なシナリオは何ですか?
現在の進行状況 "現在の状態は何ですか? または "進行状況を表示する"
アップグレード 計画 「計画を説明する」 または 「タスクを説明する」
評価の詳細 "評価を表示する" または "評価で何が見つけたか"
使用可能なスキル "どのようなスキルがありますか? または "スキルを一覧表示する"
特定の決定 「なぜ Y より X を選んだのですか?
リスクまたは懸念事項 "このアップグレードのリスクは何ですか?

効率的なコミュニケーション

相互作用の品質は、結果の品質に直接影響します。

スコープを具体的にする

"Data.Access プロジェクトと Data.Models プロジェクトのみを .NET 10"エージェントに明確なフォーカスが与えられます。 "すべてをアップグレード" は機能しますが、エージェントは順序と優先順位についてそれ自体でより多くの決定を行います。

共有コンテキスト

エージェントは、共有しない限り、ビジネス上の制約を認識しません。

  • "Azure App Service で .NET 8 のサポートが 11月に終了するため、アップグレードを行います。"
  • 「これはトラフィックの多い運用サービスであり、API 応答の動作の変更はゼロです。」

制約を表現する

エージェントには、すべきことだけでなく、すべきではないことも伝えてください。

  • "パブリック API サーフェスを変更しないでください。外部コンシューマーがいます。"
  • "Newtonsoft.Json はまだアップグレードできません。共有コントラクトを所有するチームはまだアップグレードされていません。"
  • "従来のレポート モジュールに触れないでください。個別に書き換えられます。"

フィードバックを送る

肯定的なフィードバックは、修正と同様に役立ち、エージェントが正しい軌道に乗っています。

  • "そのアップグレードは優れた外観です。他のリポジトリ プロジェクトに対して同じアプローチを実行します。"
  • "これは機能しますが、このコードベースのプロパティ挿入よりもコンストラクターの挿入を好みます。"

クイック リファレンス

状況 何を言うか
新しいアップグレードを開始する ソリューションを.NET 10にアップグレードします
前の作業を再開する "続行" または "状況はどうですか?"
ガイドモードに切り替える "一時停止" または "ガイド付きモードに切り替える"
自動モードに切り替える "先に進む" または "要求せずに続行"
決定を修正する "実際には、Y の代わりに X を使用してください"
設定を調整する "このソリューションに対して常に X を実行する"
変更の確認 "変更した内容を表示する" または Git ログを確認する
変更を元に戻す "直前の変更を元に戻す"
理由を尋ねる "なぜそのアプローチを選んだのですか?
タスクをスキップする "今のところこのタスクをスキップする"
ヘルプを取得する "何ができますか?