Twitter
Facebook
Hatena
生成AIが変えるレガシーコード対応 – Amazon Q Developerによる.NET変換機能の検証レポート

IoTクラウド基盤アーキテクトの森⽥です。お客様のIoTサービスを実現するAWSアーキテクチャの検討、提案、構築を行っています。最近は生成AIにも活動の幅を広げ、お客様を広くご支援しています。

生成AIは様々な業種業態のお客様において活用の検討が進んでいます。特に私たちのようなソフトウェア開発の現場では想像を超える変化が起きています。コーディングが生成AIによって大きく効率化されつつあります。

AWSが提供する生成AIアシスタント「Amazon Q Developer」は、そんな革命的なツールの一つです。私も日々の業務で活用し、その驚くべき能力に助けられています。

過去の技術コラムでも「Amazon Q Developer」に関する記事を投稿しています。

【検証してみた】無料利用できるAWS生成AIでどこまでテストモジュールを高速実装できるか

【AWS re:Invent 2024レポート】VMware環境からAWS環境への変換による移行を生成AIにより自動化するAmazon Q Developerの新機能のセッションを視聴しました。

【AWS re:Invent 2024レポート】Amazon Q Developerのチャットを活用しながらコードをスキャンし、不具合やセキュリティの脆弱性を解消する方法

本コラムでは、多くの企業が抱える「レガシーコード」をマイグレーションできる「Amazon Q Developer」の「.NET変換」にスポットライトを当てます。古いフレームワークで書かれたコードを.NET8に変換する手順を、実際の検証結果とともにお届けします。

なお、本コラムの執筆時点では「Amazon Q Developer」の.NET変換機能はプレビュー版ですのでご注意ください。

「Amazon Q Developer」の .NET変換機能とは?

このような経験はないでしょうか?

  • 「昔、開発したアプリケーションの作成者が部署異動や退職してしまい、メンテナンスができなくなった…」
  • 「OSやフレームワークをバージョンアップさせるとエラーが出るため、泣く泣く古いバージョンのWindowsを使い続けている…」
  • 「レガシーシステムの保守コストが年々増加し、予算を圧迫している…」

「Amazon Q Developer」の.NET変換機能を使用すると.NET Frameworkで構成されたアプリケーションを新しい世代の.NET 8.0に変換することができます。

以下のようなメリットがあります。

  • 最新OSとの互換性確保:新しいバージョンのWindowsでも安定して動作
  • クロスプラットフォーム対応:Linuxでも動作可能になり、Windowsライセンス費の削減も視野に
  • セキュリティ強化:最新のセキュリティパッチやフレームワークの保護機能を活用可能
  • クラウドネイティブ化:コンテナ化やマイクロサービス化による移行が容易に

変換作業は人間が手作業で行うとかなりの時間が必要ですが、「Amazon Q Developer」を使用した今回の検証ではわずか1時間で変換できました。

「Amazon Q Developer」の .NET変換機能の使い方

それでは、「Amazon Q Developer」の.NET変換機能の使い方を解説します。

変換機能を有効化する

まず、マネジメントコンソールで、「Amazon Q Developer」の管理画面に遷移し、セッティングメニューを開きます。

[Amazon Q Developer: トランスフォーム設定]セクションの[編集]ボタンをクリックします。

ダイアログが表示されるので、[Q 開発者トランスフォーム]を有効化し、[保存]ボタンをクリックします。

有効化が完了すると、[Application URL]にURLが表示されます。

変換ジョブを作成する

Application URLにアクセスすると、「Amazon Q Developer」の.NET変換を行うための専用サイトが表示されます。

[Ask Q to create a job]ボタンをクリックすると、チャット欄が表示されます。

.NET以外にもVMwareやメインフレームの変換も可能なようです。チャット欄に「.NET」と入力します。

設定を提案してくれました。この設定で問題ないので「I'm happy with these details.」と入力します。

表示された[Create job]ボタンをクリックするとジョブが作成され、画面が遷移します。

変換設定を行う

変換に必要な設定はシンプルです。

1. ソースコードをGitHubから取得するため、AWS CodeConnectionsの接続設定を指定する

2. ソースコードの対象リポジトリを指定する(複数指定可能)

設定が終わると変換が開始されます。変換が終わるまでは45分程度でした。

GitHubに新しいブランチが作成され、変換したソースコードが登録されます。

Commitsで履歴を確認すると、コードを修正するたびにコミットを行い、エラーが無くなるまで変換を繰り返しているようです。

変換はこれで完了です。.NET変換を行うための専用サイトが用意されているため、ブラウザ上の操作だけで変換できました。

変換したソースコードをビルドする

次に変換したソースコードのビルドを試みました。ここからは、「Amazon Q Developer」のコマンドラインツール「Amazon Q Developer CLI」の力を借りて行います。

「Amazon Q Developer CLI」とは?

「Amazon Q Developer CLI」は、コマンドラインで使用できる「Amazon Q Developer」のツールです。2025年3月のアップデートで追加されたエージェント機能がかなり優秀です。エージェント機能ではチャットを通じて、コマンドの実行やコーディング作業を依頼することが可能です。

まず、Visual Studio CodeにDev Containers 拡張機能をインストールし、「C#(.NET)」の開発コンテナ環境を作成します。そのうえで、「Amazon Q Developer CLI」をインストールしました。

「Amazon Q Developer CLI」によるビルド

「q chat」コマンドを実行すると、「Amazon Q Developer」との対話が始まります。

