Amazon Web Services ブログ

Amazon Q Code Transformation による Java アプリケーションのアップグレード (プレビュー)

アプリケーションが古くなるにつれて、アプリケーションを安全に保ち、スムーズに実行するためだけにますます多くの労力が必要になります。アップグレードを管理するデベロッパーは、過去のアップグレードで既に他のデベロッパーが発見した、重大な変更やパフォーマンスの最適化に潜む複雑さと微妙な違いを再学習する必要に迫られます。その結果、新機能と重要なメンテナンス作業のバランスを取ることが難しくなります。

11月28日、Amazon Q Code Transformation のプレビュー版をご利用いただけるようになりました。この新機能により、生成系人工知能 (AI) を活用した新しいタイプのアシスタントである Amazon Q を使用して、既存のアプリケーションコードを簡単にアップグレードおよび最新化できます。Amazon Q は仕事に特化して設計されており、お客様のビジネスに合わせてカスタマイズできます。

Amazon Q Code Transformation では、バージョン 8 および 11 から Java Long-Term Support (LTS) リリースであるバージョン 17 への Java アプリケーションのアップグレードが行えます。また、まもなく Windows ベースの .NET Framework アプリケーションをクロスプラットフォームの .NET に変換できるようになります。

以前は、デベロッパーは各アプリケーションのアップグレードに 2~3 日を費やす必要がありました。社内テストでは、手動アップグレードでは通常数日または数週間かかるのに対し、トランスフォーメーション機能によってアプリケーションを数分でアップグレードできることが示されています。これにより、新しいビジネス要件に集中する時間ができます。例えば、5 人で構成される Amazon のある社内チームは、2 日間で 1,000 個の本番アプリケーションを Java 8 から 17 にアップグレードすることに成功しました。アプリケーションのアップグレードには平均で 10 分かかり、最長のアップグレードにかかった時間は 1 時間未満でした。

Amazon Q Code Transformation は、既存のコードを自動的に分析し、変換プランを生成し、プランによって提案された変換タスクを完了します。その際、パッケージの依存関係を特定して更新し、非推奨で非効率なコードコンポーネントをリファクタリングし、新しい言語フレームワークに切り替え、セキュリティのベストプラクティスを組み込みました。完了したら、変更を受け入れる前に、変換されたコードを確認して、ビルドとテストの結果を完成させることができます。

これにより、わずか数ステップでアプリケーションを最新の状態に保ち、サポートを維持し、パフォーマンス上のメリットを享受し、サポートされていないバージョンを使用することによる脆弱性を取り除くことができるため、新しいビジネス要件に集中する時間を確保できます。では、これが実際にどのように機能するのかを見てみましょう。

Java アプリケーションをバージョン 8 から 17 へアップグレードする
このチュートリアルでは IntelliJ IDEA を使用しています (Visual Studio Code でも同じことができます)。IDE で Amazon Q Code Transformation を使用するには、AWS Toolkit for IntelliJ IDEA の最新バージョンをインストールし、組織から提供された AWS IAM アイデンティティセンターの認証情報を使用してサインインします。Amazon Q Code Transformation にアクセスするには、組織が使用するプロファイルで、CodeWhisperer 管理者が Amazon Q 機能へのアクセス許可を明示的に付与する必要があることにご注意ください

新しいバージョンの Java に更新する時間がなかった古いプロジェクトを開きます。プロジェクトは Apache Maven を使用してビルドを管理しています。プロジェクトの XML 表現であるプロジェクトオブジェクトモデル (POM) ファイル (pom.xml) は、ルートディレクトリにあります。

まず、プロジェクト設定で、プロジェクトが正しい SDK バージョン (この場合は 1.8) を使用するように設定されていることを確認します。左側のペインで [AWS Toolkit] (AWS ツールキット) を選択し、次に [Amazon Q+ CodeWhisperer] タブを選択します。[Amazon Q (Preview)] (Amazon Q (プレビュー)) セクションで、[Transform] (変換) を選択します。

IDE のスクリーンショット。

これによりダイアログが開き、変換を続行する前に、アップグレード用に正しい Maven モジュールが選択されていることを確認できます。

IDE のスクリーンショット。

[Transformation Hub] (変換ハブ) ウィンドウで進捗状況を確認します。私の小さなアプリケーションではアップグレードは数分で完了しますが、大きなアプリケーションでは完了するまでに 1 時間以上かかる場合があります。

エンドツーエンドのアプリケーションアップグレードは、次の 3 つのステップで構成されます。

  1. アプリケーションを識別し分析する – コードはクラウド内の管理環境にコピーされ、リポジトリ内の指示に基づいてビルドプロセスがセットアップされます。この段階で、アップグレードするコンポーネントが特定されます。
  2. 変換プランを作成する – コードを分析して、Amazon Q Code Transformation がコードをアップグレードするために実行するステップを列挙した変換プランを作成します。このステップには、依存関係の更新、アップグレードされたコードの構築、アップグレード中に発生したビルドエラーの反復修正などがあります。
  3. コードを生成し、ビルドをテストし、ファイナライズする – 変換プランを繰り返し実行して、既存のコードと設定ファイルを更新し、必要に応じて新しいファイルを生成し、コードとともに提供されたテストを用いてビルド検証を実行し、失敗したビルドで特定した問題を修正します。

