GitHub Copilot近代化の概念

GitHub Copilot最新化では、構造化されたアプローチを使用して.NET プロジェクトをアップグレードします。 エージェントのシナリオ、スキル、タスク、ワークフローなど、エージェントのしくみを理解することは、エージェントと効果的に共同作業を行い、最適な結果を得るのに役立ちます。

ヒント

エージェントは、.NETを深く理解し、構造化された計画に従い、フィードバックに適応する熟練した同僚と考えてください。 コンテキストが多いほど、エージェントのパフォーマンスが向上します。

チームメイトとしてのエージェント

エージェントは、バキュームでの自動化ではなく、コラボレーションに優れています。

  • Deep .NET knowledge: エージェントは、C# プロジェクトとVisual Basic プロジェクトの両方について、プロジェクト ファイル、NuGet の依存関係、破壊的変更、および多数の.NET テクノロジにわたるアップグレード パターンを理解します。
  • 構造化ワークフロー: アップグレードのたびに、評価、計画、実行が行われます。 ランダムな変更も、驚きもありません。
  • ユーザー設定について説明します。 " varではなく常に明示的な型を使用する" と言うと、エージェントはその優先設定を scenario-instructions.md に書き込み、セッション間でそれを記憶します。
  • 飛行中に修正可能: 間違った判断をしましたか? エージェントに指示します。 それは適応し、今後修正を適用します。
  • その理由について説明します。「なぜそのアプローチを選択したのですか」と尋ねると、エージェントが決定を進めます。

シナリオ

シナリオは、エンド ツー エンドのマネージド モダン化ワークフローです。 "ソリューションを .NET 10 にアップグレードする" とエージェントに指示すると、.NET version upgrade シナリオがトリガーされます。

シナリオの検出方法

シナリオ名を覚える必要はありません。 エージェントは、関連するシナリオを自動的に検出します。

  1. コードベースを分析して、言語、フレームワークのバージョン、ライブラリ、プロジェクトの種類など、使用しているテクノロジを理解します。
  2. プロジェクトに関連するシナリオを識別します。
  3. 重要度と重みによってシナリオをランク付けします。 最も関連性の高いものが最初に表示されます。

また、"自分のソリューションで使用できるシナリオは何か" を直接確認することもできます。

シナリオの永続化

アクティブな各シナリオは、 .github/upgrades/{scenarioId}/に独自のフォルダーを取得します。 シナリオ フォルダーには、プラン、タスクの進行状況、ユーザー設定、実行ログが含まれています。 このフォルダーは Git リポジトリの一部です。

シナリオの完全な一覧については、「 シナリオとスキルリファレンス」を参照してください

ワークフローのライフサイクル

すべてのシナリオは、同じライフサイクル (3 段階のワークフロー) に従います。

ステージ 1: 評価

エージェントは、作業を開始する前に必要なすべてのものを収集します。

  • ターゲット フレームワーク: アップグレードするバージョン。
  • Git 戦略: エージェントは分岐を提案し、詳細 (ブランチ名、タスクごとのブランチを使用するかどうか、コミットのタイミング) を制御します。
  • フロー モード: 自動 (エージェント ドライブ) またはガイド付き (各ステージを承認します)。
  • シナリオ固有のパラメーター: シナリオによっては、エージェントからさらに質問が寄せられる場合があります。

エージェントは、 .github/upgrades/{scenarioId}/でシナリオ ワークスペースを初期化します。

その後、エージェントはコードベースを分析します。

  • Project依存関係グラフ (トポロジカル順序)
  • ターゲット フレームワークとの NuGet パッケージの互換性
  • API の破壊的変更
  • テスト範囲
  • 複雑さとリスク要因

エージェントは、包括的な評価レポートを assessment.mdに保存します。

評価に基づいて、エージェントはソリューションを評価し、関連するアップグレードの決定を識別します。 適切な既定値が表示され、任意の選択肢を確認してオーバーライドできます。

オプションには、次のようなものがあります。

  • アップグレード戦略: ボトムアップ、トップダウン、またはオールインワン。
  • プロジェクトのアップグレード方法: Web アプリケーションはインプレースリライトまたはサイドバイサイド、ライブラリはインプレースまたはマルチターゲティング。
  • テクノロジの最新化: Entity Framework のアップグレード、依存関係の挿入、ログ記録、構成の選択肢。
  • パッケージ管理: 中央パッケージ管理を導入するかどうかとタイミング。
  • 互換性の処理: サポートされていない API とパッケージに対処する方法。

エージェントは、確認された決定を upgrade-options.mdに保存します。

ガイド付きモードでは、エージェントは、先に進む前にレビューのためにここに一時停止します。

ステージ 2: 計画

エージェントは、評価と確認済みのオプションに基づいてタスク計画を作成します。 計画では、次の 3 つの主要なファイルが生成されます。

  • plan.md: 戦略とタスクの説明を含むアップグレード計画。
  • scenario-instructions.md: ユーザーの好み、決定事項、エージェントのメモリ。
  • tasks.md — エージェントが実行するタスクの順序付きリスト。

ステージ 3: 実行

エージェントは、タスクを順番に処理します。 tasks.mdのタスクごとに、エージェントはサイクル (開始、実行、検証 (ビルドとテスト)、完了) に従います。 エージェントが変更をコミットするタイミングと方法 (タスクごと、タスクのグループごと、または最後) を制御します。 エージェントが動作すると、進行状況を追跡できるように、 tasks.md がライブ 状態インジケーターで更新されます。

アップグレード戦略

評価段階では、エージェントによってソリューションが評価され、次のいずれかの戦略が推奨されます。

