GitHub Copilot App Modernization を使って .NET のバージョンをアップグレードしてみる
2026.01.05
こんにちは、MS開発部の渋谷です。みなさまはGitHub Copilotを利用していますか?昨今の開発支援ツールの発展によって、このようなツールを使って開発やいわゆる「バイブコーディング」に取り組んでいる方も多いかと思います。今回は、GitHub Copilotの機能を活用したエージェントの中でMicrosoftが先日発表したGitHub Copilot App Modernizationを紹介します。これはいわゆる「レガシーアプリケーション」に対して活用できるツールで、Javaや.NETのアプリケーションを最新のバージョンにモダナイズしたり、Azureへの移行を支援してくれたりするツールです。今回は.NET Frameworkアプリケーションを題材にこの機能を見ていきたいと思います。
ところで、2000年代初頭から20年以上にわたり、.NET FrameworkはWindows環境におけるエンタープライズアプリケーション開発のデファクトスタンダードとして知られてきました。しかし、そのアーキテクチャはオンプレミスのWindows ServerとInternet Information Services(IIS)に深く最適化されており、現代のクラウドネイティブな要件ではあまりみないスタックです。これらのアプリケーションコードはOS固有の機能(レジストリ、ファイルパス、GDI+など)や、IISのパイプライン(
評価フェーズでは、まず依存関係の分析を行い、移行の難易度やリスクを可視化します。
ソリューションエクスプローラーにはWebformのプロジェクトがあることが確認できます。実行すると以下のようなチケット管理ツールが立ち上がります。
はじめに、GitHub Copilot App Modernizationを起動し、.NET10へのアップグレードを指示します。そうするとエージェントがAssessment.mdを作成し、チャット内でもWebformからBalzorへの移行を提案しました。(ASP.NET CoreにはWebformの直接の移行先がないため、Blazorを指定してコードビハインドやViewもすべて書き換えと書かれています)
その後、評価の内容がよさそうであれば、計画フェーズへ進めるように指示します。しばらくすると、plan.mdが作成され、移行の具体的な内容が確認できます。
今回の場合は、ASP.NETからASP.NET Coreへの移行やWebformからBlazorへの移行が含まれているため、多くのファイルが作成、削除されています。plan.mdの内容に同意出来たら、次の実行フェーズに進みます。
実行フェーズではtasks.mdが作成され、エージェントのコード編集等の実行状況についてリアルタイムで確認することが可能です。
すべてのタスクが完了するとアプリケーションは実行可能となるので、実際に実行してみると、Blazor上でもアプリケーションが実行できていることが確認できます。画面には出ていませんが、SQL Serverへのアクセスに利用していたEntity FrameworkもEntity Framework Coreへの移行がされています。
HttpModule, HttpHandler)に依存している場合が多く、これにより、コンテナ化やマイクロサービス化、あるいはLinuxベースのAzure App Serviceへの移行が物理的に不可能になっていることがあります。また、.NET Framework 4.8系はサポートが継続されているものの、新機能の追加は停止しており、新しい機能が使えないことや、パフォーマンス向上の恩恵を受けることが難しくなっています。なお、最新の.NETに移行することで、パフォーマンスの向上やクロスプラットフォーム対応(コンテナを利用したアーキテクチャも検討可能)、開発者体験の向上といったメリットも享受できるため、レガシーコードのモダナイズは注目を集めている状況だと想像できます。
ツール概要
このツールは、受動的にコードを提案するアシスタントではありません。Visual Studio内でチャットセッションを通じて対話する「対話型GitHub Copilotエージェント」として機能します(そのため、Visual StudioとGitHub Copilotのライセンスが必要です)。従来のAIツールのように自由形式のプロンプトを入力するのではなく、このエージェントは構造化された多段階のプロセスで動作するのが最大の特徴です。大きく分けて以下の3つのステップでワークフローは構成されます。- 評価 (Assessment): プロジェクトの構造、依存関係、コードパターンを分析。
- 計画 (Planning): 評価結果に基づき、詳細なアップグレード仕様を作成。
- 実行 (Execution): 計画を具体的なタスクに分割し、コードの変更を実行。
評価フェーズでは、まず依存関係の分析を行い、移行の難易度やリスクを可視化します。
-
非互換APIの検出:.NET Framework固有の技術(
System.Web、AppDomain、WCFサーバーサイドなど)がどこで使われているかの特定。 -
NuGetパッケージの健全性: 現在使用しているパッケージがターゲットフレームワーク(.NET 8など)に対応しているか、代替パッケージが存在するか、脆弱性(CVE)が含まれていないかのチェック。
-
プロジェクト間の依存グラフ: ソリューション内のどのプロジェクトがボトルネックになっているか、どの順序で移行すべきかの推奨順序。
- インプレース更新 vs サイドバイサイド: 既存の
.csprojファイルを直接書き換える(インプレース)か、新しいプロジェクトを作成して段階的にファイルを移行する(サイドバイサイド)か。多くの場合、Gitによるバージョン管理を前提としたインプレース更新が推奨されます。 - 段階的適用(Phased Adoption): 一度にすべてのプロジェクトを移行するのではなく、依存関係の少ないライブラリから順に着手する計画。
- カスタムインストラクションの適用: 開発者が特定のコーディング規約やライブラリ置換ルールを持っている場合、それを計画に組み込むことができる。
-
プロジェクトファイルの刷新: 旧来のXML肥大化した
.csprojを、簡潔なSDKスタイル形式(<Project Sdk="Microsoft.NET.Sdk">)へ変換。 -
ターゲットフレームワークの変更: TFM(Target Framework Moniker)を
net48からnet8.0などへ更新。 -
NuGetパッケージの更新:
packages.configをPackageReferenceへ変換し、互換性のある最新バージョンへのアップデートを実施。 -
コードのリファクタリング: 名前空間の変更(例:
System.Web.Configuration→Microsoft.Extensions.Configuration)や、APIシグネチャの変更に伴うコード修正。 -
コンパイルと修正のループ: 変更適用後にビルドを実行し、エラーが発生すれば即座に修正案を適用。
実際の利用イメージ
今回は、.NET Framework 4.8で作成したASP.NET Web Formのアプリケーションのプロジェクトに対して、モダナイズを実行してみます。
ソリューションエクスプローラーにはWebformのプロジェクトがあることが確認できます。実行すると以下のようなチケット管理ツールが立ち上がります。
はじめに、GitHub Copilot App Modernizationを起動し、.NET10へのアップグレードを指示します。そうするとエージェントがAssessment.mdを作成し、チャット内でもWebformからBalzorへの移行を提案しました。(ASP.NET CoreにはWebformの直接の移行先がないため、Blazorを指定してコードビハインドやViewもすべて書き換えと書かれています)
その後、評価の内容がよさそうであれば、計画フェーズへ進めるように指示します。しばらくすると、plan.mdが作成され、移行の具体的な内容が確認できます。
今回の場合は、ASP.NETからASP.NET Coreへの移行やWebformからBlazorへの移行が含まれているため、多くのファイルが作成、削除されています。plan.mdの内容に同意出来たら、次の実行フェーズに進みます。
実行フェーズではtasks.mdが作成され、エージェントのコード編集等の実行状況についてリアルタイムで確認することが可能です。
すべてのタスクが完了するとアプリケーションは実行可能となるので、実際に実行してみると、Blazor上でもアプリケーションが実行できていることが確認できます。画面には出ていませんが、SQL Serverへのアクセスに利用していたEntity FrameworkもEntity Framework Coreへの移行がされています。
まとめ
今回はGitHub Copilotの新しいツールとしてMicrosoftから発表されたGitHub Copilot App Modernizationを紹介しました。このツールには他にもAzureへの移行支援ツールやJavaのアプリケーションにも対応しているので、ぜひ実際に触ってみてその挙動を確認してみてください。なお、今回紹介したGitHub Copilot App Modernizationツールで移行できないようなアプリケーションは以前ご紹介したApp Service Managed Instanceへの移行も検討することが可能です。以上、最後までご愛読いただき
ありがとうございました。
お問い合わせは、
以下のフォームへご連絡ください。


