ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

GitHub Copilot App Modernization を使って Azure App Service のアプリを .NET10 にマイグレーションする

.NET 10 が GA しましたので、Azure App Service にデプロイされている ASP.NET Core のアプリケーションをマイグレーションしました。
github.com

これまでは手動によるマイグレーションでしたが、今回は GitHub Copilot App Modernization を使ってみました。

GitHub Copilot App Modernization

.NET 9 から 10 にマイグレーションする手順は、こちらのドキュメントの通りです。
learn.microsoft.com

GitHub Copilot App Modernization を使うと、チャットの @modernize コマンドで .NET アプリを新しいバージョンにアップグレードできます。
learn.microsoft.com

Application

Visual Studio 2026 の GitHub Copilot 画面から、@modernize コマンドでアップグレードを開始します。

何をするか聞かれるので、Start a .NET upgrade workflow と入力します。

対話を進めると、アップグレードプランを提示してくれます。
github.com

.NET と NuGet packages のバージョンを更新するだけで済みそうなので、approve plan と入力します。

その後も対話を進めると、upgrade-to-NET10 ブランチが作成されて計画通りにアップグレードが完了しましたので、finish と入力します。

アップグレードレポートを確認して、コードの変更をコミットします。
github.com

ソリューションに含まれないので仕方ありませんが、GitHub Actions の workflow は更新してくれません。こちらの dotnet-version も忘れずに更新しておく必要があります。

jobs:
  build:
    runs-on: windows-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '10.0.x'
          include-prerelease: true

その他のマイグレーション

GitHub Copilot App Modernization がマイグレーションしてくれなかった NuGet packages のバージョンを更新します。バージョンを更新するほかに、追加で対応した内容が2つあります。

OpenAPI 3.1 対応

.NET 10 で OpenAPI 3.1 のサポートが追加されたので、対応しておきました。
learn.microsoft.com

app.UseSwagger(c =>
{
    c.OpenApiVersion = OpenApiSpecVersion.OpenApi3_1;
});

AutoMapper

AutoMapper はバージョン 15.0 より商用ライセンスが適用されることになりました。しばらくは無料で使いたいので、14.0 を使うことにしました。
www.jimmybogard.com

Azure App Service

App Service 側は、.NET Version を変更するのみです。

以上で、無事に .NET 10 へのマイグレーションが完了しました。


まとめ

GitHub Copilot App Modernization を使って Azure App Service のアプリを .NET10 にマイグレーションしてみました。
今回は .NET と NuGet packages のバージョンを更新するだけで済みましたが、破壊的変更があった場合はどのくらい自動で対応してくれるのか気になりました。
とはいえ、GitHub Actions の更新漏れがあったように、AI が更新した結果をしっかりとレビューすることは必須です。