次の方法で共有


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 によって作成されて Eclipse Public License の下で公開されているプロジェクトである WindUp に基づいています。

概要

このツールは、組織がコストの削減と迅速なイノベーションが可能な方法で Java アプリケーションを最新化できるように設計されています。 このツールは、高度な分析手法を使って、Java アプリケーションの構造と依存関係を把握し、アプリケーションをリファクタリングして Azure に移行する方法に関するガイダンスを提供します。

これを使用すると、次の作業を実行できます。

  • テクノロジの使用状況を検出する: アプリケーションで使われているテクノロジをすばやく確認します。 検出は、ドキュメントが十分ではないレガシ アプリケーションで使われているテクノロジを知りたい場合に便利です。
  • 特定のターゲットに対してコードを評価する: Azure の特定のターゲットに対してアプリケーションを評価します。 アプリケーションを Azure にプラットフォーム変更するために必要な作業と変更を調べます。

サポート対象

このツールには、さまざまな Azure サービスにデプロイして使用できるように、アプリケーションのプラットフォーム変更を支援するためのルールが含まれています。

Azure Migrate のアプリケーションとコード評価で使用される規則は、"ターゲット" に基づいてグループ化されます。 ターゲットは、アプリケーションの実行場所または方法、および一般的なニーズと期待される内容です。 アプリケーションを評価するときは、複数のターゲットを選択できます。 次の表で、使用可能なターゲットについて説明します。

移行先 説明 ID
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
探索 ライブラリやフレームワークなどのテクノロジの使用状況を識別する。 discovery
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 を使うには、次のセクションで説明する ZIP ファイルをダウンロードする必要があり、互換性のある JDK 11 または JDK 17 がコンピューターにインストールされている必要があります。 appcat CLI は、Intel、Arm、Apple シリコン ハードウェアのいずれでも、Windows、Linux、Mac などの Java 互換環境で実行されます。 Microsoft Build of OpenJDK の使用をお勧めします。

詳しくは、「リリース ノート」のセクションをご覧ください。

既知の問題

特定のラムダ式を解析するとき、一部のルールがトリガーされない場合があります。 詳しくは、GitHub のイシューをご覧ください。

複雑な 2 バイト文字を含む Unicode 以外の環境で appcat を実行すると、破損が発生します。 回避策については、GitHub のイシューをご覧ください。

以前のリリース

次の以前のリリースもダウンロードできます。

作業の開始

appcat を実行するには、サポートされている JDK がインストールされていることを確認します。 このツールは、次の JDK をサポートします。

  • Microsoft Build of OpenJDK 11
  • Microsoft Build of OpenJDK 17
  • Eclipse Temurin™ JDK 11
  • Eclipse Temurin™ JDK 17

有効な JDK がインストールされたら、そのインストール ディレクトリが JAVA_HOME 環境変数で正しく構成されていることを確認します。

続行するには、任意のフォルダーにパッケージをダウンロードして解凍します。 これにより、次のディレクトリ構造が作成されます。

appcat-cli-<version>    # APPCAT_HOME
  ├── README.md
  ├── bin
  │   ├── appcat
  │   └── appcat.bat
  ├── docs
  │   └── appcat-guide.html
  └── samples
      ├── airsonic.war
      ├── run-assessment
      ├── run-assessment-custom-rules
      ├── run-assessment-exclude-packages
      ├── run-assessment-no-code-report
      ├── run-assessment-openjdk21
      ├── run-assessment-zip-report
      └── run-discovery
  • docs: このディレクトリには、appcat のドキュメントが入っています。
  • bin: このディレクトリには、appcat CLI の実行可能ファイル (Windows、Linux、Mac 用) が入っています。
  • samples: このディレクトリには、サンプル アプリケーションと、サンプル アプリケーションに対して appcat を実行するためのいくつかのスクリプトが入っています。

ツールを実行するには、ターミナル セッションを開き、$APPCAT_HOME/bin ディレクトリから次のコマンドを入力します。

./appcat --help

コンピューター内の任意の場所からツールを実行するには、PATH 環境変数にディレクトリ $APPCAT_HOME/bin を構成した後、ターミナル セッションを再起動します。

ドキュメント

次のガイドでは、Java 用の appcat の主なドキュメントが提供されています。

Azure サービスを念頭に置かずにテクノロジの使用状況とクラウドの準備を検出する

テクノロジとクラウドの準備のターゲットの検出により、アプリケーションの再プラットフォームとクラウドへの最新化に関する優れた分析情報が得られます。 このツールは、アプリケーションとそのコンポーネントをスキャンして、その構造、アーキテクチャ、依存関係を包括的に把握します。 また、クラウド環境で困難になる可能性のある潜在的な問題も見つかります。 特に discovery ターゲットは、アプリケーションとそのコンポーネントの詳細なインベントリを作成するために使用されます。 このインベントリは、さらなる分析と計画の基礎として機能します。 詳細については、「Discovery レポート」セクションを参照してください。

検出とクラウドの準備を始めるには、次のコマンドを使います。

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target discovery cloud-readiness

