GitHub Copilotモダン化エージェントを使用したバッチ評価

Batch 評価を使用すると、Java、.NET、JavaScript/TypeScript アプリケーションのポートフォリオを 1 回の実行で分析できます。 アプリケーション全体の最新化の状況を包括的に確認できます。 この記事では、複数のリポジトリを効率的に評価するプロセスについて説明します。 このプロセスでは、Java、.NET、JavaScript/TypeScript プロジェクトが混在する単一言語リポジトリと mono-repos の両方がサポートされます。

各アプリケーションは、2 つの補完的なトラックに沿って分析されます。 問題のスキャンでは 、修正する必要がある問題が検出されます。 Codebase insights では、 アプリケーションを計画できるようにアプリケーションがどのように構築されているかが文書化されています。

問題スキャン

問題スキャンでは、3 つのドメインにまたがる最新化とセキュリティの問題が検出されます。 言語カバレッジはドメインによって異なります。

  • アップグレード — ランタイムとフレームワークのバージョン分析。 Java.NETについて説明します。
  • クラウド対応状況 — Azure ターゲット プラットフォームへの適合性と移行に関する問題。 Java.NETについて説明します。
  • セキュリティ — 直接および推移的な依存関係全体にわたる CVE スキャンと、 ISO 5055 ガイド付き CWE セキュリティの問題。 現時点ではJavaのみ;.NETと JavaScript/TypeScript のサポートはロードマップに記載されています。

Codebase insights

Codebase insights では、各アプリケーションの構築方法が文書化されています。 これらは、Java.NET、および JavaScript/TypeScript プロジェクト用に生成されます。 [解析カバレッジ] 設定で [完全解析 ] を選択すると表示されます。

  • アーキテクチャ — レイヤー化、モジュール境界、ランタイム トポロジ、エントリ ポイントを含むアーキテクチャの概要図。
  • API Contracts — REST、gRPC、message-queue、webhook は、アプリが公開または使用するサーフェスを表示します。 移行前に統合ブラスト半径のサイズを変更します。
  • 構成 — 構成ファイル、環境変数、機能フラグ、接続文字列、シークレット。 シークレットと構成の移行をAzure Key VaultとAzure App Configurationに駆動します。
  • ビジネス ワークフロー — コードから再構築されたエンドツーエンドの機能フロー (たとえば、 注文→予約→支払→フルフィルメント)。 回帰テストの範囲とステークホルダーとのコミュニケーションの基準を定めます。
  • 依存関係 — バージョンが固定された直接依存ライブラリ、推移的依存ライブラリ、SDK、ドライバー。 Azure サービスのマッピングに反映し、EOL またはベータのピンを表示します。
  • データ モデル - ORM マッピングと DDL からのデータベース、スキーマ、主要エンティティ、リレーションシップ。 データ層の移行計画を推進します。

報告書

バッチ評価は、さまざまなアプリケーションの準備状況と要件を一度に効率的に評価できるため、移行計画に特に重要です。 バッチ評価を使用すると、異なるリポジトリを同時に評価し、各アプリケーションの詳細な評価レポートを取得できます。 移行計画をサポートするために、次の 2 種類のレポートが生成されます。

  • リポジトリごとのレポート: 個々のリポジトリ レベルで識別される 2 つの側面に関する詳細な分析情報を提供します。
  • Aggregated レポート: 評価されたすべてのアプリケーションの全体的な視点を示し、概要分析情報、Azure サービスに関する推奨事項、ターゲット プラットフォーム、アップグレード パス、移行戦略、移行ウェーブを提供します。 さらに、集約されたレポートには、各リポジトリ レポートに簡単にアクセスするためのショートカットが含まれています。

