Java アプリケーションのモダナイゼーションを評価する

このページでは、Google Cloud コンソールで Google Cloud Modernization Hub を使用して、Linux コンテナ化と、 Google Cloud上のクロスプラットフォーム Java Long-Term Support(LTS)リリース(Java 17 や Java 21 など)へのモダナイゼーションのためにエンタープライズ Java アプリケーションを評価する方法について説明します。

多くのエンタープライズ Java アプリケーションは、レガシー Java EE API、独自のアプリケーション サーバー構成(WebLogic、WebSphere、JBoss など)、または Linux コンテナへの直接デプロイを妨げる古いサードパーティ ライブラリに依存しています。Modernization Hub の自動評価では、ソースコードを分析し、移行の阻害要因を特定し、Maven または Gradle の依存関係の互換性を評価し、Cloud Run または Google Kubernetes Engine のリファクタリング パスを推奨します。

Java アプリケーションの評価を使用するタイミング

次のいずれかを行う場合は、Java アプリケーションの評価を実行します。

  • Linux コンテナへのプラットフォームの再構築: Cloud Run または GKE 用にアプリケーションをコンテナ化する前に、環境固有の依存関係(ローカル ファイル システム アクセス、JNI ライブラリ、独自のアプリケーション サーバー API など)を特定します。
  • Java ランタイム バージョンをアップグレードする: Java 8 または Java 11 から最新の Java LTS リリース(Java 17 または Java 21)に移行する場合、または Java EE(javax.*)から Jakarta EE(jakarta.*)に移行する場合の労力と互換性のギャップを評価します。
  • モノリシック アーキテクチャの分離: クラウドネイティブ マイクロサービスまたは Spring Boot アプリケーションへのリファクタリングが必要な、密結合の EJB コンポーネント、JMS メッセージ ブローカー、モノリシック WAR デプロイと EAR デプロイを検出します。

始める前に

コンソールで Java 評価ジョブを開始する前に、必要な API を有効にし、プロジェクトの Identity and Access Management(IAM)権限を確認し、ワークスペース設定バケットを登録して、ソースコード アーカイブを Cloud Storage にアップロードします。

必要な API の有効化

Modernization Hub を使用するには、プロジェクトで必要な Google Cloudサービス API を有効にします。

gcloud services enable \
    aiplatform.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    cloudresourcemanager.googleapis.com \
    compute.googleapis.com \
    logging.googleapis.com \
    storage.googleapis.com \
    --project=PROJECT_ID

PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

必要なロール

評価を実行するには、Cloud Build と Gemini Enterprise Agent Platform を使用する 2 つの ID に対して個別の IAM 権限が必要です。

  • 認証済みコンソール ユーザー(ジョブを開始してバケットにアクセスする):
    • ストレージ管理者(roles/storage.admin)
    • サービス アカウント ユーザー(roles/iam.serviceAccountUser)
    • Cloud Build 編集者(roles/cloudbuild.builds.editor)
  • 専用サービス アカウント(評価コンテナを実行):
    • Agent Platform ユーザー(roles/aiplatform.user)
    • Storage オブジェクト ユーザー(roles/storage.objectUser)または Storage 管理者(roles/storage.admin)

評価を開始して分析コンテナを実行するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

  • ユーザー - ソース アーカイブとバケット構成を管理する: Storage 管理者(roles/storage.admin)
  • ユーザー - 専用のサービス アカウントをジョブに接続します。サービス アカウント ユーザー(roles/iam.serviceAccountUser)
  • ユーザー - 評価ジョブ(cloudbuild.builds.create)を送信してログを表示する: Cloud Build 編集者(roles/cloudbuild.builds.editor)
  • サービス アカウント - codmod コンテナを実行する: Agent Platform ユーザー(roles/aiplatform.user)
  • サービス アカウント - ソース アーカイブの読み取りと評価レポートの書き込み: Storage オブジェクト ユーザー(roles/storage.objectUser)または Storage 管理者(roles/storage.admin)

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、評価を開始して分析コンテナを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

評価を開始して分析コンテナを実行するには、次の権限が必要です。

  • ユーザー(Cloud Storage、Cloud Build、IAM):
    • storage.objects.get(ファイルのダウンロードまたは読み取り)
    • storage.objects.list(バケット内のファイルを一覧表示する場合)
    • storage.objects.create(新しいファイルをアップロードまたは作成する場合)
    • storage.objects.update(既存のファイルのメタデータを変更する場合)
    • storage.objects.delete(ファイルを削除または上書きする場合)
    • storage.buckets.get(バケットレベルの構成を表示)
    • cloudbuild.builds.create(評価ジョブを送信する場合)
    • iam.serviceAccounts.actAs(サービス アカウントをジョブに関連付けるため)
  • サービス アカウント(Agent Platform と Cloud Storage):
    • aiplatform.endpoints.predict(AI を活用したコード分析を実行する場合)
    • storage.objects.get(ソース アーカイブの読み取りまたはダウンロード)
    • storage.objects.list(入力フォルダ内のファイルを一覧表示する場合)
    • storage.objects.create(評価レポートを作成するため)
    • storage.objects.delete(一時ファイルを削除する場合)

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

