カスタム パーサーを作成して移行エージェントAzure Logic Apps他のプラットフォームに拡張する (プレビュー)

適用対象: Azure Logic Apps (Standard)

組織で、Visual Studio Codeの Azure Logic Apps Migration Agent 拡張機能で現在サポートされていない統合プラットフォーム (TIBCO BusinessWorks、IBM IIB/ACE、Dell Boomi、Workato など) を使用している場合は、そのプラットフォームのカスタム パーサーを作成して追加することで、エージェントを拡張できます。 この拡張機能では、組み込みパーサーと外部パーサーの両方をサポートするレジストリ ベースのパーサー アーキテクチャが使用されるため、コア移行パイプラインを変更せずにプラットフォームのサポートを追加できます。

この記事では、ソース統合プラットフォームの成果物を移行エージェントの一般的な中間表現 (IR) 形式に変換するカスタム パーサーを作成して追加する方法について説明します。 この JSON ドキュメントでは、プラットフォームに依存しない方法で成果物について説明し、エージェントが 5 つの移行ステージすべてを通じて成果物を処理できるようにします。

前提条件

開始する前に、次のリソースがあることを確認します。

Requirement 説明
Node.js 18 以降 無料のオープンソースのクロスプラットフォーム JavaScript ランタイム環境
Visual Studio Code 1.85.0 以降 ローカル開発エクスペリエンス
Visual Studio Code Extension API Visual Studio Codeの拡張機能を構築できる API
Azure Logic Apps 移行エージェント拡張機能 Visual Studio Codeの移行エージェントで必要な拡張機能
Azure Logic Apps (Standard) 拡張機能 Azure Logic Apps Migration Agent 拡張機能に必要な依存関係
TypeScript に関する知識 JavaScript 上に構築される厳密に型指定されたプログラミング言語
ソース統合プロジェクト サポートが必要なプラットフォームのソース統合プロジェクトと成果物ファイル

パーサー アーキテクチャ

移行エージェントにプラットフォーム サポートを追加するには、次の方法を使用します。

Approach 推奨 説明
組み込みパーサー: extension のGitHub リポジトリに貢献します Yes パーサーとスキルをプロジェクトに直接追加します。 5 つの移行ステージすべてとの完全な統合。 組み込みのパーサーには拡張機能が付属しており、同じ CI/CD パイプラインを使用し、すべての内部 API にアクセスできるため、この方法をお勧めします。
外部パーサー拡張機能 いいえ プラグイン API を使用してパーサーを登録する個別のVisual Studio Code拡張機能を作成します。 探索ステージのみを対象とします。

すべてのパーサーは、ソース プラットフォーム成果物を JSON ドキュメントとして共通の IR 形式に変換します。 移行エージェントは、計画、変換、検証の各段階で IR 形式を使用します。 パーサー レジストリは、組み込みパーサー プラグインと外部パーサー プラグインの両方をサポートします。

組み込みのパーサー 外部パーサー プラグイン
BizTalk (.btproj.odx)
BizTalk (.btm.xsd)
BizTalk (.btp)
MuleSoft (スタブ)
パートナープラットフォームパーサー
コミュニティ パーサー

組み込みパーサー プラグインと外部パーサー プラグインが、移行ステージで使用される一般的な IR ドキュメント形式にどのように取り込まれるかを示す図。

手順 1: 組み込みのパーサーを追加する

  1. src/parsers/<your-platform>/で、新しいパーサー モジュールを作成します。

    src/parsers/
    ├── biztalk/              # Reference implementation
    │   ├── index.ts
    │   ├── types.ts
    │   ├── BizTalkProjectParser.ts
    │   ├── BizTalkOrchestrationParser.ts
    │   └── ...
    ├── <your-platform>/      # Your new parser
    │   ├── index.ts
    │   ├── types.ts
    │   └── <your-platform-parser-name>.ts
    
  2. 各パーサーが IParser インターフェイスを実装していることを確認します。

    import { IParser, ParserCapabilities, ParseResult, ParseOptions } from '../types';
    import { IRDocument, createEmptyIRDocument } from '../../ir/types';
    
    export class YourPlatformParser implements IParser {
        get capabilities(): ParserCapabilities {
            return {
                platform: '<your-platform>',
                fileExtensions: ['.<your-extension>'],
                fileTypes: ['flow'],
                supportsFolder: false,
                description: 'Parses <your-platform> integration flows.',
            };
        }
    
        canParse(filePath: string): boolean {
            return filePath.endsWith('.<your-extension>');
        }
    
        async parse(
            filePath: string,
            options?: ParseOptions
        ): Promise<ParseResult> {
            const ir = createEmptyIRDocument();
            // Parse the source file and populate the IR document.
            // For the complete schema, see docs/IRSchema.md.
            return { ir, stats: { /* parsing statistics */ } };
        }
    }
    
  3. パーサーを src/parsers/index.tsに登録します。

    import { <your-platform-parser-name> } from './<your-platform>';
    
    export function initializeParsers(): void {
        // ... existing parsers ...
        defaultParserRegistry.register(new <your-platform-parser-name>());
    }
    

    ヒント

    完全に動作するリファレンスとして、 src/parsers/biztalk/で BizTalk パーサーの実装を使用します。

手順 2: プラットフォーム固有のスキルを追加する

Markdown ファイルとして、スキルは移行ステージごとに AI 命令を提供します。 GitHub Copilot エージェントに対して、特定のプラットフォーム用に成果物をどのように分析、計画、そして変換するかを指示します。

