拡張機能開発の概念

Azure Developer CLI (azd) 拡張機能は、新しいコマンドを追加し、ワークフローを自動化し、他のサービスをazdと統合します。 この記事では、開発者ツール、ソフトウェア開発キット (SDK)、実行中の拡張機能と通信する方法など、拡張機能をビルドする前に理解 azd 必要がある概念について説明します。 ユーザーの観点から見た拡張機能の概要については、 拡張機能の概要を参照してください。

Note

azd拡張機能フレームワークは一般提供されています。 個々の拡張機能または機能には、独自のプレビュー状態がある場合があります。

開発者拡張機能

拡張機能を構築する最も速い方法は、 azd 開発者拡張機能 (microsoft.azd.extensions) を使用する方法です。 開発者拡張機能は、拡張機能のスキャフォールディング、ビルド、パッケージ化、発行を行う一連のコマンドを azd x 名前空間の下に追加します。

命令 Description
azd x init 選択した言語で新しい拡張プロジェクトをスキャフォールディングします。
azd x build ローカル開発用の拡張バイナリをビルドします。
azd x watch プロジェクトの変更を監視し、拡張機能を自動的に再構築してインストールします。
azd x pack 公開の準備のために拡張機能成果物をパッケージ化します。
azd x release 拡張機能のGitHub リリースを作成します。
azd x publish 拡張機能レジストリを新しい拡張機能メタデータで更新します。

拡張機能のサンプルのビルド」クイック スタート では、開発者拡張機能をインストールし、最初の拡張機能をスキャフォールディングする方法を示します。

開発者拡張機能は、レジストリ ベースの発行ワークフローとポータブル バンドル配布をサポートします。 azd x packを使用して、リリースおよびレジストリパブリケーション用のプラットフォーム成果物を作成するか、レジストリをホストせずに拡張機能を共有する必要がある場合は自己完結型の.zipバンドルを作成します。 詳細なガイダンスについては、「 拡張機能を発行する」を参照してください。

拡張機能フレームワークと gRPC

azd と拡張機能は 、gRPC を介して通信する個別のプロセスとして実行されます。 拡張機能コマンドを呼び出すと、次の手順が実行されます。

  1. azd は、ランダム ポートで gRPC サーバーを起動し、 AZD_SERVER 環境変数にサーバー アドレスを設定します。
  2. azd は、 AZD_ACCESS_TOKEN 環境変数を設定します。これは、コマンドの有効期間中、 azd サービスへの拡張機能アクセスを許可する署名付き JSON Web トークン (JWT) です。
  3. azd は拡張機能コマンドを呼び出し、現在の引数、フラグ、環境変数を渡します。
  4. 拡張機能では、gRPC クライアントを使用して、ユーザーのプロンプトやプロジェクト構成の読み取りなど、フレームワーク サービスを介して azd に通信します。
  5. azd は、コマンドが完了するのを待機し、0 以外の終了コードをエラーとして報告します。

このモデルにより、拡張機能は、内部azd状態に直接アクセスすることなく、一貫性のある安全な方法でazdと対話できます。

Project レベルの拡張機能の要件

プロジェクトでは、必要な拡張機能を azure.yamlで宣言できます。 requiredVersions.extensionsセクションを使用して、プロジェクトを満たすバージョンazd解決できるように、拡張機能 ID とバージョン制約を一覧表示します。

requiredVersions:
  extensions:
    azure.ai.agents: ">=1.0.0"
    contoso.azd.tagger: "^2.0.0"

プロジェクトが拡張機能提供のホスト、プロバイダー、ライフサイクル ハンドラー、検証、またはコマンドに依存している場合に、必要な拡張機能を宣言します。 正確なスキーマとサポートされているバージョンの構文については、 requiredVersionsを参照してください。

The azdext SDK

azdext パッケージは、拡張機能フレームワーク用の Go SDK です。 通信の詳細を処理する gRPC クライアントとヘルパーが用意されているため、拡張機能ロジックに集中できます。 SDK には、次のヘルパーが含まれています。

  • 標準の azd フラグと環境変数の処理を登録するルート コマンドをビルドします。
  • azd アクセス トークンを送信要求にアタッチします。
  • Project、環境、アカウント、プロンプト サービスなどのazdフレームワーク サービスを呼び出します。
  • 拡張機能ホストを使用して、ライフサイクル イベント ハンドラーとカスタム プロバイダーを登録します。

拡張機能から azd サービスを呼び出す方法については、「SDK を 使用して azd と通信する」を参照してください。

拡張機能でできること

Capabilities は、拡張機能で何ができるかを定義します。 拡張機能の機能を extension.yaml マニフェストに一覧表示し、実行時に対応するアクセス許可を付与 azd 。 使用可能な機能は次のとおりです。

  • custom-commands: 新しいコマンド グループとコマンドを azdに追加します。
  • lifecycle-events: preprovisionpostdeployなどのプロジェクトおよびサービス ライフサイクル イベントをサブスクライブします。
  • mcp-server: AI エージェント用のモデル コンテキスト プロトコル (MCP) ツールを提供します。
  • service-target-provider: カスタム サービスのデプロイ ターゲットを指定します。
  • framework-service-provider: カスタム言語とフレームワークビルドのサポートを提供します。
  • provisioning-provider: カスタム インフラストラクチャ プロビジョニング エクスペリエンスを提供します。
  • validation-provider: 検証チェックを azd 検証パイプラインに投稿します。
  • metadata: ヘルプ出力と IntelliSense の豊富なコマンドと構成メタデータを提供します。

拡張機能に機能を追加する方法については、「拡張機能の 追加」を参照してください。

サポートされている言語

gRPC をサポートする任意の言語で azd 拡張機能を構築でき、 azd x init には複数の言語のスターター テンプレートが含まれています。 Go には、ファースト クラスの azdext SDK ヘルパーを含む、最も完全なサポートがあるため、このセクションの記事では、すべての例で Go を使用します。

Language サポート レベル
Go 最適なサポートとファースト クラスの SDK ヘルパー。
.NET (C#) スターター テンプレートとの強力な統合。
Python スターター テンプレートとの適切な統合。
JavaScript スターター テンプレートとの基本的な統合。

Go 以外の言語で作成された拡張機能の場合は、 リポジトリ内の azure/azure-devから gRPC クライアントを生成できます。 言語サポートの現在の状態については、アップストリーム拡張機能 フレームワークのドキュメントを参照してください。

拡張機能レジストリ

拡張機能は、拡張機能ソースを通じて配布します。 拡張ソースは、使用可能な拡張機能とその成果物を記述する URL ベースまたはファイル ベースのマニフェストです。 azd レジストリをホストしない場合は、直接インストール用のポータブル バンドル ファイルもサポートされます。

  • 公式レジストリazdで事前に構成されており、ファースト パーティの拡張機能を検証してホストします。 公式の拡張機能は、 azure/azure-dev リポジトリのフォークで開発されています。
  • URL ベースのソース を使用すると、リモートのパブリックレジストリマニフェストまたはプライベートレジストリマニフェストからインストールできます。
  • ファイル ベースのソース を使用すると、開発、テスト、またはオフラインのシナリオでローカル レジストリ マニフェストからインストールできます。
  • 開発レジストリと夜間レジストリは、進行中の作業用のオプトイン ソースであり、ファースト パーティの拡張機能を自動的に構築します。 開発レジストリ内の拡張機能は署名されておらず、Azure サポートの対象外であり、予告なしに変更または削除される可能性があります。

拡張機能をレジストリに発行する方法については、「拡張機能を 発行する」を参照してください。