この種類のレポートは、アプリケーションのデプロイ先として特定の Azure サービスを念頭に置いていない場合に便利です。

--target パラメーターにその値を含めるかどうかに関係なく、ツールにより常に discovery が実行されます。

Java アプリケーションの評価

"評価" フェーズでは、appcat CLI がアプリケーションとそのコンポーネントを分析し、プラットフォーム変更に対するその適合性を判断して、潜在的な課題や制限を特定します。 このフェーズには、アプリケーション コードの分析と、選択したターゲットへの準拠のチェックが含まれます。

--target 引数で、スペース区切りの値のリストを使用すると、複数のターゲットを選択できます。

利用できるターゲットを調べるには、次のコマンドを実行します。

./appcat --listTargetTechnologies

次の例のような出力が表示されます。

Available target technologies:
    azure-aks
    azure-appservice
    azure-container-apps
    cloud-readiness
    discovery
    linux
    openjdk11
    openjdk17
    openjdk21

その後、次の例で示すように、利用できるターゲットのうちの 1 つまたは組み合わせたものを使って appcat を実行できます。

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target cloud-readiness linux azure-appservice

次の例で示すように、利用できる OpenJDK ターゲットのいずれかを使って appcat を実行することもできます。

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target openjdk11

OpenJDK (Java) ターゲットの場合は、一度に 1 つだけ選択することをお勧めします。

Azure 評価のターゲットの推奨事項

Azure デプロイのアプリケーションを評価するときは常に、次のターゲットから開始することをお勧めします。

  • discovery
  • cloud-readiness

また、azure-appserviceazure-container-appsなど、デプロイ用の Azure サービスを指定します。

Windows 環境から Linux VM またはコンテナーにアプリケーションを移動する場合は、linux ターゲットも追加することをお勧めします。

アプリケーションを古いバージョンの JDK から新しいバージョンに移行する場合は、アプリケーションで使用されている以前のバージョンと比較して、その次のメジャー バージョンを選択することをお勧めします。 たとえば、アプリケーションが現在 Java 8 でデプロイされている場合は、openjdk11 を使用します。

appcat から結果を取得する

検出と評価のフェーズの結果は、Azure サービスとプラットフォーム変更アプローチに関する推奨事項など、Java アプリケーションのプラットフォーム変更と最新化のロードマップを提供する詳細なレポートです。 このレポートは、プラットフォーム変更プロセスの次のステージの基礎になります。 これは、組織がこのような変革に必要な作業について理解し、メリットが最大になるアプリケーションの最新化方法を決定するのに役立ちます。

appcat によって生成されたレポートでは、アプリケーションとそのコンポーネントの包括的な概要が提供されます。 このレポートを使って、アプリケーションの構造と依存関係に関する分析情報を取得し、プラットフォーム変更と最新化に対する適合性を判断できます。

以降のセクションでは、レポートについて詳しく説明します。

分析の概要

レポートのランディング ページには、アプリケーションで使われているすべてのテクノロジの一覧が表示されます。 ダッシュボードには、変換インシデントの数、インシデント カテゴリ、ストーリー ポイントなど、分析の概要が表示されます。

appcat 概要レポートのスクリーンショット。

[Incidents by Category] 円グラフを拡大すると、[Mandatory][Optional][Potential][Information] のカテゴリ別に、インシデントの数が表示されます。

ダッシュボードには、"ストーリー ポイント" も表示されます。 ストーリー ポイントは、アジャイル ソフトウェア開発において、機能または変更の実装に必要な作業のレベルを推定するために一般的に使われる抽象的なメトリックです。 appcat では、ストーリー ポイントを使って、特定のアプリケーションを移行するために必要な作業のレベルが表されます。 ストーリー ポイント数が作業時間数に変換されるわけでは必ずしもありませんが、その値はタスク間で一貫しているはずです。

AppCAT の概要インシデント レポートのスクリーンショット。

検出レポート

検出レポートは、"検出フェーズ" の間に生成されるレポートです。 Information カテゴリのアプリケーションで使われているテクノロジの一覧が表示されます。 このレポートは、appcat で検出されたテクノロジの使用に関する情報を提供するだけのものです。

appcat の概要レポートのスクリーンショット。

評価レポート

評価レポートでは、アプリケーションを Azure に移行するために解決する必要がある変換の問題の概要が示されます。

これらの "問題" ("インシデント" とも呼ばれます) には、重大度 ("必須"、"オプション"、"潜在的"、"情報")、作業のレベル、ストーリー ポイントを示す値があります。 ストーリー ポイントは、インシデントの数に、問題を解決するために必要な作業量を掛けることによって決定されます。

AppCAT の評価レポートのスクリーンショット。

特定の問題の詳細情報

各インシデントを選ぶだけで、詳細情報 (問題の詳細、ルールの内容など) を見ることができます。 また、このインシデントによって影響を受けるすべてのファイルの一覧も表示されます。

AppCAT の問題の詳細レポートのスクリーンショット。

その後、インシデントの影響を受けるファイルまたはクラスごとに、ソース コードに移動して、問題の原因になったコード行に注目できます。