「Amazon Q Developer CLI」に対しては、自然言語で指示します。

チャット入力
「https://github.com/moritalous/bobs-used-bookstore-classic/」Gitリポジトリをクローンしてください。

「Amazon Q Developer CLI」が適切なコマンドを実行し、Gitリポジトリからソースを取得してくれます。「Amazon Q Developer CLI」の内部では生成AIが使われているため、このように自然言語の意味を理解した動作を行うことが出来ます。

続けて変換後のソースが存在するブランチの切り替え、ビルドを依頼します。

チャット入力
ブランチをqtransform-651c8a2aに切り替えてください。

チャット入力
ビルドしてください。

「ビルドしてください」とだけ指示を出し、開発言語や具体的にビルドに使用するコマンドは全く伝えていません。「Amazon Q Developer」は先ほど取得したソースコードを自ら解析し、ソースに含まれるREADME.mdやディレクトリ構成をチェックしたうえで、ビルドコマンドが「dotnet」であると認識しました。

初回のビルドでは一部のプロジェクトでパッケージの依存関係の問題が発生しました。

Amazon Q Developerの回答
ビルドを試みましたが、パッケージの依存関係に問題があり、完全なビルドが成功しませんでした。以下が結果です:

### ビルド結果の概要

1. 成功したプロジェクト:
• Bookstore.Common - 正常にビルドされました
• Bookstore.Domain - 正常にビルドされました
• Bookstore.Cdk - 正常にビルドされました(いくつかの警告はありますが)

2. 失敗したプロジェクト:
• Bookstore.Data - パッケージのダウングレード問題により失敗
• Bookstore.Web - パッケージのダウングレード問題により失敗

### 主な問題点

主な問題は、AWS SDKのパッケージバージョンの不一致です。特に以下のエラーが発生しています:

1. AWSSDK.Core のバージョン不一致:
• 3.7.402.11 から 3.7.400.59 へのダウングレード
• 3.7.402.7 から 3.7.400.59 へのダウングレード
• 3.7.402.8 から 3.7.400.59 へのダウングレード

2. Microsoft.IdentityModel.Abstractions のバージョン不一致:
• 8.6.0 から 8.2.1 へのダウングレード

このプロジェクトは元々 .NET Framework 4.8 をターゲットにしていますが、現在の環境では .NET 8.0 (8.0.407) で実行しようとしているため、互換性の問題が発生しています。また、README.mdによると、このプロジェクトは本来Windows環境で実行することを想定していますが、現在のLinux環境では完全なビルドが難しい状況です。

CDKプロジェクト部分は正常にビルドできているため、インフラストラクチャのデプロイ部分は機能する可能性がありますが、アプリケーション自体(Web部分とData部分)はパッケージの依存関係の問題を解決する必要があります。

修正を依頼します。

チャット入力
ビルドが通るように修正を行ってください。

一度の指示だけで、ビルドが成功するまでソースコードの修正とビルドの実行を繰り返します。最終的にはプロジェクトファイルに書かれている外部ライブラリーのバージョンを修正し、ビルドが成功しました。

「Amazon Q Developer」の.NET変換機能の変換内容を詳しく分析

.NET変換機能がどのような修正を行ったのか、「Amazon Q Developer CLI」に詳細な分析を依頼しました。

チャット入力
コミットedd89014c5aace2728835079f16cf4c458a59828 以降のコミットが.NET Frameworkから.NET 8へのマイグレーション対応を行ったものです。どのような修正が入っているか詳細にまとめて、Markdown形式のファイルで出力してください。

分析結果によると、マイグレーションプロセスは複数のイテレーションで行われ、初期段階では137個存在したエラーが、最終的にはゼロになるように修正されたとのことです。

主な変更点は以下のとおりです。

  1. プロジェクト構造の変更
  2. アプリケーションスタートアップの変更
  3. HTTP コンテキストと Cookie 処理の変更
  4. ミドルウェアの実装変更
  5. URL 処理の変更
  6. 認証と認可の変更
  7. 設定管理の変更

修正の規模としては、140ファイル中15%以上のソースファイルが修正されており、人間が手作業で行うには膨大な時間がかかる作業だったことが分かります。

まとめ

今回の検証を通じて、「Amazon Q Developer」の.NET変換機能が持つ驚異的な能力を実感しました。手作業では膨大な時間がかかるところを、わずか1時間程度で完了させてしまいました。この技術は、DXの推進から取り残されがちなレガシーシステムを最新のDX領域に引き上げる革新的な解決策となり得ると感じています。当社においても、技術の追求と新たな価値創造のアイデアとして積極的に取り組んでいきたいと思います。

もちろん、変換して終わりではなく、テストによる動作確認は必要です。しかし、最も時間と労力を要する「コード変換」を、生成AIのパワーにより自動化できることには大きな価値があります。特にC#のような静的型付け言語との相性が良く、ビルドエラーを一つずつ解消していくアプローチが効果的に機能しました。

「Amazon Q Developer」をはじめとした生成AIの登場により、我々富士ソフトを含むSIer業界は大きな変革の波に直面しています。しかし、私はこの変革の波は脅威ではなく大きなチャンスと捉えています。技術革新の最前線に立ち、お客様のDX推進を加速させるパートナーとなるべく、生成AI技術の習得と活用に取り組んでまいります。

この記事の執筆者

森田 和明Kazuaki Morita

エリア事業本部 西日本支社
第2システム部 第5技術グループ
主任 / フェロー

AWS IoT クラウド アプリ開発