これらのスキルを見つけるには、プラットフォーム固有のバリアントを使用した resources/skills/ を調べる必要があります。

resources/skills/
├── detect-logical-groups/
│   ├── biztalk/SKILL.md
│   ├── mulesoft/SKILL.md
│   └── <your-platform>/SKILL.md
├── source-to-logic-apps-mapping/
│   ├── biztalk/SKILL.md
│   ├── mulesoft/SKILL.md
│   └── <your-platform>/SKILL.md
└── ... (13 skills total)

SKILL.md ファイルでは、YAML frontmatter とそれに続く Markdown コンテンツが使用されます。次に例を示します。

---
name: source-to-logic-apps-mapping
description: >-
   Component mapping for \<*your-platform*\> components to their equivalents in Azure Logic Apps (Standard).
---

手順 3: プラットフォームを Azure Logic Apps (Standard) コンポーネントにマップする

  1. 次の表を確認して、アダプター マッピングを作成します。

    < your-platform> コンポーネント Azure Logic Apps に相当するもの ネイティブ。 注記
    HTTP リスナー HTTP トリガー Yes Built-in
    データベース コネクタ SQL Server コネクタ Yes Built-in
  2. 次の表の各スキルに対して、必要な <your-platform>/SKILL.md スキルバリアントを作成します。

    ヒント

    サポートされているプラットフォーム ( biztalk/SKILL.md など) のスキルを出発点としてコピーし、プラットフォームに合わせてコンテンツを調整します。

    GitHub Copilot エージェント Skill Purpose
    @migration-analyser detect-logical-groups 成果物を論理フロー グループにグループ化するためのルール
    @migration-analyser analyse-source-design ソース アーキテクチャの分析と視覚化の生成に関する規則
    @migration-analyser dependency-and-decompilation-analysis 不足している依存関係を識別するための規則
    すべてのエージェント source-to-logic-apps-mapping ソースからAzure Logic Appsへのコンポーネントごとのマッピング
    @migration-planner logic-apps-planning-rules 移行計画を生成するための規則
    @migration-converter conversion-task-plan-rules 変換タスクを作成するためのルール
    @migration-converter scaffold-logic-apps-project 標準ロジック アプリ プロジェクト構造をスキャフォールディングするための規則
    @migration-converter workflow-json-generation-rules workflow.json ファイルを生成するための規則
    @migration-converter connections-json-generation-rules connections.json ファイルを生成するための規則
    @migration-converter dotnet-local-functions-logic-apps .NETローカル関数を生成するための規則
    @migration-converter no-stubs-code-generation 生成されたコードが完了していることを確認するための規則
    @migration-converter runtime-validation-and-testing ランタイムの検証とテストの規則
    @migration-converter cloud-deployment-and-testing クラウドのデプロイとテストの規則

手順 4: プラットフォームを登録する

  1. src/types/platforms.ts ファイルで、サポートされているプラットフォームの一覧にプラットフォームを追加します。

    export type SourcePlatform = 'biztalk' | 'mulesoft' | '<your-platform>';
    
    export const SUPPORTED_PLATFORMS: PlatformInfo[] = [
        // ... existing platforms ...
        {
            id: '<your-platform>',
            label: '<your-platform-name>',
            description: '<your-platform> version <version-number>',
            icon: '$(server)',
            filePatterns: ['.<your-extension>', '.<your-config>'],
        },
    ];
    
  2. src/stages/discovery/PlatformDetector.ts ファイルに検出ロジックを追加します。

  3. src/stages/discovery/SourceFolderService.ts ファイルに、ファイル パターンを追加します。

手順 5 (省略可能): IR の例を追加する

プラットフォームの成果物を IR スキーマにマップする方法を文書化するには、 docs/IRExamples_YourPlatform.md ファイルを追加します。 次の例が存在し、テンプレートとして機能します。

説明
docs/IRExamples_BizTalk.md BizTalk リファレンス
docs/IRExamples_MuleSoft.md MuleSoft リファレンス
docs/IRExamples_Boomi.md Dell Boomi の例
docs/IRExamples_IBMIIB.md IBM IIB/ACE の例
docs/IRExamples_TIBCO.md TIBCO BusinessWorks の例
docs/IRExamples_Workato.md Workato の例

代替手段: 外部パーサー拡張機能

外部パーサー拡張機能は、エージェントがソース ファイルを解析する移行エージェントの検出ステージのみを対象としています。 スキル、プラットフォーム検出、AI を利用した計画と変換では、extension のGitHub リポジトリに直接貢献する必要があります。

ただし、リポジトリに直接貢献しない場合は、parse プラグイン API

import * as vscode from 'vscode';

export async function activate(context: vscode.ExtensionContext) {
    const assistant = vscode.extensions.getExtension('microsoft.logicapps-migration-assistant');

    if (assistant) {
        const api = await assistant.activate();
        api.registerParser(new MyPlatformParser(), {
            priority: 10,
        });
    }
}

パーサー プラグイン API

メソッドまたはプロパティ 説明
version 拡張機能のバージョン (読み取り専用)
registerParser(parser, options?) パーサーをレジストリに登録します。
unregisterParser(id) 登録済みのパーサーを削除します。
getParserRegistry() パーサー レジストリに直接アクセスします。
hasParser(id) パーサーが登録されているかどうかを確認します。
getExternalParsers() 登録済みの外部パーサーに関する情報を取得します。

次のステップ