Batch 評価には、次の利点があります。

  • アプリケーション間の可視性:

    • 集計レポート: アプリケーション全体の包括的なビューを取得します。
    • クロスリポジトリ分析: アプリケーション間の一般的なパターンと依存関係を特定します。
    • 優先順位付けの分析情報: すぐに注意が必要なアプリケーションを理解します。
  • スケールと効率:

    • 並列処理: クラウド エージェントを使用して複数のリポジトリを同時に処理します。
    • 自動化されたワークフロー: スケジュールされた評価のために CI/CD パイプラインと統合します。
    • 時間の節約: 評価時間の合計を数週間から数時間に短縮します。

前提条件

  • CLI を最新化します
  • 評価するすべてのリポジトリへのアクセス。
  • GitHub認証が構成されている (gh auth login)。

リポジトリを構成する

モダン化エージェントでは、評価するリポジトリを指定する複数の方法がサポートされています。

  • 現在のフォルダー: 現在の作業ディレクトリ内のプロジェクトを評価します。
  • 手動入力: ローカル ディレクトリ パスまたはリモート Git URL を直接入力します。
  • リポジトリ構成ファイル: すべてのリポジトリを一覧表示する JSON 構成ファイルを使用します。

リポジトリ構成ファイル

多数のリポジトリでバッチ操作を行う場合は、すべてのリポジトリを一覧表示する JSON 構成ファイルを作成します。 たとえば、作業ディレクトリの .github/modernize/repos.json に作成するか、カスタム パスを指定します。

リポジトリに適切なアクセス許可があることを確認するか、フォークを作成してください。

単純な形式 (リポジトリの配列):

[
  {
    "name": "PhotoAlbum-Java",
    "url": "https://github.com/Azure-Samples/PhotoAlbum-Java.git"
  },
  {
    "name": "PhotoAlbum",
    "url": "https://github.com/Azure-Samples/PhotoAlbum.git"
  },
  {
    "name": "eShopOnWeb",
    "url": "https://github.com/dotnet-architecture/eShopOnWeb.git"
  }
]

フル フォーマット (ブランチ パスとローカル パスを含む):

{
  "repos": [
    {
      "name": "PhotoAlbum-Java",
      "url": "https://github.com/Azure-Samples/PhotoAlbum-Java.git",
      "branch": "main"
    },
    {
      "name": "local-project",
      "path": "/absolute/path/to/project"
    }
  ]
}

各リポジトリ エントリは、次のフィールドをサポートしています。

フィールド 説明 必須
name リポジトリのフレンドリ名 (レポートとダッシュボードで使用)。 はい
url HTTPS または SSH 形式の Git クローン URL。 urlまたはpath
path 絶対ローカル ディレクトリ パス。 urlまたはpath
branch 複製後にチェックアウトする分岐。 いいえ
description 人間が判読できる説明。 いいえ

アプリのグループ化を使用した完全な形式 (省略可能、整理されたレポートの場合):

apps[] セクションを追加して、リポジトリを論理アプリケーションにグループ化できます。 アプリが定義されると、集計レポートはアプリケーションごとに結果を整理し、外部の宛先へのレポート配布をサポートします。

{
  "repos": [
    {
      "name": "PhotoAlbum-Java",
      "url": "https://github.com/Azure-Samples/PhotoAlbum-Java.git",
      "branch": "main"
    },
    {
      "name": "PhotoAlbum",
      "url": "https://github.com/Azure-Samples/PhotoAlbum.git"
    }
  ],
  "apps": [
    {
      "identifier": "photo-app",
      "description": "Photo management application",
      "repos": ["PhotoAlbum-Java"],
      "output": {
        "type": "local",
        "path": "/path/to/reports/photo-app"
      }
    }
  ]
}

各アプリ エントリでは、次の機能がサポートされます。

フィールド 説明 必須
identifier アプリケーションの一意の表示名。 はい
description 人間が判読できる説明。 いいえ
repos このアプリに属するリポジトリ名の一覧。 はい
output 生成後にこのアプリの評価レポートを配布する場所。 いいえ

[ output ] フィールドでは、次の配布の種類がサポートされています。