ワークスペース設定バケットを構成する

[Modernization Hub] > [設定] ページで、ワークスペース バイナリ状態ファイル(dotnet_jobs.pb、java_jobs.pb、mainframe_jobs.pb)を保存する指定の Cloud Storage バケット(gs://PROJECT_ID-modernization-hub など)を登録します。

コードベースのサイズ上限を確認する

最適なパフォーマンスを維持するために、codmod 評価エンジンは次のスケーリングとアーカイブのガイドラインを適用します。

  • 最大コードベース サイズ: 評価ジョブあたり約 600 万行のコード(LOC)。リポジトリが 600 万 LOC を超える場合は、アップロードする前にコードベースを小さく独立したモジュールまたはサービスに分割します。
  • クリーンなアーカイブ構造: コンパイル済みのバイナリ、パッケージ キャッシュ、バージョン管理メタデータ(target/、build/、bin/、node_modules/、.git/ など)を zip ファイルから除外して、ソースファイルとビルド構成のみが分析されるようにします。

Java ソース アーカイブを準備してアップロードする

ビルド出力を含まない ZIP ファイルとして Java コードベースをパッケージ化し、プロジェクトの Cloud Storage バケットにファイルをアップロードします。

  1. ローカルマシンで、次のいずれかの方法を使用してリポジトリの ZIP ファイルを作成します。

    • Git を使用する(推奨):

      git archive --format=zip -o repository.zip HEAD
      
    • zip CLI を使用する場合:

      zip -r repository.zip . \
          -x "*.git*" "*/target/*" "*/build/*" "*/bin/*" "*/node_modules/*"
      
  2. Google Cloud CLI を使用して、ZIP ファイルをターゲットの Cloud Storage バケットにアップロードします。

    gcloud storage cp repository.zip \
        gs://INPUT_BUCKET/codebase/repository.zip
    

    INPUT_BUCKET は、ターゲットの Cloud Storage バケットの名前に置き換えます。

評価を実行する

Modernization Hub で評価ジョブを開始する手順は次のとおりです。

  1. コンソールで、[Modernization Hub] ページに移動します。

    Modernization Hub に移動

  2. ランディング ページで、[Java ワークロード] カードを見つけて [評価を開始] をクリックします。

  3. [ジョブ名] フィールドに、評価ジョブの一意の名前を入力します。

  4. [ソースコードの場所] フィールドで、ソースコードを zip ファイルとして含む Cloud Storage バケットを選択します。

  5. [レポートの場所] フィールドで、生成された評価レポートを保存する Cloud Storage バケットを選択します。

  6. [モダナイゼーション レシピ] リストから、モダナイゼーション レシピを選択します。

  7. [ロケーション] リストから、評価ジョブのリージョンを選択します。

  8. [サービス アカウント] フィールドで、必要なロール セクションに記載されている必要な IAM ロールを持つ専用のサービス アカウントを選択します。Cloud Build はこのサービス アカウントで評価ジョブを実行します。これには、Agent Platform ユーザー権限と Cloud Storage 権限が必要です。

  9. [レポートを生成] をクリックします。

    コンソールは、codmod エンジンを実行してプロジェクトを分析するバックグラウンド評価コンテナを起動します。ジョブのステータスは、[評価履歴] テーブルに表示されます。

評価レポートを確認する

コードベースのサイズに応じて、評価ジョブは通常数分以内に完了します。バックグラウンド コンテナは、処理が完了すると自動的に終了します。

アセスメントの結果にアクセスするには:

  1. Modernization Hub ページの [評価履歴] テーブルで、評価ジョブを見つけます。
  2. [ステータス] 列が [完了] に変わったら、[レポートをダウンロード] をクリックします。
  3. 優先出力形式を選択します。
    • HTML レポート: 互換性のない API をフィルタリングしたり、ファイルごとのブロックリストを検査したり、修復の提案を表示したりできるインタラクティブな概要。
    • マークダウン レポート: 関係者やアーキテクチャ レビュー委員会との共有に適した形式の要約。

評価レポートを確認する

生成された評価レポートでは、アプリケーションの移行準備状況がいくつかの主要分野に分類されます。

  • 全体的な互換性スコア: 変更なしでターゲット Java ランタイムに移行できるソースコード行と依存関係の割合。
  • ブロッカーの内訳: リファクタリングが必要な特定のレガシー Java 依存関係または環境制約(次のようなもの)。
    • Java EE(javax.*)から Jakarta EE(jakarta.*)への名前空間の変更。
    • JDK 内部 API(sun.misc.* パッケージや CORBA モジュールなど)が削除または非推奨になりました。
    • 独自のアプリケーション サーバー構成または API(WebLogic、WebSphere、JBoss デプロイ記述子など)。
  • 依存関係の分析: 既存の Maven または Gradle の依存関係の詳細なインベントリ。各ライブラリがターゲットの Java ランタイム バージョンをサポートしているかどうか、またはアップグレードが必要かどうかを示します。
  • 推奨アクション: codmod によって生成された推奨コード変換、AI を活用したリファクタリング レシピ、移行パス。 Google Cloudでのコンテナ化に向けてアプリケーションを準備します。

次のステップ