この記事では、GitHub Copilot アプリの最新化を使用して、Java アプリケーションを評価、修復、コンテナー化、および Azure Container Apps にデプロイする方法について説明します。 GitHub Copilot アプリの最新化は、複雑なアップグレードと移行の手順を自動化するために、GitHub Copilot と OpenRewrite などのオープンソース ツールを組み合わせた AI を利用したアシスタントです。
このツールは Maven プロジェクトと Gradle プロジェクトの両方をサポートし、Java バージョン 8、11、17、および 21 の間のアップグレードを対象とし、Spring Boot アプリケーションの最新化に重点を置いています。 一般的な移行シナリオに対して定義済みのタスクが提供され、Azure Container Apps でアプリケーションを実行するためのベスト プラクティスが組み込まれています。
前提条件
- アクティブなサブスクリプションを持つ Azure アカウント。 無料で作成できます。
- 任意のプランでアクティブな GitHub Copilot サブスクリプションを持つ GitHub アカウント。
- 次のいずれかのエディター:
-
Visual Studio Code の最新バージョン。 バージョン 1.106 以降である必要があります。
- Visual Studio Code の GitHub Copilot。 セットアップ手順については、「 Visual Studio Code で GitHub Copilot を設定する」を参照してください。 必ず Visual Studio Code 内で GitHub アカウントにサインインしてください。
- GitHub Copilot アプリの最新化。 インストール後に Visual Studio Code を再起動します。
- 最新バージョンの IntelliJ IDEA。 バージョン 2023.3 以降である必要があります。
- GitHub Copilot。 バージョン 1.5.59 以降である必要があります。 詳細については、「 IntelliJ IDEA で GitHub Copilot を設定する」を参照してください。 IntelliJ IDEA 内の GitHub アカウントに必ずサインインしてください。
- GitHub Copilot アプリの最新化。 インストール後に IntelliJ IDEA を再起動します。
-
Visual Studio Code の最新バージョン。 バージョン 1.106 以降である必要があります。
- Java 21 以降。
- Java プロジェクトをビルドするための Maven または Gradle 。
- Docker がインストールされ、実行されている (コンテナー化用)。
- Azure CLI がインストールされ、構成されました。
注
Gradle を使用している場合は、Gradle ラッパー バージョン 5 以降のみがサポートされます。 Kotlin ドメイン固有言語 (DSL) はサポートされていません。 IntelliJ IDEA では、 My Tasks 関数はまだサポートされていません。
JDK とフレームワークのバージョンをアップグレードする
Azure Container Apps に移行する前に、サポートされている up-to-date JDK バージョンで Java アプリケーションが実行されていることを確認してください。 JDK とフレームワークをアップグレードすると、その後の移行手順で最新のコードベースが確実にターゲットになります。
JDK バージョンをアップグレードするには、2 つの方法があります。 どちらの方法でも GitHub Copilot アプリのモダン化ウィンドウが使用されます。このウィンドウは、Visual Studio Code のサイドバーからアクセスできます。
- [クイック スタート] セクションで [ランタイムのアップグレード] と [フレームワーク] を選択します。
- または、[TASKS - Upgrade Tasks]\(タスク - アップグレード タスク\) セクションでアップグレードされた Java ランタイム タスクを実行します。
Spring フレームワークまたは Microsoft 以外の依存関係をアップグレードするには、[タスク - アップグレード タスク] セクションで Java Framework のアップグレード タスクを実行します。
Azure Container Apps のクラウド対応性を評価する
この評価では、コードベースにおけるクラウドの準備の課題を特定し、その影響を評価します。 Azure Container Apps に固有の推奨事項を提供します。
評価を構成する
評価を実行する前に、GitHub Copilot アプリの最新化評価ウィンドウで [評価の構成 ] を選択して構成します。
Azure Container Apps の場合は、次の構成を使用します。
appcat:
- target:
- azure-container-apps
os:
- linux
mode: source-only
評価を実行する
評価を実行するには、次の手順に従います。
サイドバーで、GitHub Copilot アプリの最新化ウィンドウを選択し、[評価] セクションで [Azure への移行] または [評価の実行] を選択します。
エージェント モードの GitHub Copilot チャット ウィンドウが開き、モダン化評価者が呼び出されます。 [続行] を選択して確定します。
最新化評価者は、最初にローカル環境を検証します。 AppCAT とその依存関係がインストールされていない場合、エージェントはそれらをインストールするのに役立ちます。 インストール後、エージェントは AppCAT を呼び出してプロジェクトを評価します。 この手順は、完了するまでに数分かかることがあります。
評価が完了すると、最新化評価者は、評価レポートでクラウド対応性の問題の分類されたビューを生成します。
評価レポートを解釈する
評価レポートには、包括的な分析結果が表示されます。 レポートは、いくつかの主要なセクションで構成されています。
- アプリケーション情報: Java のバージョン、フレームワーク、ビルド ツール、プロジェクト構造、ターゲット Azure サービスなどの基本情報。
- 問題の概要: 重要度の割合を持つドメイン別に分類された移行の問題の概要。
-
詳細な分析 は、次の 4 つのタブにまとめられています。
- 問題: 対処する必要があるクラウドの準備と Java アップグレードの問題の分類された一覧。
- 依存関係: アプリケーション内で見つかったすべての Java パッケージ依存関係。
- テクノロジ: 分析されたアプリケーションで見つかった機能別にグループ化されたテクノロジ。
- 分析情報: 検出されたテクノロジを理解するのに役立つファイルの詳細と情報。
このレポートでは、次の重要度レベルによって問題が分類されます。
| 重要性 | 説明 |
|---|---|
| 必須 | Azure Container Apps への移行に関して修正する必要がある問題。 |
| ポテンシャル | 移行に影響する可能性があり、レビューが必要な問題。 |
| オプション | 影響の少ない問題。 修正することをお勧めしますが、省略可能です。 |
報告された各問題を展開して、影響を受けるファイルの一覧と、問題、既知の解決策、サポート ドキュメントなどの詳細な説明を表示できます。
評価レポートの管理
この拡張機能では、評価レポートのインポート、エクスポート、および削除がサポートされているため、チームと結果を共有したり、ワークスペースを整理したりできます。
- インポート: AppCAT CLI の結果、エクスポートされたレポート、またはアプリ コンテキスト ファイルからレポートをインポートするには、評価セクションで [インポート] を選択します。
- エクスポート: 評価レポート を右クリックし、[ エクスポート ] を選択してレポートを他のユーザーと共有します。
- 削除: 評価レポート を右クリックし、[ 削除 ] を選択してレポートを削除します。
移行の問題を修復する
評価が完了したら、定義済みタスクまたはカスタム タスクを使用して、特定された問題を修復します。 GitHub Copilot アプリの最新化には、一般的な移行パターンに対応する定義済みのタスクと、組織の特定のニーズに合わせて定義したカスタム タスクの 2 つのアプローチが用意されています。
AppModernization エージェントを選択する
AppModernization エージェントは、Java アプリケーションの移行と最新化のタスクに最適なエクスペリエンスを提供します。 これを選択するには:
- アクティビティ バーのチャット アイコンを選択して、Copilot チャット ウィンドウを開きます。
- チャット ウィンドウで、チャット入力ボックスの上部にあるエージェント セレクタードロップダウン メニューを見つけて、一覧から AppModernization を選択します。
注
Visual Studio Code では、アプリの最新化では、最適な結果を得るための推奨モデルが既定で選択された AppModernization カスタム エージェントが使用されます。 モデルを変更するには、[エージェント] メニューから [カスタム エージェントの構成 ] を選択します。
AppModernization エージェントを選択したら、単純な自然言語プロンプトを使用して移行タスクを実行します。
-
データベースの移行:
migrate to Managed Identity for Azure SQL Database -
ストレージの移行:
migrate from AWS S3 to Azure Storage Blob -
メッセージングの移行:
migrate from RabbitMQ to Azure Service Bus -
シークレット管理:
migrate secrets to Azure Key Vault -
認証の移行:
migrate to Microsoft Entra ID authentication
定義済みの移行タスクを実行する
GitHub Copilot アプリのモダン化機能では、Azure Container Apps の移行に関する次の定義済みタスクがサポートされています。
| Task | 説明 |
|---|---|
| Spring RabbitMQ から Azure Service Bus まで | Spring AMQP/JMS with RabbitMQ を Azure Service Bus に変換し、メッセージング パターンを保持し、セキュリティで保護された認証を有効にします。 |
| データベース移行のマネージド ID | Azure SQL Server、Azure Database for MySQL、Azure Database for PostgreSQL、Azure Cosmos DB for Cassandra API、および MongoDB 用 Azure Cosmos DB へのマネージド ID 認証用のコードベースを準備します。 |
| 資格情報移行用マネージドアイデンティティ | Azure Event Hubs や Azure Service Bus などのメッセージング サービスに Azure マネージド ID 認証を使用するように Java アプリケーションを変換し、接続文字列を排除します。 |
| AWS S3 から Azure Storage Blob へ | AWS S3 と対話するコードを、同じセマンティクスを維持しながら Azure Storage BLOB を操作するコードに変換します。 |
| ローカル ファイルへのログ記録 | ファイル ベースのログ記録をコンソール ベースのログに変換し、 Azure Monitor との統合の準備を整えます。 |
| ローカル ファイル I/O から Azure Storage ファイル共有マウントへ | ローカル ファイルの読み取りと書き込みを統合マウント パス アクセスに変換し、Azure Container Apps で Azure Storage ファイル共有のマウントを有効にします。 詳細については、「 |
| Azure Communication Service への Java メール | SMTP 経由でメールを送信するアプリケーションを、Azure Container Apps ホスティングと完全に互換性のある Azure Communication Services を使用するように変換します。 |
| Azure Key Vault へのシークレットと証明書の管理 | ハードコードされたシークレットとローカル TLS/mTLS 証明書を Azure Key Vault に移行します。 詳細については、「Azure Container Apps でシークレットを管理する」を参照してください。 |
| Microsoft Entra ID に対するユーザー認証 | 認証のために、ローカル ユーザー認証メカニズム (LDAP ベースなど) を Microsoft Entra ID に移行します。 詳細については、「Azure Container Apps での認証および認可」を参照してください。 |
| SQL 方言: Oracle から PostgreSQL | Azure Database for PostgreSQL で使用するために、Oracle 固有の SQL クエリ、データ型、および専用関数を PostgreSQL に変換します。 |
| AWS Secret Manager から Azure Key Vault へ | シークレット管理のすべての側面を AWS Secret Manager から Azure Key Vault に変換します。 |
| ActiveMQ から Azure Service Bus への | ActiveMQ メッセージ プロデューサー、コンシューマー、接続ファクトリ、キュー/トピックの相互作用を、Azure Service Bus と同等の操作に変換します。 |
| AWS SQS から Azure Service Bus | SQS 固有のコード コンストラクトを Azure Service Bus に変換し、メッセージング セマンティクスを維持します。 |
評価から定義済みのタスクを適用する
- 評価レポートで、検出された問題の下で目的のソリューションを選択し、[ タスクの実行] を選択します。
- エージェント モードで Copilot チャット ウィンドウが開きます。 エージェントによって
plan.mdとprogress.mdが生成され、続行する前に計画を確認できます。 -
continueを手動で入力して、移行プロセスを確認して開始します。 - コードを変更する前に、エージェントはバージョン管理システムの状態を確認し、新しいブランチをチェックアウトします。
- [続行] を繰り返し選択または入力してツールの使用状況を確認し、コードの変更が完了するまで待ちます。
検証結果を確認する
コードの変更が完了すると、エージェントは、次のチェックを含む自動検証ループを実行します。
- Validate-CVEs: 現在の依存関係における一般的な脆弱性とエクスポージャーを検出し、修正します。
- Build-Project: ビルド エラーの解決を試みます。
- 整合性検証: コードの機能の整合性を分析します。
- Run-Test: 単体テストを実行し、エラーを修正する計画を自動的に生成します。
- 完全性検証: 最初のコード移行で見逃した移行項目をキャッチし、修正します。
すべてのチェックが完了したら、「 continue 」と入力して移行の概要を生成します。 コードの変更を確認し、[ 保持] を選択して確認します。
カスタム タスクを作成する
定義済みのタスクに加えて、組織の特定の移行パターンに基づいてカスタム タスクを作成できます。 カスタム タスクでは、Git コミット、外部リンク、またはテキスト ファイルからの参照を使用して、移行エージェントをガイドします。
Git コミットからカスタム タスクを作成する
[アクティビティ] サイドバーで、GitHub Copilot アプリのモダン化拡張機能ウィンドウを開き、[ TASKS ] セクションにカーソルを合わせ、[ カスタム タスクの作成] を選択します。
開いている
task.mdファイルで、タスク名とタスク プロンプトを入力します。[ 参照の追加] を選択し、ポップアップ ダイアログ ボックスで [Git コミット ] を選択します。
関連するコミットを検索して選択し、[ OK] を選択します。
保存を選びます。 これで、カスタム タスクが [タスク - マイ タスク] セクションに表示されます。
外部リンクとテキスト ファイルからカスタム タスクを作成する
task.mdファイルを開き、タスク名とプロンプトを入力します。 例えば次が挙げられます。-
タスク名:
Expose health endpoint via Spring Boot Actuator -
タスク プロンプト:
You are a Spring Boot developer assistant, follow the Spring Boot Actuator documentation to add basic health endpoints for Azure Container Apps deployment.
-
タスク名:
[ 参照の追加] を選択し、[ 外部リンク] を選択して、URL 参照を貼り付けます。 もう一度 [ 参照の追加] を選択し、[ テキスト ファイル] を選択し、追加の手順を含むファイルを追加します。
[ 保存] を 選択してタスクを作成します。
カスタム タスクを共有する
タスク フォルダーを共有することで、カスタム タスクを他のチーム メンバーと共有できます。
カスタム タスクを共有するには、 .github/appmod/custom-tasks の下にあるフォルダーをコピーし、目的の受信者と共有します。 受信者は、タスク フォルダーを .github/appmod/custom-tasks ディレクトリに貼り付け、拡張機能ウィンドウで [タスクの更新 ] を選択します。
カスタム タスクを実行する
タスク ファイルの下部にある [ 実行 ] を選択するか、[ タスク - マイ タスク ] セクションでタスクを見つけて、[ タスクの実行] を選択します。 Copilot チャット ウィンドウがエージェント モードで開き、移行ワークフローが自動的に実行されます。
アプリケーションで Oracle データベースを使用している場合は、次のセクションに進みます。 それ以外の場合は、 アプリケーションのコンテナー化に進みます。
Oracle から PostgreSQL への移行
注
このセクションは、アプリケーションで Oracle データベースを使用する場合にのみ適用されます。 アプリケーションで Oracle を使用していない場合は、「アプリケーションの コンテナー化」に進みます。
GitHub Copilot アプリの最新化では、Oracle から Azure Database for PostgreSQL シナリオへの専用の移行タスクが提供されます。これには次のものが含まれます。
- AI を利用したデータベース移行ツール: 詳細については、「 Visual Studio Code プレビュー用 PostgreSQL 拡張機能とは」を参照してください。
- アプリ コードでのスマート SQL 変換: 統合されたタスク ワークフローの一部としてシームレスに統合された GitHub Copilot アプリの最新化の組み込み SQL 変換機能。
Oracle から PostgreSQL への移行タスクを使用する
「Azure Container Apps のクラウドの準備状況を評価する」の説明に従って、アプリケーションの評価を実行します。
評価が完了したら、レポートを確認します。 アプリケーションで Oracle を使用している場合、レポートには、Oracle DB から PostgreSQL への移行という既定のソリューションを含む Oracle 関連の問題 Database Migration (Oracle) が表示されます。
必要に応じて、
coding_notes.mdフォルダーに.github/postgre-migrations/*/results/application_guidance/が存在するかどうかを確認します。 存在する場合、アプリの最新化では、より高品質な SQL 変換のためにこれらのメモが参照されます。 そうでない場合は、 PostgreSQL Visual Studio Code 拡張機能を使用してデータベース チームに連絡して生成してください。[ タスクの実行] を選択して移行を実行します。
アプリケーションをコンテナー化する
コードの移行が完了したら、Java アプリケーションをコンテナー化して、Azure Container Apps へのデプロイ用に準備します。
Docker がインストールされ、実行されていることを確認します。
Visual Studio Code で、移行したプロジェクトを開きます。
[アクティビティ] サイドバーで、GitHub Copilot アプリの最新化拡張機能ウィンドウを開きます。
[ タスク] セクションで Java を開き、[ タスクのコンテナー化 ] を開き、[ アプリケーションのコンテナー化] を選択します。
プロンプトが表示されたら[ 続行] を選択して、各ツールアクションを確認します。
Copilot では、次の手順を実行します。
- Docker がインストールされ、実行されていることを確認します。
- アプリケーション コードをコンテナーで実行する準備ができていることを確認します。
- プロジェクトごとに Dockerfile を作成します。
- 各プロジェクトの Docker イメージをビルドします。
- コンテナー化の結果の概要を作成します。
注
最適な結果を得るには、拡張機能のエージェント設定に示されている最新の推奨モデルを使用します。 コンテナー化エラーを修正するには、Copilot に数回の反復が必要な場合があります。
コンテナー化ツールの詳細については、GitHub の containerization-assist リポジトリを参照してください。
Azure Container Appsにデプロイする
アプリケーションをコンテナー化したら、それを Azure Container Apps にデプロイします。
Visual Studio Code で、移行したプロジェクトを開きます。
[アクティビティ] サイドバーで、GitHub Copilot アプリの最新化拡張機能ウィンドウを開きます。
[ タスク] セクションで Java を開き、[ デプロイ タスク] を開き、次のいずれかのデプロイ オプションを選択します。
- 既存の Azure インフラストラクチャへのデプロイ: Copilot は、既存のリソース グループを要求し、対応するリソースにデプロイします。
- インフラストラクチャをプロビジョニングして Azure にデプロイする: Copilot は新しい Azure リソースを作成し、プロジェクトをデプロイします。
プロンプトが表示されたら [続行 ] を選択して各ツール アクションを確認し、サブスクリプションやリソース グループなどの必要な情報を指定します。
Copilot では、次の手順を実行します。
- デプロイの目標、プロジェクト情報、Azure リソース アーキテクチャ、Azure リソース、実行手順を含むデプロイ計画マークダウン ファイルを生成します。
- プランの実行手順に従います。
- デプロイ エラーを修正します。
- デプロイの結果を説明する概要ファイルを生成します。
注
最適な結果を得るには、拡張機能のエージェント設定に示されている最新の推奨モデルを使用します。 デプロイ エラーを修正するには、Copilot のいくつかのイテレーションが必要な場合があります。
移行後のベスト プラクティス
Java アプリケーションを Azure Container Apps に移行した後は、次のベスト プラクティスを検討してください。
- 正常性プローブの構成: Azure Container Apps がアプリケーションの正常性を監視できるように正常性 プローブ を設定します。
- ログ記録の設定: ログの集約と分析を一元化するために、コンソール ベースのログ記録を Azure Monitor と統合するように構成します。
- スケーリング ルールの構成: さまざまなワークロードを処理するために、HTTP トラフィック、CPU、メモリ、またはカスタム メトリックに基づいて スケーリング ルール を設定します。
- シークレットの管理: Azure Container Apps シークレット管理 または Azure Key Vault を使用して、機密性の高い構成値を安全に格納してアクセスします。
- CI/CD パイプラインを設定する: 継続的インテグレーションと配信のために 、GitHub Actions または Azure Pipelines を使用してデプロイ パイプラインを自動化します。
- 青緑色のデプロイを有効にする: リビジョン とトラフィックの分割を使用して、ダウンタイムなしのデプロイを実装します。
- カスタム ドメインの構成: 運用トラフィック 用にカスタム ドメインと証明書 を設定します。
- メトリックとアラートを使用して監視する: メトリック と アラートを 使用して、アプリケーションの正常性とパフォーマンスを事前に監視します。
- ゾーンの冗長性を有効にする: 可用性ゾーン間の高可用性のためにゾーン の冗長性 を構成します。