この記事では、Javaおよび.NETアプリケーションをAzureに移行するために、GitHub Copilotモダン化によって生成されるモダン化計画をカスタマイズする方法について説明します。
最新化セッションを開始するには、複数選択の問題を使用して評価レポートに計画を作成するか、
エージェントが plan.md を生成すると、Visual Studio Code エディターで自動的に開きます。 この段階では、計画を確認してカスタマイズし、特定のモダン化の目標に合わせて調整できます。
Important
プランは、plan.md を直接手動で編集するのではなく、Copilot に指示してプランを再生成または更新することでカスタマイズします。
plan.md を直接編集しても、実行を制御する対応先の tasks.json ファイルは更新されず、2 つのファイルの同期がずれる可能性があります。以下の各セクションで推奨されるパターンは、「Copilot に変更内容を伝え、その後再生成させる」という方法です。
ファイル構造 plan.md 例
エージェントは、次のセクションで plan.md ファイルを生成します。 Javaプロジェクトと.NET プロジェクトにも同じ構造が使用されます。
| セクション | Purpose | プロンプトでカスタマイズ可能 |
|---|---|---|
| プロジェクト ヘッダー | プロジェクト名と最新化のタイトル。 | はい - ウェーブまたはスコープを反映するようにタイトルを調整します。 |
| 技術フレームワーク | 現在の言語、フレームワーク、ビルド ツール、データベース、およびキーの依存関係がソース コードから検出されました。 | 間接的に - Copilot に指示して、誤って認識された情報を修正します。 |
| Overview | モダン化の目標の説明: 何が変化しているのか、なぜ、段階的なアプローチなのか。 ビジネス向け、技術的な詳細はありません。 | はい - ビジネスの意図を明確にし、箇条書きを追加または削除します。 |
| 移行の影響の概要 | 新しいAzure サービス、認証方法、およびコメント→、各アプリケーションを元のサービス×マッピングするテーブル。 | はい - ターゲット サービスの変更、認証の変更、行の追加または削除。 |
| 未解決の質問 & アンケート | プランの作成時に発生した明確な質問とユーザーの回答。 タスクの選択を制御します。 | はい - 未解決の質問に回答し、前の回答を修正します。 |
詳細なタスク 一覧は plan.mdに含まれません。 これは .metadata/tasks.json に存在し、「 Open Questions >Questionnaire 」セクションの回答とエージェントの分析から生成されます。 タスクを変更するには、プランを再生成するようにCopilotを求めます (カスタマイズ方法を参照)。
カスタマイズできる内容
モダン化計画では、4 つのカスタマイズ サーフェイスが公開されています。 それぞれ plan.md の各セクションに対応しており、直接編集するのではなく、Copilot へのプロンプトを通じてアクセスします。
1. 最新化の範囲
スコープによって、エージェントによって生成されるタスクの種類が決まります。 このプランでは、次の 4 種類のスコープがサポートされています。
- Upgrade — ランタイムとフレームワークのバージョンのアップグレード (JDK 11 → 17、Spring Boot 2.x → 3.x、.NET Framework → .NET 8 など)。
- Azure へのアクセス - オンプレミスまたは非Azure サービスを同等のAzureに置き換えます (たとえば、Oracle → Azure Database for PostgreSQL、ActiveMQ → Azure Service Bus、ハードコーディングされたシークレット→Azure Key Vault)。
- コンテナー化 — Dockerfile と関連するビルド成果物を生成します。
- Deployment — デプロイ ファイルを生成し、Azureにデプロイします。 デプロイ タスクには、コンテナー化が暗黙的に含まれます。
スコープをカスタマイズするには、この実行に適用するスコープの種類を Copilot に指定してください。 例えば次が挙げられます。
For this modernization plan, only include Upgrade and Migration to Azure tasks. Do not generate containerization or deployment tasks — those are handled by a separate pipeline.
2. Azureサービスと認証をターゲットとする
Migration Impact Summary テーブルには、移行された各コンポーネントのターゲット Azure サービスと認証方法が記録されます。 初期計画が生成される前または後にCopilotを求めることで、これらの値をカスタマイズします。 例えば次が挙げられます。
Update the Migration Impact Summary:
- Use Azure Container Apps as the deployment target, not Azure Kubernetes Service.
- Use Managed Identity for the PostgreSQL connection. Do not use Key Vault for the DB password.
- Migrate file-based logging to Azure Monitor (Application Insights), not to console-only.
エージェントは plan.md と tasks.json の両方を再生成し、タスク リストがテーブルと一致するようにします。
3. アンケート回答
エージェントは、 ask_user 機能を使用できる場合、プランのスコープを設定するための短いアンケートを求めます。 3 つの既定の質問は次のとおりです。
| Question | [Default answer](既定の回答) | プランへの影響 |
|---|---|---|
| Azureでのデプロイ ターゲット | デプロイなし | デプロイ タスクを追加 (または省略) し、対象のコンピューティング サービス (Azure Container Apps、Azure Kubernetes Service、Azure App Service、App Service Managed Instance、Azure Function Apps、Azure Static Web Apps) を選択します。 |
| 統合テストを含める | いいえ | [Yes, Local Integration with Containers]\(はい、コンテナーとのローカル統合\) または [Yes, Local Integration and Smoke Tests]\(はい、ローカル統合とスモーク テスト\) に設定すると、移行タスクの後とコンテナー化の前に統合テスト タスクが追加されます。 |
| コンテナー化を含める (Dockerfile の生成)? | いいえ | スタンドアロンのコンテナー化タスクを追加します。 デプロイ タスクが選択されている場合、デプロイはコンテナー化を対象とするため、自動的にスキップされます。 |
エージェントが質問をしなかった場合 (たとえば、ask_user が使用できなかったため)、または以前の回答を変更する場合は、Copilotプロンプトを表示します。 例えば次が挙げられます。
Update the plan with these answers:
- Deployment target: Azure Container Apps
- Integration testing: Yes, Local Integration and Smoke Tests
- Containerization: handled by deployment task, no standalone containerization needed
回答は、[ 質問を開く] > [アンケート ] セクションにチェック項目として記録され、タスクの選択を推進します。
4. 特定のタスクを追加、削除、または絞り込む
生成されなかったタスクの追加、不要なタスクの削除、または既存のタスクのスコープの調整をCopilotに依頼できます。 intent を使ってプロンプトを作成し、Copilot にナレッジ ベースから対応するスキルとパターンを選ばせましょう。
例:
Add a task to migrate from ActiveMQ to Azure Service Bus.
Drop the integration test task — we have an existing test suite that covers this.
The Spring Boot upgrade task should target Spring Boot 3.2 specifically, not "latest".
Note
エージェントは、一致するスキルまたはパターンを持つ移行のタスクのみを作成します。 移行を要求した場合、エージェントはサポートできません (内部専用サービスなど)、スコープ セクションに警告が追加され、タスクは追加されません。 その場合は、移行を手動の手順として扱い、ガイドラインの指示 (次のセクションを参照) を追加して文書化します。
カスタマイズ方法: Copilot に再生成を指示する
次のワークフローを使用します。
- エージェントが生成した後、最初の
plan.mdを確認します。 - 変更する内容 (スコープ、ターゲット サービス、認証、アンケート回答、特定のタスク) を特定します。
- Copilot に変更内容を入力します。 具体的には、セクションと目的の結果に名前を付けます。
- Copilot に
plan.mdと.metadata/tasks.jsonをまとめて再生成させます。 実行が機能するためには、両方のファイルが揃っている必要があります。 - 更新されたプランを再確認します。 スコープ、ターゲット アーキテクチャ、タスク リストが意図と一致するまで反復処理します。
エンド ツー エンド プロンプトの例:
Update the modernization plan with these changes:
1. Add Migration to Azure scope for messaging — migrate ActiveMQ to Azure Service Bus.
2. Use Managed Identity for all Azure service connections; do not introduce Key Vault.
3. Deployment target is Azure Container Apps.
4. Include Layer 1 and Layer 2 integration tests.
5. The Spring Boot upgrade task should explicitly include the JDK 17 and Jakarta EE migration in its description, as a single task (do not split).
Copilotプランを再生成し、テーブルを更新し、アンケートの回答を記録し、それに応じてタスク リストを修正します。
実行のガイドラインを提供する
スコープとタスクに加えて、モダナイゼーションの実行方法を規定する手法、規約、ツール、ルールといったガイドラインも Copilot に提供します。 ガイドラインは、多くの場合、プランの Guidelines セクションとして、またはローカル ルール ファイルへの参照として追加します。
Copilot がコードをどのように変更するかを導くのに役立つ指示を、次のように含めます:
- 特定の移行方法に関する制約または禁止 (たとえば、 Spring Cloud Azure スターターを導入しないでください。ネイティブ SDK を使用)。
- コード スタイルまたは規則の要件。
- エージェントがアクセスできる内部ファイル、ドキュメント、またはスクリプトへのリンク。
- エラーの修正や移行の実行に役立つドメイン知識。
- エージェントがコードの変更に注釈を付ける方法またはコメントする方法に関する要件。
- 実行中に作成された一時的な成果物のクリーンアップ手順。
Example:
Add these guidelines to the plan:
- Use Azure Managed Identity for every Azure service connection. Do not introduce connection strings or Key Vault secrets unless a service has no Managed Identity support.
- Follow the code conventions defined in `/docs/internal/code-style.md`.
- Provide detailed comments explaining why each code change is necessary.
- After execution, remove any temporary scripts or scratch files created during migration.