この記事は「2025 Japan AWS Jr. Chanpions 夏のQiitaリレー 」の37日目の記事です。
過去の投稿(リンク集)はこちらからご覧ください!
1. はじめに
こんにちは、NRIネットコム株式会社の松澤です!普段は.NETを用いたデスクトップアプリケーションの開発を行っています。
AWS Summit Japan 2025にて、.NETモダナイゼーションツールであるAWS Transform for .NET の存在を知りました。しかし、Microsoft公式が提供しているモダナイゼーションツールである、.NET Upgrade Assistant とは何が違うのかについて疑問を持ちました。
そこで今回は、AWS Transform for .NETを個人開発レベルで軽く利用してみて気づいた点や、.NET Upgrade Assistantとの違いをご紹介します。モダナイゼーションツールを選択するときの参考になりますと幸いです。
2. AWS Transform for .NETとは
AWS Transformは.NET、メインフレーム、VMwareワークロードの3種類のモダナイゼーションを支援するエージェント型AIアシスタントサービスです。
AWS Transform for .NETは、その名の通り、.NETのモダナイゼーションを支援します。また、プレビュー版だったAmazon Q Developer の.NETモダナイゼーション機能が、2025年5月15日に正式リリースされたサービスとなります。
.NETアプリケーションのモダナイズを4倍高速化します
という風に謳っていますが、AIエージェントとして裏側でAmazon Bedrock LLMを利用しており、.NETモダナイゼーションのための体系的なナレッジベースが組み込まれています。また、複数リポジトリにまたがる.NETアプリケーションに対して、並列で行うようになっているため、モダナイズを4倍高速化と言っても過言ではないのかもしれません。
2種類のインターフェース
AWS Transform for .NETはWeb UIおよび、Visual Studio拡張機能(VSIX)の2種類のインターフェースで利用することが可能です。
Web UI
AWS Transformには専用のWeb UIがあります。チャット型のインターフェースからAIアシスタントに対話形式でジョブを実行します。
とはいえ、実際に対話形式で何かしらのジョブを実行する機会は少なく、Collaborationタブから各種設定を行うといった操作が基本になります。
Web UIでモダナイズする場合の最大の特徴は、複数リポジトリにまたがる大規模なモダナイゼーションが実行できることです。 接続したリポジトリすべてを探索し、モダナイゼーション対象のリポジトリに対して一括でモダナイゼーションジョブが実行できます。
また、変換後のコードは新規ブランチに出力するため、もしジョブが失敗したとしても既存ブランチには影響を与えません。
Visual Studio拡張機能(VSIX)
Visual Studio拡張機能では、ソリューション・プロジェクト単位でモダナイゼーションジョブを実行することができます。こちらは複数リポジトリにまたがるジョブを実行するわけではありませんが、プロジェクト単位など、比較的小さな単位でジョブを実行できます。
その他詳細
- サービスクォータにてあらかじめモダナイゼーションに上限がありますが、調整可能となっています
- サポートされるリージョンごとに1,000,000行のコードを変換可能
- 各AWSリージョンにおける1アカウントでの同時.NET変換ジョブ
- Visual Studio拡張機能:10個のジョブ
- Web UI:5個のジョブ
- モダナイゼーションジョブは無料です1
- リージョンは下記2地域でサポートされています
- US East (N. Virginia)
- Europe (Frankfurt)
- こちらのサイトからハンズオンを行うこともできます
3. .NET Upgrade Assistant とは
本ブログにて紹介するAWS Transform for .NETとは別に、Microsoft公式が.NET Upgrade Assistantというモダナイズアシスタントサービスを提供しています。.NET Upgrade Asistant を利用することで、Microsoft Visual Studio 拡張機能から対象のソリューション、プロジェクトのプラットフォームをモダナイズすること可能です。
(補足)そもそもモダナイズをするべきなのか
前提として、既存の.NET Frameworkのプロジェクトが非推奨となっているわけではなく、.NETに必ずモダナイズする必要はありません。 また、.NET Frameworkは2025年8月現在では明確なEOLが決まっていません。その一方、.NET 8.0 の最新リリース(v8.0.18)サポート終了は2026年11月10日2と定められています。
とはいえ、モダナイズによるメリットも様々ありますので、検討する価値はあるかと思います。
-
クロスプラットフォーム対応
- .NET FrameworkはプラットフォームがWindowsのみサポートされているのに対し、.NETはクロスプラットフォーム対応
- サーバーのOSをWindowsからLinuxに変更することで、ライセンスコストを削減
-
モダンなC#構文の利用や.NET新機能のサポート
- Span構造体の利用や非同期処理など、C#のモダンな機能を利用できる
- .NET Frameworkは新機能は追加されないが、.NETは開発中で新機能が追加される
4. AWS Transform for .NETと .NET Upgrade Assistantの比較
モダナイゼーションツールとしてAWS Transform for .NET 及び .NET Upgrade Assistantを紹介しましたが、両者は大きな違いがありますので下記にまとめました。
AWS Transform for .NET | .NET Upgrade Assistant | |
---|---|---|
対象プロジェクトタイプ | ASP.NET, Class libraries, Console, SPA のビジネスロジック層 |
ASP.NET, AzureFunctions, WPF, WinForms, Class libraries, Console, Xamarin.Forms, .NET MAUI, UWP |
非対象プロジェクトタイプ | WebForms, WinForms, Blazor UI components, コア互換性を持たないWin32 DLL |
特に記載なし |
対象アップグレード | .NET Framework 3.5x → .NET 8, .NET 3.1. → .NET 8, .NET 5.x+ → .NET 8 |
.NET Framework → .NET 6+, .NET Core → .NET 6+, .NET → .NET6+ (.NETのバージョンアップ), Azure Functions v1~v3 → v4, Xamarin.Forms → MAUI |
料金 | 無料 | 無料 |
モダナイゼーションの範囲 | 複数リポジトリの横断(Web UI), ソリューション単位, プロジェクト単位 (Visual Studio拡張機能) |
ソリューション単位, プロジェクト単位, コンポーネント単位, ファイル単位 |
UI | 専用Web UI, Visual Studio拡張機能 |
Visual Studio拡張機能, CLIツール |
強み | 複数リポジトリをまとめてモダナイズすることができ、大規模なモダナイゼーションジョブに適する | 幅広いプロジェクトタイプのモダナイズをサポート |
まとめると、AWS Transform for .NETは、複数リポジトリを横断して大規模なモダナイゼーションができることが強みであるのに対し、.NET Upgrade Assistantは幅広いプロジェクトタイプに対応していることが強みです。明確にどちらかのサービスが有用であるというわけではなく、モダナイズの対象となるソリューションによって選択するべきツールが変わってきます。
両ツールは無料となっているため、気軽に組み合わせることも可能です。AWS Transform for .NETでモダナイゼーションを行い、新規作成されたブランチに対して.NET Upgrade AssistantでAWS Transformでは対象外のプロジェクトをモダナイズするといった使い方もできそうです。
5. AWS Transform for .NETのデモ
事前準備
ソリューションの作成
今回はモダナイゼーションを行うためにBentoAppという「お弁当販売管理システム」を模したソリューションを事前に作成しました。6つのソリューションから構成されており、プラットフォームが極力混在するような構成としました。
プロジェクト名 | プラットフォーム | 役割 | アプリケーション種類 |
---|---|---|---|
BentoApp.WinForms |
.NET Framework 4.7 | 受注登録や在庫確認などの操作UI | Windows Form アプリケーション |
BentoApp.Reports |
.NET Framework 4.8 | 請求書・製造指示書・売上帳票の出力 | Windows Form アプリケーション |
BentoApp.UI.Modern |
.NET 8 | 新UI (WPFやWinUIベース)、管理画面やダッシュボードなど | WPF アプリケーション |
BentoApp.ApiIntegration |
.NET Framework 4.8 | 配送業者、オンライン注文API(例:UberEatsなど)との連携 | クラスライブラリ |
BentoApp.Shared |
.NET Standard 2.0 | DTO/モデル/共通関数/バリデーションなど | クラスライブラリ |
Batch |
.NET Framework 4.8 | 提携処理業務を行うバッチ | コンソールアプリケーション |
BentoApp.UI.Modern
の画面
また、GitHubに作成したソリューションのリポジトリを作成しました。
GitHubリポジトリの連携
BentoAppソリューションのリポジトリとAWS Transformを連携するために、Developer Tools Consoleの接続機能を用います。
- 「接続を作成」を押下
- プロバイダー、接続名を記入
- オプションでGitHub Appをインストール
上記の手順を踏むと、GitHubリポジトリの連携は完了です。
AWS Transformへのユーザーの割り当て
AWS Transformを利用するためには 、IAM Identity Centerで指定されたユーザーもしくはIAMユーザーを割り当てる必要があります。
AWS Transformコンソール上から新しいユーザーを割り当てることも可能です。今回は新しいユーザーを追加して割り当てました。
1. Web UI上での実行
では事前準備が完了したので、Web UIでモダナイゼーションジョブを実行してみましょう。
AWS Transform のコンソールから、「ウェブアプリケーション URL」をコピーし、ブラウザ上で遷移します。
先ほど作成したユーザーでログインを行います。ログイン完了後、Web UIに遷移します。
Web UIに遷移後、ワークスペースを選択します。今回は「transform-BentoApp-workspace」というワークスペースを作成し、そこでジョブを作成することとします。
「Jobs」タブの「Create a job」を押下すると、チャットにて、job typeを聞かれます。.NET modernizationをプロンプトに入力すると、ジョブを作成できます。
ジョブは以下の流れで実行されます。
- Get resouces:コネクタの作成
- Discover resouces for transformation:.NETに移行可能なリポジトリを精査
- Prepare for transformation:ジョブの対象リポジトリやオプションを選択
- Transform:ジョブの実行
Get resouces
ジョブを作成すると、自動的に「Get resouces」が実行されます。ここで、コネクタを作成します。
「Collaboration」タブからAWS Account IDを入力します。
AWS Account IDを入力すると、「AWS Transform コネクタ作成リクエスト」のリンクが作成されるので、遷移します。
そして、「AWS Transform コネクタ作成リクエスト」から「承認」を押下します。
承認して、コネクタ情報に問題がなければ「Finalize connector」を押下します。これにてリポジトリとの連携が可能となります。
Discover resouces for transformation
連携後は「Discover resouces for transformation」が実行され、リポジトリが精査されます。
Prepare for transformation
精査後は「Prepare for transformation」に遷移し、下記項目を設定します。
- Job details
- Target branch名(モダナイゼーションを行うブランチ名)の修正
- Target version(移行先.NETのバージョン)の選択
- Default setting
- .NET Standardプロジェクトのモダナイズの可否
- MVC Razor view から ASP .NET Core Razor Viewへのモダナイズの可否
- Choose transformation plan
- AWS Transformによって自動生成されたプランか、カスタムプランの選択
- Selected repositories
- モダナイズを行うリポジトリの選択
それぞれ選択を行い、問題なければ「Confirm repositories」を選択します。
選択結果が表示されますので、「Approve and start transformation」を押下すると、ジョブが実行されます。ジョブの実行中は「Worklog」タブでログを見ることもできます。
Transform
30分ほど過ぎると、ジョブが完了しました。jobの実行結果は「Dashboard」タブで閲覧可能です。どのプロジェクトがモダナイズに成功したかなどを確認することができます。
※ 何回かジョブを実行しており、スクリーンショットのジョブ名が変わっていますがご了承ください。
今回のジョブでは下記2つのプロジェクトが.NET 8にモダナイズされました。
-
Shared
:.NET Standard 2.0 -
ApiIntegration
:.NET Framework 4.8
UI.Modern
はWPF、WinForms
、Reports
はWindows Formアプリケーションなのでモダナイズされませんでしたが、クラスライブラリであるShared
、ApiIntegration
はモダナイズされました。ConsoleアプリケーションであるBatch
はモダナイズされるかと思いましたが、モダナイズはされませんでした。
そして、新しくtransform-6d683b55
というブランチが作成され、モダナイズ結果がAWS Transform commit for jobId {実際のID}
というコメントでcommitされ、リポジトリにpushされていました。Pull Request自体は手動で作成しなければならないようです。
コミットを確認してみると、実際に修正されたのは、C#プロジェクト構成ファイル(csprojファイル)のみでした。.NET Frameworkのcsprojファイルでみられるような冗長的な記載を丸ごとなくして、.NETでみられるすっきりとした記述になりました。
モダナイゼーションジョブを一通り実行したところ、6プロジェクトで30分程度かかりました。
2. Visual Studio拡張機能(VSIX)での実行
モダナイズの流れはWeb UIと同じですが、リポジトリに接続しない分、作業は少ないです。
初めに、プラグインである「AWS Toolkit」をVisual Studioにインストールします。
その後、IAM Identity Centerを用いて、認証を行います。認証に関しては下記を参考にしていただければと思います。
環境構築が完了したら、Visual Studioのソリューションエクスプローラーから、任意のソリューション・プロジェクトを右クリックし、「Port solution with AWS Transform」を選択します。
こちらはソリューションを選択した場合のモーダルです。.NET のtargetを選択し、default settingを設定したのちに「Start」を押下します。
押下後は自動的にモダナイズが行われます。「Code Transformation Plan」タブでCode groupがどのプロジェクトに依存するかを洗い出してくれます。
モダナイズの進捗は「AWS Transform Hub」で確認できます。
モダナイゼーションの結果は「Transformation summary」から確認できます。また、モダナイゼーションのレポートをダウンロードしたり、DiffをVisual Studio上から確認することができます。
モダナイゼーションの結果自体は、Web UIで実行したジョブと同じものになりましたが、リポジトリを探索する工程がなかったため、10分程度で完了することができました。
6. まとめ
今回はAWS Transform for .NETを用いて、Web UI、Visual Studio拡張機能それぞれから、モックアプリケーションに対してモダナイゼーションジョブを試してみました。実際に試してみた所感と、結論をまとめたいと思います。
所感
- 実行の手間自体は、AWS Transform for .NETと、.NET Upgrade Assistantで変わりない
- モダナイゼーションを行いたいソリューションが一つの場合は、Visual Studio拡張機能を利用するで十分
- とはいえ、この場合は対象プラットフォームが多い.NET Upgrade Assistantを利用する方が良いかと思います
- Web UIのチャットを利用する旨みが少ない
- モダナイゼーションジョブを実行するワークフローの中でチャットを利用することは正直あまりありません
- 失敗したときに、なぜ失敗したかを聞くというような、ジョブに対して何かしらの質問をするといった用途では利用することができました
- WinForm、WPFなどのUI系プロジェクトのモダナイゼーションも行ってほしい
- 業務用デスクトップアプリケーションのモダナイズというよりかは、UI部分が少ないマイクロサービスで構成されるような.NET Frameworkのアプリケーションで利用されることを前提としているため、UI系プロジェクトはサポートしていないのかもしれません
- リポジトリすべてを見なくてもよい
- 現状、リポジトリを選択することができないため、モダナイズの対象ではないリポジトリも見に行ってしまいます
- リポジトリを探索する時間が、少し長い気がしました
結論
- 複数リポジトリにまたがる大規模なモダナイゼーションならAWS Transform for .NETが便利
- 1つのソリューションやUIに関するプロジェクトに関しては.NET Upgrade Assistantが便利
無償で大規模なモダナイゼーションを行うことができるツールですので、.NETのモダナイゼーションを行いたい際はぜひ検討していただければと思います。
本ブログがモダナイゼーションツールの選択の判断材料となりましたら幸いです。
-
AWS Transform の利用自体には追加料金はかかりませんが、Transform が生成する CloudFormation/CDK テンプレートや設定を適用して作成された AWS リソース(例:CloudTrail のログ配信先として利用する Amazon S3 バケットなど)については、通常通り利用料金が発生します ↩