

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Q Developer を使用した Java バージョンのアップグレード
<a name="code-transformation"></a>

Amazon Q Developer は、統合開発環境 (IDE) で Java アプリケーションを新しい言語バージョンにアップグレードすることができます。Amazon Q がコードのアップグレードで実行できる変更には、廃止されたコードコンポーネントと API の更新、コード内のライブラリ、フレームワーク、その他の依存関係のアップグレードが含まれます。

コードを変換する前に、Amazon Q はまずソース言語バージョンでコードを構築し、コードの変換に必要な情報が揃っていることを確認します。Amazon Q がコードを正常に変換したら、IDE で変更を検証して受け入れます。Amazon Q Developer は、アップグレードされたコードにターゲット JDK との互換性を持たせるための必要最小限の変更を行うため、プロジェクトのライブラリと依存関係をアップグレードするには追加の変換が必要です。Amazon Q でのコード変換の仕組みの詳細については、「[Amazon Q Developer が Java 言語アップグレードのコードを変換する仕組み](how-CT-works.md)」を参照してください。

**Topics**
+ [サポートされている Java アップグレードと IDE](#supported-languages-IDEs)
+ [ステップ 1: 前提条件](#java-upgrade-prerequisites)
+ [ステップ 2: プロジェクトを設定する](#configure-project)
+ [ステップ 3: 依存関係のアップグレードファイルを作成する (オプション)](#create-dependency-upgrade-file)
+ [ステップ 4: コードを変換する](#transform-code-java)
+ [Amazon Q Developer が Java 言語アップグレードのコードを変換する仕組み](how-CT-works.md)

## サポートされている Java アップグレードと IDE
<a name="supported-languages-IDEs"></a>

Amazon Q の変換は、現在、次の Java ソースコードバージョンとターゲットバージョンをサポートしています。同じ Java バージョンへのコード変換には、ソースコードバージョンのライブラリやその他の依存関係のアップグレードが含まれます。


**サポートされている Java アップグレード**  

| ソースコードバージョン | サポートされているターゲットバージョン | 
| --- | --- | 
| Java 8  | Java 17 および Java 21 | 
| Java 11 | Java 17 および Java 21 | 
| Java 17 | Java 17 および Java 21  | 
| Java 21 |  Java 21   | 

Amazon Q は、次の IDE で Java アップグレードをサポートしています。
+ JetBrains IDE のモジュール
+ Visual Studio Code のプロジェクトとワークスペース

## ステップ 1: 前提条件
<a name="java-upgrade-prerequisites"></a>

続行する前に、「[IDE で Amazon Q のセットアップ](q-in-IDE-setup.md)」の手順が完了していることを確認してください。

コード変換ジョブを開始する前に、以下の前提条件を満たしていることを確認します。
+ プロジェクトは[サポートされている Java バージョン](#supported-languages-IDEs)で記述され、Maven 上に構築されている。
+ プロジェクトは Maven を使用して IDE で正常にビルドできる。Maven 3.8 以降がサポートされています。
+ プロジェクトソース JDK がローカルで利用可能で、ソースコードのバージョンである。例えば、Java 8 コードを変換する場合、ローカルの JDK インストールは JDK 8 である必要があります。
+ プロジェクトのビルドが 55 分以内に完了する。
+ プロジェクトが正しく設定され、正しい JDK バージョンが指定されている。詳細については、「[ステップ 2: プロジェクトを設定する](#configure-project)」を参照してください。
+ プロジェクトが仮想プライベートクラウド (VPC) やオンプレミスネットワークなど、プライベートネットワーク上のリソースへのアクセスを必要としない。例えば、プロジェクトにネットワーク内のデータベースに接続するユニットテストが含まれている場合、変換は失敗します。
+ プロジェクトが Java プロジェクトで Java 以外の言語をパッケージ化するプラグインを使用していない。例えば、Java ソースコードに加えて、フロントエンド JavaScript コードを実行するために [frontend-maven-plugin](https://github.com/eirslett/frontend-maven-plugin) を使用している場合、変換は失敗します。
+ ローカルネットワークで、Amazon Q がコードの変換に使用する Amazon S3 バケットへのアップロードが許可されている。詳細については、「[Allow access to Amazon S3 buckets in data perimeters](firewall.md#data-perimeters)」を参照してください。
+ アプリケーションは UTF-8 文字のみを使用している。アプリケーションで非 UTF-8 文字を使用している場合でも、Amazon Q はコードの変換を試みます。

## ステップ 2: プロジェクトを設定する
<a name="configure-project"></a>

プロジェクトを設定するには、使用している IDE に応じて次の情報を使用します。

### JetBrains でプロジェクトを設定する
<a name="configure-jetbrains"></a>

JetBrains でプロジェクトを設定するには、次のプロジェクト設定とモジュール設定を指定する必要があります。

モジュールがプロジェクトと同じ JDK と言語レベルを使用している場合は、モジュール設定を更新する必要はありません。
+ Project SDK – プロジェクトのコンパイルに使用される JDK。
+ Project language level – プロジェクトで使用される Java バージョン。
+ Module SDK – モジュールをコンパイルするために使用される JDK。
+ Module language level – モジュールで使用される Java バージョン。
+ Maven Runner JRE – モジュールのビルドに使用する JDK。

**プロジェクト設定とモジュールの設定を更新する**

プロジェクトまたはモジュールの SDK と言語レベルの設定を更新する手順は次のとおりです。

1. JetBrains IDE で、**[File]** を選択し、次に **[Project Structure]** を選択します。

1. [Project Structure] ウィンドウが開きます。**[Project Settings]** で **[Modules]** を選択します。

   1. プロジェクト JDK を更新するには、**[SDK]** の横にあるドロップダウンリストから選択します。

   1. プロジェクト言語を更新するには、**[Language level]** の横にあるドロップダウンから選択します。

1. [**Project Settings**] で [**Modules**] を選択します。

   1. モジュール JDK を更新するには、**[SDK]** の横にあるドロップダウンリストから選択します。

   1. モジュール言語を更新するには、**[Language level]** の横にあるドロップダウンから選択します。

詳細については、JetBrains ドキュメントの「[Project structure settings﻿](https://www.jetbrains.com/help/idea/project-settings-and-structure.html)」と「[Module structure settings﻿](https://www.jetbrains.com/help/idea/configure-modules.html)」を参照してください。

**Maven 設定を更新する**

Maven Runner JRE を更新するには、次の手順を実行します。

1. JetBrains IDE で歯車アイコンをクリックし、表示されるメニューで **[Settings]** を選択します。

1. **[Settings]** ウィンドウで、**[Build, Execution, Deployment]**、**[Build Tools]**、**[Maven]**、**[Runner]** の順に選択します。

1. JRE フィールドで、変換するモジュールの構築に使用する JDK を選択します。

### VS Code でプロジェクトを設定する
<a name="configure-vsc"></a>

VS Code でプロジェクトを設定するには、プロジェクトに以下が含まれている必要があります。
+ プロジェクトルートフォルダの `pom.xml` ファイル
+ プロジェクトディレクトリの `.java` ファイル

プロジェクトに Maven ラッパー実行可能ファイル (macOS の場合は `mvnw`、Windows の場合は `mvnw.cmd`) が含まれている場合は、それがプロジェクトのルートにあることを確認してください。Amazon Q はこのラッパーを使用します。他の Maven の設定は必要ありません。

Maven ラッパーを使用しない場合は、Maven をインストールします。詳細については、Apache Maven ドキュメントの「[Installing Apache Maven](https://maven.apache.org/install.html)」を参照してください。

Maven をインストールしたら、`PATH` 変数に追加します。詳細については、「[Maven を `PATH` に追加するにはどうすればよいですか?](troubleshooting-code-transformation.md#add-maven-to-path) Your Java `runtime` variable should also be pointing to a JDK and not to a JRE」を参照してください。設定が正しいことを確認するには、`mvn -v` を実行します。出力には、Maven のバージョンと、JDK へのパスを指す `runtime` 変数が表示されます。

## ステップ 3: 依存関係のアップグレードファイルを作成する (オプション)
<a name="create-dependency-upgrade-file"></a>

*依存関係のアップグレードファイル*、プロジェクトの依存関係を一覧表示する YAML ファイル、および変換中にアップグレードするバージョンを Amazon Q に提供できます。依存関係のアップグレードファイルを提供することで、Amazon Q がアップグレードについて認識していないサードパーティーおよびファーストパーティーの依存関係を指定できます。

ファーストパーティーの依存関係とは、組織が管理し、ローカルまたは組織のプライベートネットワークでのみ利用可能なライブラリ、プラグイン、フレームワークを指します。Amazon Q は、ローカル環境でビルドを実行する際に、ファーストパーティーの依存関係にアクセスできます。詳細については、「[ローカル環境でのコードの構築](how-CT-works.md#java-local-builds)」を参照してください。サードパーティーの依存関係は、公開されているか、組織に固有ではないオープンソースの依存関係です。

YAML ファイルでアップグレードするファーストパーティーの依存関係を指定できます。Amazon Q は JDK アップグレード中にそれらをアップグレードします (例: Java 8 から 17 など)。最初の JDK アップグレード後に別の変換 (17 から 17 または 21 から 21) を開始して、サードパーティーの依存関係をアップグレードできます。

Amazon Q が最小限の JDK アップグレードを実行したら、別の変換を開始して、すべてのサードパーティーの依存関係をアップグレードできます。または、サードパーティーの依存関係とそのバージョンを YAML ファイルで指定して、ライブラリのアップグレード変換中にのみそれらの依存関係をアップグレードすることもできます。

Amazon Q では、変換中に依存関係のアップグレードファイルを指定するように求められます。指定する場合は、まずファイルが正しく設定されていることを確認します。YAML ファイルには、次のフィールドが必要です。
+ name - 依存関係のアップグレードファイルの名前。
+ description (オプション) - 依存関係のアップグレードファイルと、使用する変換の指定。
+ dependencyManagement - アップグレードする依存関係とプラグインのリストが含まれています。
+ dependencies - アップグレードするライブラリの名前とバージョンが含まれています。
+ plugins - アップグレードするプラグインの名前とバージョンが含まれています。
+ identifier - ライブラリ、プラグイン、またはその他の依存関係の名前。
+ targetVersion - アップグレード先の依存関係のバージョン。
+ versionProperty (オプション) - アプリケーションの `pom.xml` ファイルの `properties` タグで設定されている、定義する依存関係のバージョン。
+ originType - 依存関係がファーストパーティーかサードパーティーか (FIRST\$1PARTY または THIRD\$1PARTY のいずれかで指定)。

以下は、依存関係のアップグレード YAML ファイルの例と、Amazon Q が解析するために必要な設定です。

```
name: dependency-upgrade
  
description: "Custom dependency version management for Java migration from JDK 8/11/17 to JDK 17/21"
  
  
dependencyManagement:
  
  dependencies:
  
    - identifier: "com.example:library1"
  
      targetVersion: "2.1.0"
  
      versionProperty: "library1.version"  # Optional
  
      originType: "FIRST_PARTY"   
  
    - identifier: "com.example:library2"
  
      targetVersion: "3.0.0"
  
      originType: "THIRD_PARTY"
  
  plugins:
  
    - identifier: "com.example.plugin"
  
      targetVersion: "1.2.0"
  
      versionProperty: "plugin.version"  # Optional
            
      originType: "THIRD_PARTY"
```

## ステップ 4: コードを変換する
<a name="transform-code-java"></a>

IDE のセットアップをテストするには、サンプルプロジェクトをダウンロードして解凍し、IDE の次の手順を実行します。提案された変更と変換の概要を表示できる場合は、独自のコードプロジェクトを変換する準備ができています。変換が失敗するということは、IDE が正しく設定されていません。設定の問題に対処するには、「[ステップ 2: プロジェクトを設定する](#configure-project)」と「[トラブルシューティング](troubleshooting-code-transformation.md)」を確認します。

**注記**  
コード変換中は、ローカルマシンをオフにしたり、閉じたり、スリープ状態にしたりしないでください。初期ビルドと検証ビルドでは、安定したネットワーク接続を必要とするクライアント側の環境を使用します。

コードプロジェクトまたはコードモジュールの言語バージョンをアップグレードするには、以下のステップを実行します。

------
#### [ JetBrains ]

1. JetBrains でアップグレードするモジュールを開きます。IDE でプロジェクトが正常にビルドされていることを確認します。

1. Amazon Q ロゴを選択し、開いたチャットパネルでアプリケーションを変換するように Amazon Q に依頼します。

1. **[アプリケーションの変換]** ポップアップが表示されます。ドロップダウンリストからアップグレードするプロジェクトを選択し、**[変換]** を選択します。

1. Amazon Q では、依存関係のアップグレードファイルを指定するように求められます。アップグレード先の依存関係とバージョンで YAML を設定している場合は、ファイルを追加します。Amazon Q はファイルを検証して、正しく設定されていることを確認します。エラーが発生した場合は、[ステップ 3: 依存関係のアップグレードファイルを作成する (オプション)](#create-dependency-upgrade-file) で説明されている形式と必須フィールドを確認してください。

1. Amazon Q が変換を開始します。進捗状況は、**[変換の詳細]** タブで確認できます。

1. 変換が完了したら、プロジェクトを更新する前にアップグレードされたコードを確認できます。新しいコードを表示するには、**[変換の詳細]** タブに移動し、**[差分の表示]** を選択します。表示される **[パッチを適用]** ウィンドウでファイルを選択して、ソースコードとアップグレードされたコードを含む差分ビューを開きます。

1. Amazon Q が加えた変更を受け入れるには、**[差分の表示]** を選択して **[パッチを適用]** ウィンドウを開きます。更新されたファイルをすべて選択し、**[OK]** を選択してプロジェクトを更新します。

1. コードのアップグレード方法の詳細と次のステップの提案を確認するには、**[変換の詳細]** タブで **[変換の概要を表示]** を選択します。

------
#### [ Visual Studio Code ]

1. VS Code でアップグレードするプロジェクトまたはワークスペースを開きます。プロジェクトが IDE で正常にビルドされていることを確認します。

1. Amazon Q ロゴを選択し、開いたチャットパネルでアプリケーションを変換するように Amazon Q に依頼します。

1. IDE の上部にある検索バーからアップグレードするプロジェクトを選択します。

1. Amazon Q でソースコードのバージョンが見つからない場合は、コードバージョンを選択するように求められます。ソースコードが書き込まれるバージョンを選択し、ポップアップで **[変換]** を選択して続行します。

1. プロンプトが表示されたら、JDK への `JAVA_HOME` パスを入力します。プロジェクトの設定の詳細については、「[VS Code プロジェクトを設定する](#configure-vsc)」を参照してください。

1. Amazon Q では、依存関係のアップグレードファイルを指定するように求められます。アップグレード先の依存関係とバージョンで YAML を設定している場合は、ファイルを追加します。Amazon Q はファイルを検証して、正しく設定されていることを確認します。エラーが発生した場合は、[ステップ 3: 依存関係のアップグレードファイルを作成する (オプション)](#create-dependency-upgrade-file) で説明されている形式と必須フィールドを確認してください。

1. Amazon Q が変換を開始します。**[変換ハブ]** タブで進捗状況を確認できます。

1. 変換が完了すると、**[変更案]** タブが開きます。プロジェクトを更新する前にアップグレードされたコードを確認するには、**[変更案をダウンロード]** を選択します。ファイルを選択して、ソースコードとアップグレードされたコードを含む差分ビューを開きます。

1. Amazon Q の変更を受け入れるには、**[変更案]** タブに移動し、**[受け入れる]** を選択します。

1. コードのアップグレード方法の詳細と次のステップの提案を確認するには、**[変換ハブ]** で **[ビューおよびその他のアクション]** 省略記号ボタンをクリックし、**[変換の概要を表示]** を選択します。

------

# Amazon Q Developer が Java 言語アップグレードのコードを変換する仕組み
<a name="how-CT-works"></a>

コードを変換するために、Amazon Q Developer はプロジェクトのコード言語バージョンのアップグレードに使用する変換プランを生成します。コードを変換すると、変換の概要とファイルの差分が表示され、変更を受け入れる前に内容を確認できます。Amazon Q Developer は、アップグレードされたコードにターゲット JDK との互換性を持たせるための必要最小限の変更を行うため、プロジェクトのライブラリと依存関係をアップグレードするには追加の変換が必要です。以下のセクションでは、Amazon Q が変換を実行する方法について詳しく説明します。

## コードをビルドし、変換プランを作成する
<a name="build-code-create-plan"></a>

コードの変換を開始するために、Amazon Q はプロジェクトをローカルでビルドし、ソースコード、プロジェクトの依存関係、ビルドログを含むビルドアーティファクトを生成します。

ビルドアーティファクトを生成した後、Amazon Q は安全なビルド環境にコードをビルドし、アップグレードするプロジェクトまたはモジュールに合わせてカスタマイズされた変換プランを作成します。変換プランでは、Amazon Q が行おうとしている特定の変更点の概要が説明されます。これには、新しい依存関係バージョン、主要なコード変更、廃止されたコードの代替案が含まれます。こうした変更は、コードの予備ビルドに基づいており、変換中に変更される可能性があります。

## コードを変換する
<a name="transform-code"></a>

コードを変換するために、Amazon Q は変換プランで提案された変更に基づいて、ターゲット Java バージョンへのコードのアップグレードを試みます。変更を行う際には、ソースコード内の既存のユニットテストを再ビルドして実行し、発生したエラーを繰り返し修正します。JDK のアップグレードは、次のソースコードバージョンからターゲットバージョンに行うことができます。
+ Java 8 から 17
+ Java 8 から 21
+ Java 11 から 17
+ Java 11 から 21
+ Java 17 から 21

Amazon Q は、コードをターゲット Java バージョンと互換性を持たせるために必要な最小限の変更を行います。Amazon Q が最小限の JDK アップグレードを実行したら、別の変換を開始して、すべてのサードパーティーの依存関係をアップグレードできます。または、サードパーティーの依存関係とそのバージョンを YAML ファイルで指定して、ライブラリのアップグレード変換中にのみそれらの依存関係をアップグレードすることもできます。

Amazon Q は、コードをアップグレードする際に次の変更を試みます。
+ ターゲット Java バージョンの推奨事項に従って、廃止されたコードコンポーネントを更新する
+ 一般的なライブラリとフレームワークをターゲット Java バージョンと互換性のあるバージョンにアップグレードする。これには、次のライブラリとフレームワークを最新の利用可能なメジャーバージョンに更新することが含まれます。
  + Apache Commons IO 
  + Apache HttpClient 
  + bc-fips 
  + Cucumber-JVM 
  + 休止 
  + jackson-annotations 
  + JakartaEE
  + Javax 
  + javax.servlet 
  + jaxb-api 
  + jaxb-impl 
  + jaxen 
  + jcl-over-slf4j 
  + json-simple 
  + jsr305 
  + junit 
  + junit-jupiter-api 
  + Log4j 
  + Micronaut 
  + Mockito 
  + mockito-core 
  + Okio 
  + PowerMockito 
  + Quarkus 
  + slf4j 
  + slf4j-api 
  + Spring Boot 
  + Spring Framework 
  + Spring Security 
  + Swagger 
  + testng 

**注記**  
クライアント側のビルドでは安定したネットワーク接続が必要であるため、コード変換中にローカルマシンをオフまたは閉じないでください。

## ローカル環境でのコードの構築
<a name="java-local-builds"></a>

変換中、Amazon Q はローカル環境で検証ビルドを実行します。Amazon Q は、サーバー側でコードを複数のステップで変換します。各ステップの後、Amazon Q はローカル環境にコードを送信し、変更をビルドしてテストします。その後、コードをサーバー側に送信して変換を続行します。

ローカル環境のビルドは、Amazon Q がプライベートリソースへのアクセスを必要とするテストを実行できるようにすることで、変換されたコードを検証するのに役立ちます。ローカル環境で AI 生成コードの構築に関連するセキュリティリスクを最小限に抑えるために、Amazon Q は生成するコードを確認し、セキュリティ上の懸念に対応するように更新します。

## 変換の概要を確認し、変更を受け入れる
<a name="review-plan-accept-changes"></a>

変換が完了すると、Amazon Q は、プロジェクト全体がアップグレードされたかどうかを示す最終ビルドのステータスなど、変更の詳細を含む変換の概要を用意します。ビルドログの概要を確認して、Amazon Q がアップグレードされたバージョンでコードをビルドできない原因となった問題を解明することもできます。

変換の概要には、変換プランの提案された変更とコードのアップグレードのために最終的に Amazon Q が行った変更の違い、元のプランになかった追加の変更についても記載されています。

変換の概要を確認したら、Amazon Q が提案している変更をファイル差分ビューで表示できます。Amazon Q が提案するコード変更は、変更を受け入れるまで現在のプロジェクトファイルには影響しません。変換されたコードは、変換が完了してから 30 日後まで使用できます。

## 部分的に成功した変換を完了する
<a name="partially-successful-transformations"></a>

コードベースの複雑さと詳細によっては、変換が部分的に成功する場合があります。これは、Amazon Q がプロジェクト内の特定のファイルやコード領域のみを変換できたことを意味します。この場合、更新された言語バージョンでビルドできるように、プロジェクトの残りのコードを手動で更新する必要があります。

残りのコードを変換するには、IDE で Amazon Q チャットを使用します。Amazon Q に部分的に更新されたファイルを確認し、コンパイルエラーなどの問題に対処するための新しいコードを提供するようにリクエストします。また、[特徴量開発](q-in-IDE-chat.md#develop-code)や [Workspace コンテキスト](workspace-context.md)などの機能を使用して、より多くのプロジェクトをコンテキストとして含め、一度に複数のファイルの提案を取得することもできます。