AppCAT の問題コード レポートのスクリーンショット。

カスタム規則

appcat はルール エンジンと考えることができます。 ルールを使った Java アーカイブからのファイルの抽出、Java クラスの逆コンパイル、ファイルの種類のスキャンと分類、これらのファイルの分析、レポートの作成が行われます。 appcat でのルールは、ルールセットの形式で定義されます。 ルールセットは、appcat が分析の間に検出できる特定の問題またはパターンを定義する個々のルールのコレクションです。

これらのルールは、次のルール パターンを使って XML で定義されています。

when (condition)
    perform (action)
    otherwise (action)

appcat には、標準的な移行ルールの包括的なセットが用意されています。 アプリケーションにはカスタム ライブラリまたはコンポーネントが含まれる可能性があるため、appcat では、既存のルールセットでカバーされる可能性があるコンポーネントまたはソフトウェアの使用を識別するための独自のルールを記述できます。

カスタム ルールを記述するには、XML で表されたリッチなドメイン固有言語 (DLS) を使います。 たとえば、Java アプリケーションでの PostgreSQL JDBC ドライバーの使用を識別し、代わりに Azure PostgreSQL フレキシブル サーバーの使用を提案するルールが必要であるとします。 次の例で示す依存関係など、Maven の pom.xml ファイルまたは Gradle ファイルで定義されている PostgreSQL JDBC ドライバーを見つけるためのルールが必要です。

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

この依存関係の使用を検出するには、規則で次の XML タグを使います。

  • ruleset: ルールセットの一意識別子。 ルールセットは、特定のテクノロジに関連するルールのコレクションです。
  • targetTechnology: ルールの対象となるテクノロジ。 この場合のルールは、Azure App Services、Azure Kubernetes Service (AKS)、Azure Container Apps を対象としています。
  • rule: 1 つのルールのルート要素。
  • when: ルールをトリガーするために満たされる必要がある条件。
  • perform: ルールがトリガーされたときに実行されるアクション。
  • hint: レポートに表示されるメッセージ、そのカテゴリ (情報、オプション、または必須)、問題を解決するために必要な作業 (1 (簡単) から 13 (困難) の範囲)。

次に示すのは、カスタム ルールを定義する XML です。

<ruleset id="azure-postgre-flexible-server"
         xmlns="http://windup.jboss.org/schema/jboss-ruleset"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
    <metadata>
        <description>Recommend Azure PostgreSQL Flexible Server.</description>
        <dependencies>
            <addon id="org.jboss.windup.rules,windup-rules-xml,3.0.0.Final"/>
        </dependencies>
        <targetTechnology id="azure-appservice"/>
        <targetTechnology id="azure-aks"/>
        <targetTechnology id="azure-container-apps"/>
    </metadata>
    <rules>
        <rule id="azure-postgre-flexible-server">
            <when>
                <project>
                    <artifact groupId="org.postgresql" artifactId="postgresql"/>
                </project>
            </when>
            <perform>
                <hint title="Azure PostgreSQL Flexible Server" category-id="mandatory" effort="7">
                    <message>The application uses PostgreSQL. It is recommended to use Azure PostgreSQL Flexible Server instead.</message>
                    <link title="Azure PostgreSQL Flexible Server documentation" href="https://learn.microsoft.com/azure/postgresql/flexible-server/overview"/>
                </hint>
            </perform>
        </rule>
    </rules>
</ruleset>

appcat でこのルールを実行した後、分析をもう一度実行して、生成されたレポートを確認します。 他のインシデントと同様に、評価レポートには、このルールに関連して特定された問題と影響を受けるファイルの一覧が表示されます。

ルールが実行されている appcat のスクリーンショット。

ルール開発の完全なガイドは、azure.github.io/appcat-docs/rules-development-guide で入手できます。

リリース ノート

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 (一般公開) リリース。

ライセンス

Java 用 Azure Migrate アプリケーションとコードの評価は無料のオープンソース ツールであり、アップストリームの WindUp プロジェクトと同じライセンスの下でライセンスされています。

よく寄せられる質問

Q: Java 用 Azure Migrate アプリケーションとコードの評価の最新バージョンはどこでダウンロードできますか?

appcat は、aka.ms/appcat/azure-appcat-cli-latest.zip からダウンロードできます。

Q: Java 用 Azure Migrate アプリケーションとコードの評価に関する詳細情報はどこで確認できますか?

ダウンロードした appcatdocs ディレクトリに、使い始めるために必要なすべての情報が収められています。

Q: Azure の具体的なルールはどこで確認できますか?

すべての Azure ルールは、appcat のルールセット GitHub リポジトリで入手できます。

Q: カスタム ルールの作成に関する詳細情報はどこで確認できますか?

Java 用 Azure Migrate アプリケーションとコードの評価の「ルール開発ガイド」をご覧ください。

Q: カスタム ルールを作成するときのヘルプはどこで得られますか?

ヘルプを得る最善の方法は、appcat-rulesets GitHub リポジトリでイシューを作成することです。