戦略 最適な用途 どのように機能するのか
ボトムアップ 深い依存関係グラフを持つ大規模なソリューション リーフ プロジェクト (依存関係なし) から開始し、上方向に作業します。
トップダウン メイン アプリに関するクイック フィードバック アプリケーション プロジェクトから開始し、必要に応じて依存関係を修正します。
一度にすべて 小規模でシンプルなソリューション すべてを 1 回のパスでアップグレードします。

ヒント

エージェントは、プロジェクトに関連する決定のみを表示します。 単純なコンソール アプリでは Web フレームワークの選択肢が表示されず、Entity Framework を使用しないプロジェクトにはデータベースのアップグレード オプションが表示されません。

スキル

スキル は、より小さく、ターゲットを絞ったモダン化機能です。 アップグレード中にエージェントが EF6 コードを検出すると、詳細なステップ バイ ステップのアップグレード手順を含む EF6 からEF-Core スキルが読み込まれます。 アップグレード中にスキルを直接呼び出します。 "プロジェクト内の WCF サービスを CoreWCF にアップグレードします"。

エージェントには、ドメイン別に整理された 30 以上の組み込みスキルが付属しています。

  • データ アクセス: EF6 から EF Core (コード優先と EDMX)、LINQ to SQL、および SqlClient のアップグレード
  • Web/ASP.NET: アイデンティティ、Global.asax、OWIN、MVC ルーティング/フィルター/バンドル、WCF から CoreWCF
  • シリアル 化: Newtonsoft.Json から System.Text.Json へ
  • Cloud: インプロセスから分離型ワーカーモデルへのAzure Functions
  • ライブラリー: ADAL から MSAL、SignalR、PowerShell SDK など

スキルは、エージェントがコードベースで検出した内容に基づいて自動的に読み込まれます。 スキルの読み込みを管理する必要はありません。 必要な内容を説明するだけです。

完全な一覧については、「 シナリオとスキルリファレンス」を参照してください

タスク

タスク は、シナリオ内のアトミック作業単位です。 各タスクは、"Upgrade CommonLib from .NET 6 to .NET 10" や "Upgrade EF6 usage in DataLayer to EF Core" など、アップグレードの特定の境界のある部分を表します。

タスクのライフサイクル

タスクは次の状態を経過します。

  • 利用 可能: 開始する準備ができました。すべての依存関係が満たされました。
  • 進行中: エージェントはタスクに積極的に取り組んでいます。
  • 完了: コードの変更が適用され、ビルドが成功し、テストが成功します。

各タスクについて、エージェントは次の処理を行います。

  1. 関連するスキルとコンテキストを読み込みます。
  2. 複雑さを評価し、タスクにサブタスクが必要かどうかを判断します。
  3. スコープの概要を tasks/{taskId}/task.mdに書き込みます。
  4. コードの変更を実行します。
  5. ビルドとテストを実行して検証します。
  6. 結果を tasks/{taskId}/progress-details.mdで記録します。
  7. 変更をコミットし、次のタスクに移動します。

ステート管理

エージェントは永続的な状態を維持するため、いつでも停止および再開できます。 すべてが .github/upgrades/{scenarioId}/の下のリポジトリに存在します。

File Purpose
scenario-instructions.md ユーザー設定、決定事項、およびカスタム命令。 エージェントの永続メモリ。
upgrade-options.md 確認されたアップグレードの決定
plan.md 戦略とタスクの説明を含むアップグレード 計画
tasks.md タスクの状態を示すビジュアル進行状況ダッシュボード
execution-log.md すべての変更と決定の詳細なログ
tasks/{taskId}/task.md タスクごとのスコープとコンテキスト
tasks/{taskId}/progress-details.md タスクごとの実行に関するメモと結果

再開可能性

チャットを閉じるか、IDE を閉じるか、翌日に戻ります。 エージェントは中断したところから再開します。

  1. 次の操作では、エージェントはワークスペースの現在の状態を自動的にチェックします。
  2. エージェントは、既存のシナリオを検出し、現在の進行状況 ("8 つのタスクのうち 3 つが完了しました" など) を表示します。
  3. エージェントは、以前の中断したセッションで停止した古いタスクを検出し、それらを再開または再起動できるようにします。
  4. エージェントは、 scenario-instructions.mdからユーザー設定を再読み込みします。

IDE 間の継続性

状態は Git に存在するため、アップグレード中に VS Code、Visual Studio、Copilot CLI を切り替えることができます。 .github/upgrades/ フォルダーは、両方の IDE が認識する共有状態です。

ヒント

.github/upgrades/ フォルダーをブランチにコミットします。 ブランチをリモート リポジトリにプッシュして、チーム メンバーが進行状況を表示したり、別のコンピューターでアップグレードを続行したりできるようにします。

フロー モード

エージェントは、監視の量を制御する 2 つのフロー モード ( 自動モードガイド付きモード) をサポートしています。

自動モード

エージェントは、承認のために一時停止することなく、すべてのステージ (評価、計画、実行) を通じて動作します。 主要な結果と進行状況の更新が表示されますが、前進し続けます。

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

ガイド付きモード

エージェントは、各段階の境界においてレビューのために一時停止します。

  • 評価後: "私が見つけたものは次のとおりです。アップグレード オプションを続行しますか?
  • 計画後: "タスク計画を次に示します。実行を開始しますか?
  • 複雑なタスクの内訳の前: "このタスクは複雑です。私はそれを分解する方法を次に示します。

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

いつでもモードを切り替える

  • 「一時停止」または「ガイド付きモードに切り替える」と言って、ガイド付きモードに切り替えます。
  • 自動モードに切り替えるには 、「続行」 または 「先に進む」と 言います。

ヒント

最初のアップグレードのガイド付きモードから開始してワークフローを理解し、快適になったら自動に切り替えます。