クイック スタート: サンプルの azd 拡張機能を構築する

このクイック スタートでは、Contoso Resource Tagger という名前Azure Developer CLI (azd) 拡張機能のサンプルを作成します。 azd開発者拡張機能を使用して、Go プロジェクトをスキャフォールディングし、カスタム コマンドを追加して、拡張機能をローカルで実行します。 作成するサンプル拡張機能は、機能の追加、 azdとの通信、モデル コンテキスト プロトコル (MCP) サーバーの追加、作業の公開の方法を示す、このセクションの他の記事の開始点です。

開始する前に拡張機能開発の背後にある概念については、「 拡張機能開発の概念」を参照してください。

Note

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

前提条件

azd には、既定で公式の拡張機能ソースが含まれています。 URL ベースまたはファイル ベースのソース、ローカル開発レジストリ、オプトイン開発レジストリまたは夜間レジストリ、ポータブル .zip バンドルから拡張機能をインストールすることもできます。 詳細については、「 拡張機能の開発の概念」を参照してください。

Tip

azd プロジェクトが拡張機能によって提供されるホスト、プロバイダー、検証、ライフサイクル ハンドラー、またはコマンドに依存している場合は、バージョン制約を使用して、azure.yamlで必要な拡張機能を宣言します。 詳細については、 requiredVersionsを参照してください。

開発者拡張機能をインストールする

azd開発者拡張機能 (microsoft.azd.extensions) には、拡張機能のビルドに使用するazd xコマンドが用意されています。

  1. 公式の拡張機能ソースから開発者拡張機能をインストールします。

    azd extension install microsoft.azd.extensions
    
  2. 拡張機能がインストールされていることを確認します。

    azd extension list --installed
    

    開発者拡張機能は、 x 名前空間の下に一連のコマンドを登録します。 azd xを実行して、使用可能なコマンドを確認します。

サンプル拡張機能をスキャフォールディングする

azd x init コマンドを使用して、新しい拡張プロジェクトをスキャフォールディングします。

  1. 拡張機能のディレクトリを作成して変更します。

    mkdir azd-extensions
    cd azd-extensions
    
  2. Git リポジトリを初期化し、初期コミットを作成します。 azd x init コマンドでは、拡張機能フォルダーを git で追跡する必要があります。

    git init
    git commit --allow-empty -m "Initial commit"
    
  3. azd x init コマンドを実行して拡張機能をスキャフォールディングします。

    azd x init
    
  4. メッセージが表示されたら、次の値を指定します。

    プロンプト 価値
    拡張機能 ID contoso.azd.tagger
    表示名 Contoso Resource Tagger
    Description Standardize and report Azure resource tags for an azd project.
    名前空間 tagger
    能力 Custom commands
    Language Go

このコマンドは拡張機能をスキャフォールディングし、初期バイナリをビルドし、拡張機能をパッケージ化し、ローカル拡張機能ソースに発行して、すぐに使用できるようにローカルにインストールします。

プロジェクト構造を調べる

azd x init コマンドは、次のキー ファイルを含むプロジェクトを生成します。

contoso.azd.tagger/
├── bin/                    # Contains built binaries
├── build.ps1               # Windows build script
├── build.sh                # Unix build script
├── CHANGELOG.md            # Version history and release notes
├── extension.yaml          # Extension metadata and capabilities
├── main.go                 # Entry point for the extension
├── go.mod                  # Go module definition
└── internal/               # Internal implementation code

最も重要なファイルは次のとおりです。

  • extension.yaml: 拡張機能のメタデータ、機能、およびコマンドを定義します。 詳細については、「 拡張機能マニフェストの定義」を参照してください。
  • main.go: 拡張機能のルート コマンドを実行するエントリ ポイント。
  • build.sh build.ps1: サポートされているプラットフォーム (Linux、Windows、macOS) ごとに個別のバイナリをコンパイルするクロスプラットフォーム ビルド スクリプト。
  • CHANGELOG.md: バージョン間の変更をドキュメント化し、発行時にリリース ノートを提供します。

カスタム コマンドを追加する

拡張機能の動作を確認する案内応答を出力する show コマンドを追加します。 正確なファイル レイアウトはスターター テンプレートによって異なりますが、パターンは同じです。 Cobra コマンドを定義し、ルート コマンドに登録します。

  1. internal/cmd ディレクトリで、次の内容を含む show.go という名前のファイルを作成します。

    package cmd
    
    import (
        "fmt"
    
        "github.com/spf13/cobra"
    )
    
    func newShowCommand() *cobra.Command {
        return &cobra.Command{
            Use:   "show",
            Short: "Displays a greeting from the Contoso Resource Tagger extension.",
            RunE: func(cmd *cobra.Command, args []string) error {
                fmt.Println("Hello from the Contoso Resource Tagger extension!")
                return nil
            },
        }
    }
    
  2. ルート コマンドにコマンドを登録します。 internal/cmd/root.go ファイルで、他のAddCommand関数の後に、ファイルの下部に次の行を追加します。

    rootCmd.AddCommand(newShowCommand())
    

拡張機能を実行する

拡張機能を実行する前に、パッケージ化し、ローカルの拡張機能ソースに発行して変更を登録します。

  1. 拡張機能をパッケージ化します。

    azd x pack
    
  2. 拡張機能を発行して登録します。

    azd x publish
    
  3. 新しいコマンドを実行します。

    azd tagger show
    

    出力は次の例のようになります。

    Hello from the Contoso Resource Tagger extension!
    

これで、ビルド可能な機能拡張が作成されました。

開発中の変更を監視する

変更後に azd x packazd x publish を手動で実行する代わりに、 azd x watch を使用して、開発時に拡張機能を自動的にビルドしてインストールします。

  1. 拡張機能ディレクトリからウォッチャーを起動します。

    azd x watch
    
  2. 2 番目のターミナルで、コマンドを実行して変更を行う際にテストします。

    azd tagger show
    

ウォッチャーを使用する代わりに拡張機能を手動でビルドするには、 azd x buildを実行します。

リソースをクリーンアップする

実験が完了したら、サンプル拡張機能をアンインストールします。

azd extension uninstall contoso.azd.tagger

サンプル拡張機能を引き続き構築するには、次の記事を参照してください。 各記事は独立しているため、任意の順序で完了できます。