IDE のスクリーンショット。

数分後、変換は正常に終了します。ここから、プランと変換の概要を開くことができます。提案されている変更を確認するには、[View diff] (差分を表示) を選択します。[Apply Patch] (パッチを適用) ダイアログに、追加、変更、または削除されたファイルの要約が表示されます。

IDE のスクリーンショット。

まず、pom.xml ファイルを選択し、次に [Show Difference] (差分を表示) (左/右矢印の付いたアイコン) を選択すると、プロジェクト内の現在のコードと提案されている変更が並べて表示されます。例えば、依存関係の 1 つ (Project Lombok) が、ターゲットの Java バージョンとの互換性のためにバージョンアップしていることがわかります。

IDE のスクリーンショット。

Java ファイルでは、アップグレードされた依存関係で使用される注釈が更新されました。新しいバージョンでは、@With が昇格し、(実験的な) @Wither は非推奨になりました。これらの変更はインポートステートメントに反映されます。

IDE のスクリーンショット。

また、アップグレードを完了するために加えられた変更をすばやく確認できるように、コードリポジトリにサマリーファイルを保存しています。

ファイルを確認するのに少し時間を費やします。次に、[OK] を選択してすべての変更を確定します。

これでパッチは正常に適用され、提案された変更がコードとマージされました。リポジトリに変更をコミットし、移行が完了するのを待っていたビジネスクリティカルな変更に焦点を当てます。

知っておくべきこと
Amazon Q Code Transformation のプレビューは、AWS Toolkit for IntelliJ IDEAAWS Toolkit for Visual Studio CodeAmazon CodeWhisperer Professional Tier のお客様に本日ご利用いただけます。Amazon Q Code Transformation を使用するには、組織が使用するプロファイルへのアクセス権を CodeWhisperer 管理者が付与する必要があります。

プレビュー中に Amazon Q Code Transformation を使用しても追加費用はかかりません。Apache Maven を使用して構築された Java 8 および 11 アプリケーションを Java バージョン 17 にアップグレードできます。プロジェクトのルートディレクトリには POM ファイル (pom.xml) が必要です。間もなく、Windows ベースの .NET Framework アプリケーションをクロスプラットフォーム .NET に変換するオプションを追加し、Linux への移行を迅速に行えるようにする予定です。

変換ジョブが完了したら、差分ビューを使用して提案された変更を確認して承認できます。最終的な変換の概要には、Amazon Q Code Transformation によって更新された依存関係と変更されたコードファイルの詳細が表示されます。また、アップグレードされたコードの最終ビルドで発生したビルドエラーの詳細も記載されており、問題の修正やアップグレードの完了に使用できます。

Amazon Q Code Transformation は、自動推論と静的コード分析への Amazon の長期投資と生成系 AI の力を組み合わせることで、基盤モデルを組み込んでいます。これは、後方互換性のない変更で Java ライブラリのロングテールを更新する必要があることが多いコンテキスト固有のコード変換に不可欠であることがわかりました。

AWS が構築した生成系 AI を活用したコード変換に加えて、Amazon Q Code Transformation では OpenRewrite の一部を使用して、お客様の Java アップグレードをさらに加速しています。AWS では、サービスの多くがオープンソースコンポーネントで構築されており、これらのコミュニティの長期的な持続可能性を促進することは、AWS とお客様にとって非常に重要です。だからこそ、OpenRewrite のようなコミュニティに貢献し、業界全体がそのイノベーションの恩恵を受け続けることができるようにすることが当社にとって重要なのです。AWS は、Amazon Q Code Transformation のオープンソースへの移行の一環として開発された OpenRewrite レシピと改善に貢献する予定です。

「ソフトウェアがはるかに速いペースで適応できることは、どの企業にとっても最も基本的な利点の 1 つです。だからこそ、AWS がオープンソースの自動コードリファクタリング技術である OpenRewrite をサービスの構成要素として使用していることは喜ばしいことです」と、Moderne (OpenRewrite のスポンサー) の CEO 兼共同創設者である Jonathan Schneider 氏は述べています。「AWS が OpenRewrite コミュニティに参加してくれたことを嬉しく思います。フレームワークの移行、脆弱性へのパッチ適用、API の更新をさらに簡単にするために AWS が貢献してくれることを楽しみにしています」。

Java アプリケーションを今すぐアップグレード
Amazon Q Code Transformation 製品ページ

Danilo

原文はこちらです。