タイプ 説明 必須フィールド
local レポートをローカル ディレクトリにコピーします。 path
git Git リポジトリにレポートをプッシュします。 URL 形式は、https://github.com/org/repo.git#branch:path です。 url

ヒント

アクセス権がある限り、さまざまな組織のリポジトリを含め、さまざまな認証方法を使用できます。

モダン化エージェントは、対話型モードで構成ファイルから選択すると、repos.json.github/modernize/repos.jsonファイルを自動的に検出します。 カスタム パスを指定することもできます。

バッチ評価の実行

次の 2 つの実行モードを使用できます。

  • ローカル実行: モダン化エージェントは、ローカル コンピューター上でリポジトリを次々に処理します。 このモードは、小規模なアプリケーションセットや初期テストに最適です。 Git URL とローカル パス リポジトリの両方をサポートします。
  • Cloud エージェントの委任: モダン化エージェントは、クラウドでの並列処理のためにGitHub Copilotクラウド エージェントにタスクを送信します。 マルチリポジトリ シナリオでは、このモードの方が高速です。

Important

クラウド エージェントの委任では、リポジトリに GitHub (github.com) リポジトリ URL が必要です。 ローカル パス リポジトリとGitHub以外のプロバイダー (GitLab、Azure DevOps) は、クラウド委任ではサポートされていません。 これらのリポジトリに対してローカル実行を使用します。

ヒント

クラウド エージェントの委任を使用すると、すべてのリポジトリで並列実行を有効にすることができます。 このアプローチにより、大規模なポートフォリオの総評価時間が大幅に短縮されます。

