Amazon Web Services ブログ
Amazon Q Developer による Java アプリケーションのモダナイゼーション
本記事は 2024 年 7 月 2 日に公開された記事 “Modernize your Java application with Amazon Q Developer“ を翻訳したものです。
多くの組織には、保守がますます困難となっている重要なレガシー Java アプリケーションがあります。これらのアプリケーションのモダナイゼーションは必要不可欠ですが、新しい価値や機能を生み出すことに重点を置かない、困難かつリスクの高い作業です。このモダナイゼーションには、ドキュメント化されていないコード、古いフレームワークやライブラリ、セキュリティの脆弱性、ロギングやエラー処理、入力値チェックの欠如が含まれます。Amazon Q Developer は、既存の Java アプリケーションのモダナイゼーションを簡素化し、加速させます。具体的には、コードを分析して改善余地のある領域を浮き彫りにしたり、技術的負債の解消を支援したり、コードの最適化を提案したり、現在のフレームワークやライブラリへの移行を促進したりすることができます。
このブログ記事では、Amazon Q Developer を使用してレガシー Java アプリケーションをモダナイズする方法について説明します。Amazon Elastic Compute Cloud (Amazon EC2) 上で動作する Java 8 を搭載した Java アプリケーションである Unicorn Store API の例を取り上げます。まず、基盤となるランタイムを Java 8 から Java 17 へ、そして Spring を含む一般的な技術スタックをアップグレードします。次に、モジュール構成とロギングを改善することで、コード内の技術的負債を減らします。最後に、モダンなコンピューティングオプションである AWS Fargate を使用して、このアプリケーションをコンテナイメージに再デプロイします。
Maven でビルドされている Unicorn Store API は、データベース内のレコードを管理するための CRUD 操作を提供します。以下の手順に沿って Amazon Q Developer を使用して、このアプリケーションをモダナイズし、Fargate へ移行します。
- 最新の機能を活用し、アプリケーションを Java 17 へアップグレードします。
- コードベース上にある既存の技術的負債を減らします。
- アプリケーションをクラウドネイティブ化して AWS にデプロイします。
このチュートリアルでは、IntelliJ IDEA の統合開発環境と Amazon Q Developer plugin for IntelliJ IDEA を使用しています。
Java 8 から Java 17 へのアップグレード
古いアプリケーションでは、セキュリティと安定性を維持するためにより多くの労力が必要です。開発者は、以前のアップグレードで発見されたフレームワークの変更や最適化について、継続的な再学習が求められます。アプリケーションのメンテナンスに労力が割かれるため、必要なアップグレードと新しい機能追加とのバランスを取ることが困難です。
Amazon Q Developer agent for code transformation を使用すると、わずか数ステップでアプリケーションを最新の状態に保ち続けることができます。これにより、サポートされていないバージョンにおける脆弱性が取り除かれ、パフォーマンスが向上し、新しい機能開発に集中できるようになります。Amazon Q Developer agent for code transformation によって、アプリケーションのメンテナンス、アップグレード、移行を迅速に行うことができます。開発者は差別化要因とならない作業の多くを排除することができ、古い言語バージョンからの移行に伴う作業を最大で数日から数か月分節約できます。
最新の機能で最適化するため Amazon Q Developer agent for code transformation を使用し、Unicorn Store API を Java 8 から Java 17 へアップグレードしてみましょう。IntelliJ IDE にて、Amazon Q チャットパネルに「/transform」と入力し、Amazon Q Developer がプロジェクトのアップグレードを開始するために必要な詳細情報を入力します。
Amazon Q Developer agent for code transformation は、既存のコードを自動的に分析し、変換計画を生成、計画に沿った変換タスクを完了します。その際、Spring、Spring Boot、JUnit、JakartaEE、Mockito、Hibernate、Log4j などの一般的なライブラリとフレームワークを、Java 17 と互換性のある最新のメジャーバージョンにアップグレードします。また、Java 17 の推奨事項に従って、廃止予定のコードコンポーネントを更新します。Amazon Q Developer agent によるコード変換を始めるには、Amazon Q Developer Agent for code transformation による言語バージョンのアップグレードの手順を読み、それに従ってください。
変換が完了したら、変更を受け入れる前に、変換済みコードとビルド及びテスト結果を確認することができます。
コードベース上の技術的負債の削減
技術的負債は、時間の経過とともにどのコードベースにも蓄積されます。技術的負債の中には、期日を守るために受け入れざるを得ないものもありますが、後で返済するためにも追跡して優先順位を付けておく必要があります。管理されないままにしておくと技術的負債が重なり、より開発が遅くなり費用もかかります。技術的負債の削減は、チームの継続的な取り組みであるべきですが、他の優先事項によって後回しになることがよくあります。Amazon Q Developer は、技術的負債を特定して修正することで、レガシー Java コードのモダナイゼーションを効率化します。コードベース上の技術的負債の原因となる問題のリストを提供することで、コードの分析にかかる時間とリソースを削減します。これにより、ソフトウェア開発チームは技術的負債の項目に優先順位を付け、どの問題から最初に対処すべきかについて情報に基づいた決定を下すことができます。
Unicorn Store API で技術的負債のリストを見つけてみましょう。IntelliJ IDE では、Send to Prompt オプションを使用してハイライトされたコードを Amazon Q チャットパネルに送信し、すべての技術的負債のリストを提供するよう求めるプロンプトを表示します。Amazon Q Developer は、すべての技術的負債を詳細にリストします。
技術的負債を特定したら、次のステップはそれらを徐々に改善することです。Amazon Q Developer は、技術的負債を修復するためのコードの実装にかかる時間を短縮します。開発者は、IDE 内の Amazon Q Developer agent for software development とやり取りして、達成しようとしている特定のタスクに関するコードの提案について支援を受けることができます。プロジェクト全体のコードをコンテキストとして使用し、プロジェクト内のすべてのファイルに対して行う予定の実装計画を提供します。計画を確認し、内容に問題がなければ、Amazon Q Developer に提案された計画に基づいてコードを生成するよう依頼できます。これにより、手動更新と比べて開発者の労力を節約できます。
上記のステップで特定された Unicorn Store API の技術的負債について、Amazon Q Developer を使用してロギングの問題に対処してみましょう。IntelliJ IDE で Amazon Q のチャットパネルに「/dev」と入力し、ロギングの技術的負債の詳細を記入します。Amazon Q Developer は、プロジェクト全体のコンテキストに基づいて実装計画とログを追加するためのコードを生成します。Amazon Q Developer agent for software development の使用を開始するには、「Amazon Q Developer agent for software development を使用してソフトウェアを開発する」の手順を参照してください。
従来の Java コードをモダナイズするには、品質を段階的に向上させ、時間の経過とともに技術的負債が蓄積されないようにするための継続的なリファクタリングが必要です。Amazon Q Developer は、リファクタリング機能によってこの反復プロセスを簡素化します。選択したコードに対して、リファクタリングされたコードと各変更点、そのコーディング上の利点についての説明を提供してくれるため、変更点を理解するのに役立ちます。この機能の詳細については、「Amazon Q Developer によるコードの説明と更新」を参照してください。
この機能を活用して、Unicorn Store API プロジェクトの UnicornController クラスのメソッドを改良してみましょう。Amazon Q Developer は、更新後のレビューのために、可読性や効率性などの点でよりよいコードを生成します。
アプリケーションをクラウドネイティブ化して AWS にデプロイ
モダナイゼーションの最終ステップは、アプリケーションをクラウドネイティブ化して AWS にデプロイすることです。クラウドネイティブとは、クラウドコンピューティング環境で最新のアプリケーションを構築、デプロイ、および管理するソフトウェアアプローチです。これらのテクノロジーは、サービス提供に影響を与えることなく、アプリケーションへの迅速かつ頻繁な変更をサポートし、企業に競争上の優位性をもたらします。Amazon Q Developer が Unicorn Store API プロジェクトのクラウドネイティブ化をどのように支援できるかを見てみましょう。
IntelliJ IDE で Amazon Q チャットを開き、プロジェクトをクラウドネイティブ化して AWS にデプロイするための推奨アプローチを提供するよう Amazon Q Developer に依頼します。
Amazon Q Developer がコードを分析し、このアプリケーションをクラウドネイティブ化する手順を詳しく説明します。詳細な手順には、アプリケーションのコンテナ化、Amazon Elastic Container Service (Amazon ECS) などの AWS サービスへのコンテナアプリケーションのデプロイ、サーバーレス方式でコンテナを実行するための Fargate、コンテナイメージをプッシュするための Amazon Elastic Container Registry (Amazon ECR)、AWS Application Load Balancer (ALB) を介したアプリケーションへのアクセス、 モニタリング用の Amazon CloudWatch、及び Amazon Virtual Private Cloud (VPC) やサブネットなどの関連サービスが含まれます。
Amazon Q Developer に、先程のチャットで会話した手順を実行するよう依頼しましょう。まず、Amazon Q Developer へアプリケーションをコンテナ化するための docker ファイルの作成を依頼してください。コンテナ化のプロセスでは、基盤となるハードウェアやその他の依存関係からソフトウェアを切り離すことで、アプリケーション開発を効率化します。このアプローチは、コンテナ化された環境内のさまざまなコンポーネントを分離することにより、開発スピード、効率、及びセキュリティを強化します。
コンテナベースのアプリケーションの開発に成功したら、Amazon Q Developer の機能を活用して AWS CloudFormation テンプレートを生成してみましょう。このテンプレートにより、コードとしてのインフラストラクチャ (IaC) を使用して必要なリソースを AWS にデプロイできるようになります。IaC を使うと、コンピューティングインフラストラクチャをプログラム的にプロビジョニングして管理できるため、手作業によるプロセスや設定が不要になります。手作業によるインフラストラクチャ管理は、特に大規模なアプリケーションを扱う場合、時間がかかり属人的な作業ミスも起こりやすくなります。
CloudFormation テンプレートを作成するために、これまでの会話から得た提案を見直し、AWS でプロビジョニングする必要があるリソースのリストをまとめましょう。このリストを作成したら、Amazon Q Developer にこれらのリソース要件に基づいて CloudFormation テンプレートを生成するよう依頼できます。
Amazon Q Developer は、コンテナを AWS へ安全で信頼性が高くスケーラブルな方法でデプロイするように、必要なすべてのリソースを含む CloudFormation テンプレートを生成できます。
CloudFormation テンプレートが用意できたので、Unicorn Store API のローカル docker イメージを Amazon ECR にプッシュし、AWS でアプリケーションを実行するために必要な Fargate タスクを開始しましょう。
このように Amazon Q Developer によって、クラウドにデプロイするステップを設計することでアプリケーションをクラウドネイティブ化したり、コンテナベースのソリューションに移行できるよう支援したり、アプリケーションを AWS にデプロイするための IaC のスクリプトを記述したりすることができます。
まとめ
Amazon Q Developer を利用することで、開発者はレガシー Java アプリケーションのモダナイゼーションを簡素化および加速できます。また、開発者は古いアプリケーションを現在のフレームワークに適用し、クラウドネイティブな構成で AWS にデプロイできます。これによりプロセスが合理化され、必要な労力やリスクが軽減されます。開発者は時間とリソースを大幅に節約できるため、技術的負債を管理するよりも、新しい機能の構築とモダナイズされたアプリケーションの強化に集中できるようになります。
Amazon Q Developer の詳細については、以下のリソースを参照してください。