🌟

AWS Transform for .NET に ASP.NET WebForm をかけてみた

に公開

はじめに

AWS Transform for .NET で、 .NET でサポートされていない ASP.NET WebForm の変換を試してみます。

AWS Transform for .NET とは

AWS Transform for .NET は、レガシーな .NET Framework アプリケーションを最新のクロスプラットフォーム対応 .NET へ移行するのを支援する AIベースのコード変換ツール です。

https://aws.amazon.com/jp/transform/net/

AWS Summit Japan 2025 でもセッションがありました(これで存在を知りました)。セッションのアーカイブも公開されているので詳細についてはこちらを参照ください。

https://summitjapan.awslivestream.com/aws-28

5月にリリースされた Microsoft の GitHub Copilot app modernization for .NET が .NET Core 3.x 以降をターゲットにしていて.NET Framework の移行には従来からある Upgrade Assistant を薦めているのと比べると野心的な取り組みだと思います。

AWS Transform for .NET の使い方

こちらの記事が非常に参考になります。

https://dev.classmethod.jp/articles/transform-net-generally-available/

変換元アプリ

ASP.NET WebForm テンプレートから作られるアプリそのままです。

https://github.com/tkeydll/aws-transform-test

結果

ちゃんと、エラーになりました。

エラーの詳細までは出力されておらず、どのような理由で変換に失敗したのかは AWS Transform のコンソールからは分かりませんでした。
(チャットで聞いたらプロジェクト名から推測して回答してくれました)

コードの互換性を分析するプロセスがあるという事なので、そこでしっかりはじかれているのだろうという事は想像できます。


https://pages.awscloud.com/rs/112-TZM-766/images/AWS-28_Migration_AWS-Summit-JP-2025.pdf

.NET Framework しかサポートしていないライブラリを含むコンソールアプリ

これだけでは面白くないのでこのようなアプリを変換してみます。
使うライブラリは Oracle.ManagedDataAccess です。

コード

単純にインスタンスを作成するだけです。

using System;
using Oracle.ManagedDataAccess.Client;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Framework version: " + Environment.Version);

            using (var conn = new OracleConnection("User Id=hr;Password=hr;Data Source=localhost:1521/orclpdb1.localdomain"))
            {
                Console.WriteLine(conn.ToString());
                Console.WriteLine(conn.ConnectionString);
            }

            Console.WriteLine("Press any key.");
            Console.ReadLine();
        }
    }
}

実行結果はこうなります。

結果

変換に成功しました!

コンソールアプリケーションは AWS Transform for .NET でサポートされてますし、Oracle.ManagedDataAccess.Core でも C# のコードは同じなので、言語の変換と言う観点なら成功するのも理解できます。

変換が成功した場合、変換後のコードはリポジトリ上の新しいブランチに作成されます。

差分を見てみると、csproj が丸々 .NET に置き換わっており、さらに参照するパッケージも .NET 版に変更されています!

> git diff main | Select-String -Pattern "oracle" -SimpleMatch

-    <Reference Include="Oracle.ManagedDataAccess, Version=4.122.23.1, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL">
-      <HintPath>..\packages\Oracle.ManagedDataAccess.23.8.0\lib\net472\Oracle.ManagedDataAccess.dll</HintPath>
     <None Include="Oracle.DataAccess.Common.Configuration.Section.xsd">
+    <PackageReference Include="Oracle.ManagedDataAccess.Core" Version="3.21.130" />

https://github.com/tkeydll/aws-transform-test/pull/1/files

ビルドも問題なく通り、.NET8 で実行されました。

おわりに

AWS Transform for .NET を、失敗しそうなシチュエーションで使ってみました。
そもそも .NET でサポートされていない WebForm がちゃんとエラーになることは想定内でしたが、使用するライブラリを .NET 対応の別のライブラリに変更までしてくれたのは期待以上でした。

もっと複雑な実業務のアプリケーションで試す価値もありそうですし、手持ちの .NET Framework アプリケーションに対して、とりあえず片っ端から実行してみても良いなという印象です。

今のところ無償らしいので!

Discussion