Java 用 Azure Migrate アプリケーションとコードの評価バージョン 7 (プレビュー)
Note
この記事は、次世代の Java 用 Azure Migrate アプリケーションとコード評価バージョン 7.x 向けです。 このバージョンはプレビュー段階です。 以前の安定版バージョンであるバージョン 6.x については、「Java 用 Azure Migrate アプリケーションとコードの評価」を参照してください。
この記事では、Java 用 Azure Migrate アプリケーションとコードの評価ツールを使って、任意の種類の Java アプリケーションを評価およびプラットフォーム変更する方法について説明します。 このツールを使うと、Azure へのプラットフォーム変更と移行に関するアプリケーションの準備状況を評価できます。 このツールはコマンド ライン インターフェイス (CLI) として提供され、Java アプリケーションのバイナリとソース コードを評価し Azure の再プラットフォーム化と移行の機会を特定します。 一般的なユース ケースとコード パターンが識別されて、推奨される変更が提案され、大規模な Java アプリケーションの最新化とプラットフォーム変更に役立ちます。
このツールは、静的コード分析によってアプリケーションのテクノロジの使用状況を検出し、作業量の見積もりを提供し、コードのプラットフォーム変更の時間を短縮します。 この評価は、Java アプリケーションの優先順位付けと Azure への移行に役立ちます。 一連のエンジンとルールにより、このツールは、Java 11、Java 17、Jakarta EE、Spring、Hibernate、Java Message Service (JMS) などのさまざまなテクノロジを検出して評価できます。 ツールは次に、特定の Azure プラットフォーム変更ルールを使用した、Java アプリケーションのさまざまな Azure ターゲット (Azure App Service、Azure Kubernetes Service、Azure Container Apps) へのプラットフォーム変更を支援します。
このツールは、Red Hat によって作成され、主導される Cloud Native Computing Foundation プロジェクト Konveyor の一連のコンポーネントに基づいています。
概要
このツールは、組織がコストの削減と迅速なイノベーションが可能な方法で Java アプリケーションを最新化できるように設計されています。 このツールは、高度な分析手法を使って、Java アプリケーションの構造と依存関係を把握し、アプリケーションをリファクタリングして Azure に移行する方法に関するガイダンスを提供します。
これを使用すると、次の作業を実行できます。
- テクノロジの使用状況を検出する: アプリケーションで使われているテクノロジをすばやく確認します。 検出は、ドキュメントが十分ではないレガシ アプリケーションで使われているテクノロジを知りたい場合に便利です。
- 特定のターゲットに対してコードを評価する: Azure の特定のターゲットに対してアプリケーションを評価します。 アプリケーションを Azure にプラットフォーム変更するために必要な作業と変更を調べます。
サポート対象
このツールには、さまざまな Azure サービスにデプロイして使用できるように、アプリケーションのプラットフォーム変更を支援するためのルールが含まれています。
Azure Migrate のアプリケーションとコード評価で使用される規則は、"ターゲット" に基づいてグループ化されます。 ターゲットは、アプリケーションの実行場所または方法、および一般的なニーズと期待される内容です。 アプリケーションを評価するときは、複数のターゲットを選択できます。 次の表で、使用可能なターゲットについて説明します。
ターゲット名 | 説明 | 移行先 |
---|---|---|
Azure App Service | Azure App Service にアプリをデプロイするためのベスト プラクティス。 | azure-appservice |
Azure Kubernetes Service | Azure Kubernetes Service にアプリをデプロイするためのベスト プラクティス。 | azure-aks |
Azure Container Apps | Azure Container Apps にアプリをデプロイするためのベスト プラクティス。 | azure-container-apps |
クラウドの準備 | アプリケーション クラウド (Azure) を準備するための一般的なベスト プラクティス。 | cloud-readiness |
Linux | アプリケーションを Linux に対応させるための一般的なベスト プラクティス。 | linux |
OpenJDK 11 | Java 11 で Java 8 アプリケーションを実行するための一般的なベスト プラクティス。 | openjdk11 |
OpenJDK 17 | Java 17 で Java 11 アプリケーションを実行するための一般的なベスト プラクティス。 | openjdk17 |
OpenJDK 21 | Java 21 で Java 17 アプリケーションを実行するための一般的なベスト プラクティス。 | openjdk21 |
このツールは、クラウドの準備と関連する Azure サービスを評価するときに、さまざまな Azure サービスの潜在的な使用状況に関する有用な情報を報告することもできます。 次の一覧は、対象となるサービスの一部を示しています。
- Azure のデータベース
- Azure Service Bus
- Azure ストレージ
- Azure Content Delivery Network
- Azure Event Hubs
- Azure Key Vault
- Azure Front Door
ダウンロードおよびインストールする
appcat
CLI を使用するには、環境に固有のパッケージをダウンロードし、環境内に必要な依存関係を持っている必要があります。
appcat
CLI は、Intel、Arm、Apple シリコン ハードウェアのいずれでも、Windows、Linux、Mac などの環境で実行されます。
JDK 要件については、Microsoft Build of OpenJDK の使用をお勧めします。
OS | Architecture | ダウンロードのリンク | 他のファイル |
---|---|---|---|
x64 | |||
Windows | x64 | ダウンロード | sha256 / sig |
macOS | X64 | ダウンロード | sha256 / sig |
Linux | X64 | ダウンロード | sha256 / sig |
AArch64 | |||
Windows | AArch64 / ARM64 | ダウンロード | sha256 / sig |
macOS | Apple Silicon | ダウンロード | sha256 / sig |
Linux | AArch64 / ARM64 | ダウンロード | sha256 / sig |
前提条件
- Microsoft Build of OpenJDK 17 をダウンロードして、インストールします。 JAVA_HOME 環境変数が設定されていることを確認します。
-
Apache Maven をダウンロードし、ローカルでインストールします。 Maven バイナリ (
mvn
) はPATH
環境変数を使用して到達できることを確認します。 - Python 3 をダウンロードし、インストールします。
インストール
appcat
をインストールするには、プラットフォームに適した zip ファイルをダウンロードします。 ファイルをダウンロードした後、オペレーティング システムに応じて、.tar.gz (Linux/macOS) または .zip ファイル (Windows) が見つかります。
ダウンロードしたファイルからバイナリを抽出します。 次のフォルダー構造が表示されます:
/azure-migrate-appcat-for-java-cli-<OS>-<architecture>-<release-version>-preview/
├── appcat.exe (Windows) / appcat (Linux/macOS)
├── samples/
├── fernflower.jar
├── LICENSE
├── NOTICE.txt
├── maven.default.index
├── jdtls/
├── static-report/
├── rulesets/
├── readme.md
└── readme.html
ツールの実行
オプション 1: ダウンロードしたフォルダーから appcat を実行する
ディレクトリを抽出したフォルダーに変更します:
cd /azure-migrate-appcat-for-java-cli-<OS>-<architecture>-<release-version>-preview/
./appcat --help
Note
appcat
バイナリは、最初に現在のディレクトリ (実行元) 内でその依存関係を検索し、見つからない場合は次のシナリオにフォールバックします。
オプション 2: appcat バイナリ パスを $PATH に追加する
フォルダーの内容を、ユーザーのホーム ディレクトリの .appcat フォルダー (Linux/Mac では $HOME/.appcat、Windows では %USERPROFILE%/.appcat) に移動します。
ターミナル内の任意のフォルダーからツールを実行できるように、.appcat フォルダーを PATH
環境変数に追加します。
mv <path-to-extracted>/azure-migrate-appcat-for-java-cli-<OS>-<architecture>-<release-version>-preview/ $HOME/.appcat
Note
このコンテキストでは、appcat
バイナリがインストールされている場所とは異なるフォルダーから呼び出されると、ユーザーのホーム ディレクトリの .appcat フォルダー内でその依存関係が検索されます。
使用方法
サブコマンド
AppCAT には、次の 2 つのサブコマンドが用意されています:
-
analyze
: 入力ソース コードまたはバイナリに対してソース コード分析を実行します。 -
transform
: XML ルールを以前のバージョン (6 以前) からこのバージョンで使用される YAML 形式に変換します。
Note
macOS ユーザーの場合: アプリを実行しようとしたときに "Apple は検証できませんでした" というエラーが発生した場合は、次のコマンドを使用してこのエラーを解決できます:
xattr -d -r com.apple.quarantine /path/to/appcat_binary
次に例を示します。
xattr -d -r com.apple.quarantine $HOME/.appcat/appcat
Analyze サブコマンド
analyze
サブコマンドを使用すると、ソース コードとバイナリ分析を実行できます。
アプリケーションのソース コードを分析するには、次のコマンドを実行します:
./appcat analyze --input=<path-to-source-code> --output=<path-to-output-directory> --target=azure-appservice --overwrite
--input
フラグはソース コード ディレクトリまたはバイナリ ファイルを指し、--output
は分析結果を格納するディレクトリを指す必要があります。
分析フラグの詳細については、次のコマンドを実行します:
./appcat analyze --help
AppCAT で利用できるターゲットを調べるには、次のコマンドを実行します:
./appcat analyze --list-targets
このコマンドでは次の出力が生成されます。
available target technologies:
azure-aks
azure-appservice
azure-container-apps
azure-spring-apps
cloud-readiness
linux
openjdk11
openjdk17
openjdk21
複数のアプリケーションの分析
AppCAT は、コマンドの実行ごとに 1 つのアプリケーションを分析するように設計されていますが、--bulk
オプションを使用する場合は、1 回の実行で複数のアプリケーションを分析できます。 このオプションでは、すべてのアプリケーションの結果を含む単一の静的レポートが出力ディレクトリに生成されます。
複数のアプリケーションを分析するには、次のコマンドを実行します:
./appcat analyze --bulk --input=<path-to-source-A> --output=<path-to-output-ABC> --target=<targetname>
./appcat analyze --bulk --input=<path-to-source-B> --output=<path-to-output-ABC> --target=<targetname>
./appcat analyze --bulk --input=<path-to-source-C> --output=<path-to-output-ABC> --target=<targetname>
Transform サブコマンド
transform
サブコマンドを使用すると、6.x バージョンで使用されていた以前の appcat
XML 規則を、このバージョン 7.x で使用される新しい YAML 形式に変換できます。
ルールを変換するには、次のコマンドを実行します:
./appcat transform rules --input=<path-to-xml-rules> --output=<path-to-output-directory>
--input
フラグは XML 規則を含むファイルまたはディレクトリを指し、--output
フラグは変換された YAML ルールの出力ディレクトリを指す必要があります。
サンプル
Note
展開されたフォルダー内のスクリプトに対するファイルのアクセス許可が、実行を許可するように設定されていることを確認します。
サンプル フォルダーでは、airsonic.war と呼ばれるサンプル Web アプリケーション見つけることができます。 Airsonic はウェブベースのメディア ストリーミング ツールで、音楽にアクセスして友達と共有することができます。 Airsonic の詳細については、「Airsonic」を参照してください。
サンプル ディレクトリでは、さまざまな種類の分析を実行するための次のスクリプトを見つけることができます:
- run-assessment: Airsonic を Tomcat 上の Azure App Service に移行するためのコード評価と手順を含むレポートを提供します。
- run-assessment-transform-rules: Windup XML ルールをアナライザー lsp 互換の YAML ルールに変換します。
- run-assessment-custom-rules: カスタム ルール (XML から YAML への変換) を使用してコード評価レポートを提供します。
- run-assessment-openjdk21: Airsonic から OpenJDK 21 に移行するためのコード評価と手順を含むレポートを生成します。
- run-assessment-package-only: 特定のパッケージを評価してレポートを生成します。
オペレーティング システムに応じて、次の例に示すように、適切なスクリプトを実行します:
./samples/run-assessment
レポートが自動的に生成され、起動されます。 レポートは ../samples/report-* (Linux/macOS) または..\samples\report-* (Windows) にあります。
分析の概要
レポートのランディング ページには、アプリケーションで使われているすべてのテクノロジの一覧が表示されます。 ダッシュボードには、変換インシデントの数、インシデント カテゴリ、ストーリー ポイントなど、分析の概要が表示されます。
[Incidents by Category] 円グラフを拡大すると、[Mandatory]、[Optional]、[Potential] のカテゴリ別に、インシデントの数が表示されます。
ダッシュボードには、"ストーリー ポイント" も表示されます。 ストーリー ポイントは、アジャイル ソフトウェア開発において、機能または変更の実装に必要な作業のレベルを推定するために一般的に使われる抽象的なメトリックです。
appcat
では、ストーリー ポイントを使って、特定のアプリケーションを移行するために必要な作業のレベルが表されます。 ストーリー ポイント数が作業時間数に変換されるわけでは必ずしもありませんが、その値はタスク間で一貫しているはずです。
評価レポート
評価レポートでは、アプリケーションを Azure に移行するために解決する必要がある変換の問題の概要が示されます。
これらの "問題" ("インシデント" とも呼ばれます) には、重大度 ("必須"、"オプション"、"潜在的")、作業のレベル、ストーリー ポイントを示す値があります。 ストーリー ポイントは、インシデントの数に、問題を解決するために必要な作業量を掛けることによって決定されます。
特定の問題の詳細情報
各インシデントを選ぶだけで、詳細情報 (問題の詳細、ルールの内容など) を見ることができます。 また、このインシデントによって影響を受けるすべてのファイルの一覧も表示されます。
その後、インシデントの影響を受けるファイルまたはクラスごとに、ソース コードに移動して、問題の原因になったコード行に注目できます。
リリース ノート
7.6.0.0
このリリースは、Konveyor プロジェクトのさまざまなコンポーネントセットに基づいています。
一般的な更新
- Konveyor Analyzer LSP プロジェクトに基づく新しいエンジン。Konveyor Kantra プロジェクトに基づく CLI を使用します。
6.3.9.0
このリリースには、次の修正プログラムが含まれており、一連の新しい規則が含まれています。
一般的な更新
- Windup アップストリーム リポジトリからの統合された変更 (6.3.9.Final リリース)。
- ルールの説明とヘルプ テキストの動作しないリンクが解決されました。
ルール
- Azure メッセージ キュー:
azure-message-queue-rabbitmq
とazure-message-queue-amqp
の新しい規則が更新され、追加されました。 - Azure Service Bus: Azure Service Bus の検出規則が導入されました。
- MySQL と PostgreSQL: 依存関係の検出規則を調整しました。
- Azure-AWS ルール: 既存の規則が強化および改善されました。
- S3 Spring Starter: S3 Spring Starter の検出規則を追加しました。
- RabbitMQ Spring JMS: RabbitMQ Spring JMS の検出規則を追加しました。
- ログ記録規則: ログ関連の規則を更新および調整しました。
- ローカルストレージ規則: ローカルストレージ規則を更新および調整しました。
- Azure ファイル システム規則: Azure ファイル システム規則を更新および調整しました。
ライブラリ
- セキュリティの脆弱性に対処するためにライブラリをアップグレードしました。
6.3.0.9
このリリースには、次の修正プログラムが含まれており、一連の新しい規則が含まれています。
-
localhost-java-00001
ルールに関する問題を解決しました。 - AWS S3、AWS SQS、Alibaba Cloud OSS、Alibaba Cloud SMS、Alibaba Scheduler X、Alibaba Cloud Seata、Alibaba Rocket MQ などのテクノロジを識別するための新しいルールを導入しました。
- XML ファイル拡張子をサポートするように
azure-file-system-02000
を更新しました。 - セキュリティの脆弱性に対処するために、さまざまなライブラリをアップグレードしました。
6.3.0.8
以前は、一連のターゲットが既定で有効になっていたため、一定の顧客にとっては、重要度の低い問題に関するインシデントが多すぎる大規模なアプリケーションを評価するのは困難でした。 レポートのノイズを減らすために、ユーザーは、appcat
の実行時にパラメーター --target
を使用して複数のターゲットを指定する必要があります。これにより、重要なターゲットのみを選択する選択肢が得られます。
6.3.0.7
Azure Migrate のアプリケーションとコード評価の GA (一般公開) リリース。
既知の問題
7.6.0.0
-
--analyze-known-libraries
フラグが Windows で動作していません。 - Windows では、分析プロセス中に次の追加フォルダーが生成されますが、完了後に自動的に削除されることはありません。 分析が完了した後で、これらの追加のフォルダーを削除できます。
- metadata。
- org.eclipse.osgi
- org.eclipse.equinox.app
- org.eclipse.core.runtime
- org.eclipse.equinox.launcher
- フラグ
--overrideProviderSettings
はサポートされていません。 - フラグ
--json-output
はサポートされていません。 今後のリリースでは、output.yaml と dependency.yaml ファイルの JSON 出力が生成されます。 - ルールの問題:
- azure-system-config-01000、http-session-01000、java-removals-00150 ルールはトリガーされません。
- FileSystem - Java IO ルールがトリガーされない
- 分析の実行時に "ルールセットのすべてのルールを解析できません" というメッセージが表示されます。 このエラーは、ツールがルール セット内のすべてのルールを解析できない場合に、分析中に発生します。
- Windows で WAR ファイルを分析すると、次のエラーが生成されます:
Failed to Move Decompiled File
. Windows OS で作成されたいくつかの冗長インシデントを担当する Windows で WAR ファイルを分析すると、エラーが発生します。 - [分析情報] タブの一部のルールの説明がありません。一部のタグ ルールには説明がないため、レポートの [
Insights
] タブに空白のタイトルが表示されます。 - Windows 上の Watcher エラー チャネルのエラー:
Windows system assumed buffer larger than it is, events have likely been missed
。 このエラー メッセージは、Windows で実行時間の長いジョブ中にコマンド ラインに表示されます。 - このリリースでは、依存関係分析のためにアクティブなインターネット接続が必要です。
- Ctrl+C は、継続的な分析を停止できません。 回避するには、プロセスを明示的に強制終了して、プロセスを手動で終了します。
- フラグ
--context-lines
が数値 0 に設定されている場合、期待どおりに機能しません。 このフラグを使用すると、ユーザーはレポートに表示するソース コードの量を制限できます。 値 0 に設定すると、期待どおりに機能しない可能性があります。
ライセンス
Java 用の Azure Migrate アプリケーションとコード評価は、無料のオープン ソース ベースのツールです。