対話型モード (ローカルで評価)

  1. モダン化エージェントを実行します。

    modernize
    
  2. メイン メニューから [評価 ] を選択します。

    ターミナルの [評価] オプションが表示されたメイン メニューを示すモダン化 CLI のスクリーンショット。

  3. ターゲット リポジトリを指定する方法を選択します。 repos.json使用するには、[構成ファイルから] を選択します。

    ターミナルでのソースの種類の選択を示すモダン化 CLI のスクリーンショット。

    ヒント

    [ 手動入力 ] を選択してローカル パスまたはリモート Git URL を直接入力することも、 現在のフォルダー を選択して現在のディレクトリ内のプロジェクトを評価することもできます。

  4. repos.json ファイルが既定の場所で検出されると、エージェントによって自動的に入力されます。 それ以外の場合は、構成ファイルへのパスを入力し、Enter キーを押 します

  5. 既定では、すべてのリポジトリが選択されています。 スキップするリポジトリの選択を解除し、 Enter キーを押して選択を確定します。

    • 方向キーを使用して 移動し、 Space キーを押して個々のリポジトリを切り替えます。

    ターミナルのリポジトリの一覧を示すモダン化 CLI のスクリーンショット。

  6. 分析する評価ドメインを選択します。 Upgrade および Cloud Readiness リポジトリ内のJavaおよび.NETプロジェクトで実行されます。 Security は既定でオフになり、Java プロジェクトでのみ実行されます。CVE の脆弱性と ISO 5055 ガイド付き CWE の問題をスキャンするために選択します。

    ターミナルでの評価ドメインの選択を示すモダン化 CLI のスクリーンショット。

  7. 評価オプションを確認して構成します。 構成ページには、言語とドメインごとにグループ化されたオプションが表示されます。

    • 一般/分析対象範囲:
      • 課題のみ (既定): ソース コードの最新化とセキュリティ上の問題を検出します。 最速のオプション。
      • 完全な分析: 問題を検出し、さらにアプリケーションの 6 つの側面 (アーキテクチャAPI コントラクト構成ビジネス ワークフロー依存関係データ モデル) にわたってコードベースの分析情報を生成します。 問題のみの分析よりも実行に時間がかかります。
    • Java/UPGRADE: ターゲット ランタイム (OpenJDK 11、17、21、または 25)。
    • Java/CLOUD READINESS: ターゲット コンピューティング サービス、ターゲット オペレーティング システム、コンテナー化。
    • Java/SECURITY: CVE の最小重大度 (lowmediumhighcritical; 既定の high)。 重大度の値が低いほど、より多くの結果が含まれます。 (セキュリティ ドメインは現在Java専用です。
    • .NET/UPGRADE: ターゲット フレームワーク (.NET 8、9、または 10)。
    • .NET/CLOUD READINESS: ターゲット コンピューティング サービス。

    方向キーを使用して移動し、 Enter キーを押して値を変更するか、[ 続行 ] を選択して現在の設定に進みます。

    ターミナルの評価構成ページを示すモダン化 CLI のスクリーンショット。

    ヒント

    推奨される既定値は、ほとんどのシナリオで機能します。 これらの設定を変更する必要があるのは、特定の JDK バージョン、特定のAzure コンピューティング サービス、または別の CVE 重大度しきい値を対象とする特定の要件がある場合のみです。

  8. 実行モードを選択します。 [ローカルで評価] を選択します。

    ターミナルの [評価モード] メニューを示すモダン化 CLI のスクリーンショット。

  9. 評価結果の出力パスを入力するか、 Enter キーを押して既定値をそのまま使用します。

  10. エージェントは自動的に次の手順を実行します。

    • リモート リポジトリを複製します (ローカル パス リポジトリが直接使用されます)。

    • 各リポジトリで評価を 1 つずつ実行します。

    • 個々の評価レポートを生成します。

      ターミナルでの個々の評価レポート生成の出力を示すモダン化 CLI のスクリーンショット。

    • 集計レポートを作成します。

      ターミナルで集計されたレポート生成の出力を示す Modernize CLI のスクリーンショット。

  11. 評価が完了すると、エージェントは集計されたレポートを自動的に開きます。

    集計されたレポートの内容を示すモダン化 CLI のスクリーンショット。

対話型モード (クラウド エージェントへの委任)

まず、各アプリケーション リポジトリでクラウド エージェントを構成します。 クラウド エージェントを構成するには、サンプル リポジトリをフォークします。

.NET アプリケーションの構成

.NET Framework アプリケーションのWindowsで実行するように構成する

既定では、Copilot クラウド エージェントは Ubuntu Linux 環境で実行されます。 .NET Framework アプリケーションの場合は、Windows環境が必要です。 これを有効にするには、次の例に示すように、アプリケーション リポジトリの .github/workflows/copilot-setup-steps.yaml ブランチでmainを構成します。

# Windows-based Copilot Setup Steps for .NET tasks
# Note: Windows runners have firewall limitations that may affect some network operations
# Use this workflow for .NET projects that require Windows-specific tooling

name: "Copilot Setup Step (Windows)"

on:
  workflow_dispatch:

jobs:
  copilot-setup-steps:
    runs-on: windows-latest
    permissions:
      contents: read
    steps:
      - name: Checkout code
        uses: actions/checkout@v5

詳細情報: Copilotセットアップ手順を使用してCopilotの開発環境をカスタマイズする

ファイアウォールの無効化

次の図に示すように、リポジトリの設定で Copilot クラウド エージェントの統合ファイアウォールを無効にします。

ファイアウォール設定がOffに設定されているリポジトリ設定を示すGitHubのスクリーンショット

MCP サーバー

次の例に示すように、リポジトリ設定の Cloud エージェント セクションでGitHub Copilotモダン化 MCP サーバーを構成します。

{
  "mcpServers": {
   "AppModDotNetUpgrade": {
        "type": "local",
        "command": "dotnet",
        "args": [
          "dnx",
          "Microsoft.GitHubCopilot.Modernization.Mcp",
          "--prerelease",
          "--yes",
          "--source",
          "https://api.nuget.org/v3/index.json"
        ],
        "env": {
          "APPMOD_CALLER_TYPE": "modernize-cli"
        },
        "tools": ["*"]
    }
  }
}

Java アプリケーションの構成

次の例に示すように、リポジトリ設定の Cloud エージェント セクションでGitHub Copilotモダン化 MCP サーバーを構成します。

{
  "mcpServers": {
    "app-modernization": {
      "type": "local",
      "command": "npx",
      "tools": [
        "*"
      ],
      "args": [
        "-y",
        "@microsoft/github-copilot-app-modernization-mcp-server"
      ]
    }
  }
}

MCP 構成セクションが強調表示されたリポジトリ クラウド エージェントの設定を示すGitHubのスクリーンショット。

手順

クラウド委任の対話型フローは、ソース、リポジトリ、ドメイン、および構成の手順を通じて ローカルで評価 する場合と同じです。 唯一の違いは、実行モードの選択とその後の動作です。

  1. モダン化エージェントを実行します。

    modernize
    
  2. メイン メニューから [ 評価 ] を選択し、ソース (構成ファイル、手動入力、または現在のフォルダー) を選択し、リポジトリを選択し、 評価ドメインを選択して、 構成を確認します。 これらの手順は 、対話型モード (ローカル評価) で説明されているとおりに機能します。

  3. 実行モードを選択します。 [ クラウド エージェントへの委任] を選択します。

    [クラウド エージェントに委任] オプションが選択されている [評価] メニューを示すモダン化 CLI のスクリーンショット。

  4. 評価結果の出力パスを入力するか、 Enter キーを押して既定値をそのまま使用します。

  5. エージェントは、各リポジトリの評価タスクをクラウド エージェントに自動的に委任し、それらをクラウドで並列で実行します。

    ターミナルでクラウド エージェントに評価を委任する進行状況の出力を示すモダン化 CLI のスクリーンショット。

    エージェントは、アプリごとの評価結果をローカルにプルし、集計されたレポートをローカルに生成します。

    ターミナルの評価レポートの集計を示す最新化 CLI のスクリーンショット。

  6. 評価が完了すると、エージェントは集計されたレポートを自動的に開きます。

非対話型モード (CLI)

コマンド引数を直接指定して非対話型モードを使用することもできます。 modernize assess コマンドを使用します。

リポジトリ構成ファイルを使用してローカルで評価する:

modernize assess --source .github/modernize/repos.json

ソースを直接指定して、複数のリポジトリを評価します。

modernize assess --source https://github.com/org/repo1 --source https://github.com/org/repo2

クラウド エージェントに委任して評価します。

modernize assess --source .github/modernize/repos.json --delegate cloud --wait

詳細については、「 評価 - CLI コマンド」を参照してください。

Azure Migrate の統合

Azure Migrate プロジェクトからバッチ評価を直接実行し、結果のレポートを自動的にAzure Migrateに戻すことができます。

エンドツーエンド フロー:

  1. Azure Migrateからスターター repos.json をダウンロードします。 Azure Migrateでは、モダン化評価用に選択したアプリケーションを対象とした JSON ファイルが生成されます。 ファイルには既に apps[] エントリと、Azure Migrate プロジェクトを指す output ブロックが含まれています。

  2. リポジトリの URL を入力します。 ダウンロードしたファイルの各 repos[] エントリを編集して、アプリケーションの GitHub リポジトリ URL を追加します。 apps[] および output ブロックは、Azure Migrate で生成されたまま保持してください。これらのブロックがアップロードを制御します。

  3. バッチ評価を実行します。 評価をローカルで実行するか、前の手順に従ってクラウド エージェントに委任します。 どちらの実行モードでも、Azure Migrate出力構成が優先されます。

  4. レポートは自動的にアップロードされます。 評価が完了すると、最新化エージェントは各アプリケーションのレポートを Azure Migrate プロジェクトにアップロードし直します。 追加の CLI フラグは必要ありません。output.type ファイルのrepos.json設定によってアップロードが実行されます。

集計されたレポートについて

集計レポートは、評価されたアプリケーション全体を次のように包括的に表示します。

ダッシュボード

  • ポートフォリオの正常性のスナップショット: アプリの合計数、アップグレードが必要な数、ブロッカーと問題の数を集計します。
  • テクノロジの配布: 使用されているフレームワークと、それらを共有するアプリの数。
  • 作業配分: 全体的な移行が小規模か大規模か。

レコメンデーション

  • Azure Services: 現在の依存関係を推奨される Azure の同等サービスに対応付けます。 アプリ間の共有依存関係は 1 回決まります。そのため、アプリごとのやり直しを回避できます。
  • Target Platform: Azure Container Apps と AKS のような選択肢の間でホスティング先の選択を導き、統合の機会を明らかにします。
  • アップグレード パス: 前提条件としてフレームワークのアップグレードが必要なアプリを識別し、アップグレード作業と移行作業を分離します。
  • コストの見積もり: 各アプリケーションを推奨されるターゲットで実行するAzureコストを見積もるので、優先順位付けに費やすことができます。
  • 移行戦略: アプリケーションごとに移行アプローチを推奨します 。たとえば、リフトアンドリシェイプ移動用の Replatform や、より深いリファクタリングのための 再設計 などです。そのため、各アプリはその準備状況に一致する戦略を取得します。
  • 移行ウェーブ: 準備とリスクによってアプリを段階的にシーケンスします (たとえば、Wave 1 のクイック 勝利、Wave 2 コア クラウド、Wave 3 長期ベットなど)。 この方法では、より困難なアプリが並列に準備されている間に早期の勝利が可能になります。

アプリケーション評価マトリックス

  • フレームワーク、ターゲット プラットフォーム、アップグレードの推奨事項、問題の内訳 (必須、潜在的、オプション)、作業のサイズ設定などの各アプリケーションの概要。
  • 必要に応じてドリルダウンするための個々のアプリ レポートへのリンク。

バッチ評価のトラブルシューティング

一般的な問題

リポジトリ アクセス エラー:

  • gh auth status を使用してGitHubの認証を確認します。
  • repos.jsonに記載されているすべてのリポジトリにアクセスできることを確認します。

複製の失敗:

  • repos.json内のリポジトリ URL が正しくアクセス可能であることを確認します。
  • すべてのリポジトリに対して適切なアクセス許可があることを確認します。
  • ネットワーク接続と VPN の設定を確認します。

評価エラー:

  • リポジトリに有効なJava、.NET、または JavaScript/TypeScript プロジェクトが含まれているかどうかを確認します。
  • ビルド ファイル ( pom.xmlbuild.gradle*.csproj*.sln*.slnxpackage.jsonなど) が存在することを確認します。
  • コンソール出力のエラー メッセージを確認します。 致命的ではない警告 (サブモジュールにビルド ファイルが見つからないなど) が CLI 出力に直接表示されるようになりました。レポートを最終版として扱う前に確認してください。

クラウド エージェントの委任に関する問題:

  • クラウド エージェントの委任では、 https://github.com/... リポジトリの URL のみを受け入れます。 ローカル パスとGitHub以外のプロバイダー (GitLab、Azure DevOps) は、説明的なエラーで事前に拒否されます。 これらのリポジトリに対してローカル実行を使用します。
  • GitHub Actionsワークフローを作成するための適切なアクセス許可があることを確認します。
  • 組織GitHub Actionsアクセス許可とクォータ制限を確認します。
  • .NET Framework アプリの場合は、ランナー構成Windows正しく設定されていることを確認します。
  • MCP サーバーの構成を確認します。

次のステップ

バッチ評価を完了すると、次のことができます。

モダン化ワークフローを続行します。

参考資料:

フィードバックの提供

入力は重要です。 バッチ評価またはモダン化エージェントに関するフィードバックがある場合は、 github-copilot-appmod リポジトリGitHub Copilotモダン化フィードバック フォームを使用します。