Amazon Web Services ブログ
AWS Transform Custom を使用した VB6 アプリケーションのモダナイズ
本記事は 2026 年 4 月 17 日 に AWS Migration & Modernization Blog で公開された「Modernize VB6 Applications at Scale with AWS Transform Custom 」を翻訳したものです。
想定所要時間 : 90 〜 120 分
レベル : 上級 (400)
Microsoft は Visual Basic 6.0 (VB6) の延長サポートを 2008 年に終了 (*) しましたが、金融サービス、保険、ヘルスケア、製造業など、数千ものミッションクリティカルなアプリケーションが依然として VB6 に依存しています。これらのアプリケーションには数十年分のビジネスロジックが含まれていますが、年々メンテナンスが困難になっています。VB6 開発者は労働市場に残る人数が減少しているため採用コストが上昇し、パッチ未適用の脆弱性はコンプライアンス違反のリスクを高め、モノリシックなアーキテクチャは AI、アナリティクス、クラウドサービスとの統合を困難にしています。
* 訳注:厳密には、VB6 の IDE のサポートは終了してますが、VB6 のランタイムはまだサポートはされています。ランタイムは Windows のライフタイムに合わせてサポート継続されていますが、対応は重大なセキュリティ問題等に限定されています。詳細はこちらを参照してください。
これらの課題は、AWS Transform custom でカスタム変換プランを作成することで解決できます。
この記事では、AWS Transform custom のエージェンティック AI 機能を活用して、組織固有のビジネスルールを維持しながら VB6 アプリケーションを大規模にモダナイズする方法を紹介します。
VB6 モダナイゼーションの課題
VB6 アプリケーションのモダナイゼーションには、単純な構文変換を超えた固有の課題があります。AWS Transform for .NET は .NET Framework アプリケーションの自動ポーティングを提供していますが、VB6 には固有の特性があるため、異なるアプローチが必要です。
VB6 のモダナイゼーションでは、レガシープラットフォームとモダンな .NET の間にある根本的なアーキテクチャの違いに対処する必要があります。言語レベルでは、VB6 の手続き型および COM ベースのパターンをオブジェクト指向の C# 構造にマッピングする必要があります。ユーザーインターフェースも、ActiveX コントロールを使用した VB6 フォームから Blazor や ASP.NET Core MVC などのモダンな Web フレームワークへの変換が必要です。データアクセスパターンはレガシーな ADO や DAO から Entity Framework Core の async/await パターンに移行し、COM 依存関係は .NET ネイティブの代替手段や NuGet パッケージに置き換える必要があり、エラーハンドリングは On Error Resume Next や On Error GoTo パターンから構造化された try-catch 例外処理に移行します。
サンプルアプリケーションの紹介
Salmon King Seafood (SKS) という VB6 Multiple Document Interface (MDI) アプリケーションを使って AWS Transform custom を解説します。これは典型的なエンタープライズモダナイゼーションの課題を表すアプリケーションです。SKS は以下の特徴を持つ水産物受注管理システムです。
- 15 以上の VB6 フォーム – 受注、顧客管理、商品カタログ、在庫管理、承認ワークフローを含む
- 3 つの VB6 モジュール (modConnection.bas、modFunctions.bas、modMain.bas) – 共有ビジネスロジックとデータベース接続を含む
- SQLite データベース (Orders.db) – ADO データコントロールとデータバインディングを通じてアクセス
- 標準 VB6 コントロール – MSFlexGrid、ListView、Toolbar、ImageList、ComboBox、Control Arrays を含む
- MDI アーキテクチャ – メインコンテナフォームとメニューからトリガーされる子フォーム
このアプリケーションは、エンタープライズアプリケーションでよく見られる VB6 パターンを実装しています。
- イベントハンドラを持つフォームベースの UI
- データバインディングを使用した ADO データアクセス
- COM ベースのコントロール
- モジュール内の手続き型ビジネスロジック
これらの要素により、SKS はエンタープライズ VB6 モダナイゼーションで遭遇する複雑さを代表するものとなっています。
ソリューション概要
VB6 から C# へのモダナイゼーションには、AWS Transform custom の複雑な変換パターンの学習・適用機能を活用できます。エンドツーエンドのプロセスは以下のステージに従います。
- 評価 – VB6 アプリケーションポートフォリオのスコープと複雑さを評価する
- 定義 – VB6 から C# への変換パターン、ビジネスルール、コーディング標準を含むカスタム変換を定義する
- 実行 – 大規模に変換を実行する
- レビューと反復 – フィードバックループによる継続的な改善を行いながらレビューと反復を行う
このアーキテクチャにより、変換定義を一度作成してテストし、数百のアプリケーションに適用できます。
前提条件
開始する前に、以下を確認してください。
- AWS Transform Custom へのアクセス権を持つ AWS アカウント。現在の料金の詳細については、AWS Transform の料金ページをご覧ください。
- ATX CLI (Command Line Interface) がインストールされた MacOS または Linux 環境。詳細なセットアップ手順については、AWS Transform custom 前提条件ガイドを参照してください。
- **Windows 開発者の場合**: WSL2 (Windows Subsystem for Linux) をインストールし、Ubuntu またはその他の Linux ディストリビューションから ATX CLI を実行してください。CLI は `/mnt/c/` パスを通じてローカルコードベースを直接操作します。
- 変換後のアプリケーションをテストするための .NET 10 SDK 以降
- コードレビュー用の Visual Studio 2022 以降または Visual Studio Code
- VB6 および .NET の開発知識
- 有効な認証情報が設定されている Git があること
環境の準備
Salmon King Seafood (SKS) サンプルアプリケーションをダウンロードします。これには、典型的なエンタープライズ VB6 ワークロードを代表する VB6 MDI アプリケーションが含まれています。
リポジトリをローカルマシンにクローンします。
git clone https://github.com/GAPVelocityAI/SKSVB6.git
cd SKSVB6
Windows で WSL2 を使用している場合は、両方の環境からアクセス可能なパスにクローンします。
git clone https://github.com/GAPVelocityAI/SKSVB6.git /mnt/c/Projects/SKSVB6
cd <path-to-repository>
リポジトリの内容を確認します。VB6 プロジェクトファイル (SKS.vbp)、フォームファイル (.frm/.frx)、モジュール (.bas)、SQLite データベース (Orders.db) が表示されます。
ls -la *.vbp *.frm *.bas *.db
変換追跡用にリポジトリを初期化します。
git add .
git commit -m "Baseline before VB6 to C# transformation"
次に、リファレンスドキュメントを含むリポジトリをクローンします。このリポジトリには、AWS Transform にコンテキストとして渡すビジネスルールと変換例が含まれており、組織の標準に合ったコードを生成します。
git clone -b dotnet-transform-custom https://github.com/aws-samples/dotnet-genai-samples.git
ウォークスルー
以下のセクションでは、AWS Transform CLI を使用して VB6 コードをモダンな C# プロジェクトに変換する手順を説明します。
ステップ 1: VB6 アプリケーションを評価する
変換定義を作成する前に、VB6 ポートフォリオのスコープと複雑さを把握します。SKS リポジトリをクローンした状態で、ATX CLI を起動して評価を開始します。
atx custom def exec -p <path-to-repository> \
-n 'AWS/early-access-comprehensive-codebase-analysis' \
-t
パラメータ :
- -p: ソースプロジェクトのパス (クローンした SKS リポジトリ)
- -n: 変換定義名
- -t: 変換に関わるすべてのツールを信頼し、実行中に AWS Transform が許可を求めて一時停止するのを防ぐ
AWS Transform custom は、シェルスクリプトなどの特定のアクションを実行するために許可を必要とします。上記のコマンドの –t 引数により、ツールはユーザーに継続的にプロンプトを表示することなく実行できます。
評価では SKS プロジェクトを分析し、フォーム数 (15 以上)、モジュール数 (3)、COM コンポーネントの依存関係 (MSFlexGrid、ListView)、データベースアクセスパターン (ADO with SQLite)、推定変換複雑度スコアを含む包括的なレポートを生成します。
この評価レポートを使用して、VB6 アプリケーションを変換する際に AWS Transform custom に追加のコンテキストを提供します。
ステップ 2: VB6 から C# へのカスタム変換定義を作成する
次に、VB6 からモダンな C# への変換パターンとルールをキャプチャするカスタム変換定義を作成します。AWS Transform custom は、提供された例、ドキュメント、ビジネスルールから学習し、これらのパターンを一貫して適用します。
対話型 CLI を起動します。
atx -t
プロンプトが表示されたら、変換の説明として VB6 to C# ASP.NET Core web application migration と入力します。AWS Transform custom は既存の変換を検索し、この特定のシナリオに該当するものが見つからない場合、カスタム変換を作成するかどうかを尋ねます。「create a new one」と入力して確認します。
図 1 – atx cli の起動
変換コンテキストとビジネスルールの提供
AWS Transform custom は、ドキュメント、移行ガイド、サンプルコードの提供を求めます。ここで組織固有の要件を追加します。SKS アプリケーションについては、そのアーキテクチャに関するコンテキストを提供します。
Salmon King Seafood (SKS) という VB6 MDI アプリケーションがあります。ソースコードは <path-to-repository> にあります。注文受付、顧客管理、製品カタログ、在庫管理、承認ワークフローなど、15 以上のフォームがあります。3 つのモジュール (データベース接続用の modConnection.bas、ユーティリティ関数用の modFunctions.bas、アプリケーションのエントリ ポイント用の modMain.bas) を使用しています。データベースは SQLite で、データ バインディングを使用した ADO データ コントロールを介してアクセスします。コントロールには、MSFlexGrid、ListView、Toolbar、ImageList、およびコントロール アレイが含まれます。これを .NET 10 をターゲットとする ASP.NET Core Blazor Server アプリケーションに変換してください。
組織向けの移行パターンのカスタマイズ
移行の精度を向上させるために、組織固有のマッピングルールを提供します。これらはユーザーが作成したマークダウンファイルで、AWS Transform custom からプロンプトが表示された際に参照します。AWS Transform custom はこれらを変換プランに組み込みます。プロンプトが表示されたら、対話型セッション中に VB6 ソースコードとともにこれらのファイルを参照します。
図 2 – 変換プランへのビジネスルールやその他のコンテキストの追加
変換例の参照
<path-to-repository>/dotnet-genai-samples/src/Amazon.GenAI.TransformCustom/vb6-csharp-references/example-transformations.md ファイルを確認します。ATX エージェントがサンプル変換を求めるプロンプトを表示したら、以下のように参照します。
変換前後の例は、<path-to-repository>/dotnet-genai-samples/src/Amazon.GenAI.TransformCustom/vb6-csharp-references/example-transformations.md にあります。
企業コーディング規約の参照
AWS Transform custom では、組織のコーディング規約を変換に使用することでコード生成を制御できます。これには特定の C# の機能や規約を含めることができます。AWS Transform custom はこれらを使用して、チームのスタイルに合ったコードを生成します。<path-to-repository>/dotnet-genai-samples/src/Amazon.GenAI.TransformCustom/vb6-csharp-references/coding-standards.md ファイルを確認します。組織のプラクティスに合わせて独自の規約を作成できます。
例 :
<path-to-repository>/dotnet-genai-samples/src/Amazon.GenAI.TransformCustom/vb6-csharp-references/coding-standards.md で定義されているコーディング規約を適用してください。
ターゲットアーキテクチャ仕様の参照
オプションとして、<path-to-repository>/dotnet-genai-samples/src/Amazon.GenAI.TransformCustom/vb6-csharp-references/target-architecture.md にあるような、望ましい出力アーキテクチャを記述したドキュメントを使用できます。
AWS Transform custom は参照されたすべてのファイルを読み取り、組織のパターン、規約、アーキテクチャに合った変換プランを生成します。
生成された変換定義
あなたの入力に情報に基づいて、AWS Transform custom はフェーズごとに整理された包括的な変換定義を生成します。
- フェーズ 1 – 分析 : VB6 コンポーネントのインベントリ、依存関係の特定、依存関係グラフの作成
- フェーズ 2 – プロジェクト構造 : ASP.NET Core Blazor Server プロジェクトの生成、NuGet パッケージの設定、依存性注入のセットアップ
- フェーズ 3 – データレイヤー : ADO/DAO から Entity Framework Core への変換、DbContext とエンティティモデルの生成 (適切な場合は record 型を使用)
- フェーズ 4 – ビジネスロジック : モジュールからサービスクラスへの変換 (プライマリ コンストラクターを使用)、関数から async メソッドへの変換
- フェーズ 5 – UI レイヤー : VB6 フォームから Blazor コンポーネントへの変換、イベントハンドラの変換
- フェーズ 6 – 検証 : ビルド成功の確認、ユニットテストの生成、機能的等価性のテスト
変換定義をすぐに適用するか、レビューして修正するか、レジストリに公開して再利用するか、新しいプランを開始するかを選択できます。次のステップでは、大規模に再利用できるように変換定義を公開します。
AWS Transform custom は変換プランの名前と説明を提案してきます。そのまま受け入れるか、必要に応じて修正できます。これで変換定義がチーム全体で利用可能になります。
カスタム変換定義の表示と管理
公開後、対話型エージェントまたは以下の CLI コマンドを使用して、カスタム変換定義と利用可能なすべての AWS マネージド変換を表示できます。
atx custom def list
図 3 – ユーザーが作成したカスタム変換プランの一覧
このコマンドは、AWS マネージド変換 (AWS/ プレフィックス付き) とカスタム定義の変換の両方を表示します。カスタム定義の下に VB6-to-CSharp-Blazor-Migration 変換プランが表示されます。
ステップ 3: 変換を実行する
カスタム変換定義を公開したら、VB6 アプリケーションのモダナイゼーションを実行できます。プロンプトが表示されたら、プロジェクトに対して変換プランを実行します。リポジトリへのパスと、変換後にプロジェクトをビルドするためのビルドコマンドを与える必要があります。
図 4 – 変換を検証するためのビルドコマンドの追加
以下のコマンドを使用して変換プランを直接ターミナルから実行することもできます。
atx custom def exec -p <path-to-repository>\
-n 'VB6-to-CSharp-Blazor-Migration' \
-t
AWS Transform custom が認識すべき追加のコンテキストを提供するかどうかを尋ねられます。これは、保存された変換定義には含まれないその場限りのコンテキスト (コード分析で生成されたドキュメントなど) を提供する場合に便利です。
図 5 – 変換プラン生成前の追加コンテキストの追加
プロンプトに回答すると、AWS Transform は実行またはレビュー・修正するための変換プランを生成します。
図 6 – 変換プランのレビューまたは続行
変換プランの内容に問題なければ続行する
変換エージェントは SKS プロジェクトの構造を分析し、MDI コンテナ (frmMain.frm)、子フォーム、モジュール、データベースパターンを特定してから、変換定義を適用します。エージェントは以下を変換します。
- frmMain.frm (MDI コンテナ) → ナビゲーションメニュー付きの Blazor MainLayout.razor
- frmCustomers.frm、frmProviders.frm など → 個別の Blazor ページコンポーネント
- modConnection.bas → Entity Framework Core と SQLite プロバイダーを使用した SksDbContext.cs
- modFunctions.bas → ドメインごとに整理された拡張メソッドクラス
- MSFlexGrid データグリッド → データバインディング付きの Blazor テーブルコンポーネント
- ADO データコントロール → async/await を使用した Entity Framework Core クエリ
ステップ 4: レビュー、テスト、反復
変換が完了すると、AWS Transform custom は変換されたコードを新しいブランチまたはディレクトリに出力し、変換レポートと手動修正の次のステップを提示します。
変換結果のレビュー
変換レポートには、以下を含む終了基準の検証が含まれます。
- dotnet build がエラーゼロで成功
- すべての VB6 フォームが Blazor コンポーネントに変換済み (例: frmCustomers.frm → Customers.razor、frmOrderReception.frm → OrderReception.razor)
- データアクセスレイヤーが Entity Framework Core と SQLite プロバイダーおよび async パターンを使用 (ADO/ADODC データコントロールを置換)
- COM 依存関係の排除 — MSFlexGrid は Blazor テーブルコンポーネントに、Toolbar/ImageList は Blazor ナビゲーションに置換
- エラーハンドリングが On Error 文から構造化された try-catch 例外処理に変換
- 仕様に従ったモダンな C# 機能の適用 (レコード型、プライマリコンストラクター、パターンマッチング)
- modConnection.bas が IDbContextFactory<SksDbContext> を使用した登録済み Dependency Injection (DI) サービスに変換
AWS Transform は 1 回の実行で検証基準を満たさない場合があります。変換の実行後、成功した部分と失敗した部分のサマリーを含む部分的な変換結果が得られることがあります。以下に変換結果を示します。
図 7 – 完了した変換結果
フィードバックプロンプトから、未達成の基準に対処するために変換を再実行できます。変換された SKS アプリケーションを検証するには、ターミナルに切り替えて以下を実行します。
cd <path-to-your-project>
dotnet build
dotnet run
ブラウザで https://localhost:<port> にアクセスし、以下に示すように Blazor アプリケーションが受注、顧客管理、商品カタログのページを正しくレンダリングすることを確認します。
図 8 – 請求書作成ページ
図 9 – 注文作成ページ
機能が不足している場合は、CLI にフィードバックを返して変換結果を繰り返し改善します。
Transform コマンドのパフォーマンス
Transform custom コマンドは、変換対象のコードベースのサイズに応じて、完了までに最大 60 分かかる場合があります。コードファイルや依存関係が多い大規模なプロジェクトでは、当然ながらより多くの処理時間が必要になります。
変換の制限事項について
Transform custom の機能では、VB6 アプリケーションのすべての機能を自動的に変換できるとは限りません。変換完了後、ソースの VB6 アプリケーションと変換先の C# アプリケーション間の機能を比較・検証する必要があります。変換されなかった不足機能については、Kiro や Amazon Q Developer などの AI 搭載ツールを使用して、ソースから変換先のコードベースへの変換・移植を支援できます。
ユニットテストの重要性
ユニットテストは、変換プロセス全体を通じて機能の正当性を検証します。変換されたコードが元の VB6 アプリケーションと同一の動作をすることを確認し、変換中に導入された不一致やリグレッションを迅速に特定するのに役立ちます。変換前に一連のテストを整備してください。これがリグレッションテストの基準となり、変換後も同等に動作することを検証できます。
まとめ
組織固有のパターン、ビジネスルール、モダンな C# 機能の設定を含むカスタム変換定義を使用することで、組織に蓄積された知見を維持しながら数百の VB6 アプリケーションを体系的にモダナイズできるようになりました。
変換を一度定義すれば、アプリケーションポートフォリオ全体に適用できます。これにより、再利用可能な変換定義に組織に蓄積された知見が保存されます。フィードバックループによる継続的な改善により、各変換はより洗練され、レコード型、プライマリコンストラクター、パターンマッチングなどのモダンな C# 機能がコードベースに自動的に適用されます。モダナイズされたアプリケーションは Linux と AWS Graviton 上で動作し、インフラストラクチャコストを削減できる可能性があります。
AWS Transform custom を使用して VB6 アプリケーションポートフォリオのモダナイゼーションを始めましょう。セットアップ手順については、AWS Transform custom Getting Started Guide をご覧ください。
追加リソース
- AWS Transform custom Getting Started Guide
- AWS Transform custom Product Page
- AWS Transform custom Documentation
- AWS Transform custom Command Reference
- AWS Transform for .NET
- .NET on AWS Developer Center
翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。