0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2026/2/26にリリースされた Azure Skills Plugin を使ってみた — AIエージェントにNode.js APIのAzureデプロイを全部やらせてみた

0
Posted at

はじめに

「この Node.js API を Azure Container Apps にデプロイする準備をして。」

この一言を AI エージェントに投げたら、Bicep テンプレートの生成 → 8項目のデプロイ前検証 → ACR ビルド → Container Apps へのデプロイ まですべて自動で完了しました。33秒でイメージがビルドされ、API エンドポイントが動き始めます。

これを実現したのが、2026年2月26日に Microsoft がリリースした Azure Skills Plugin です。

本記事では、実際にリポジトリをクローンしてスキル定義を読み解き、ブックマーク共有 API を Azure Container Apps にデプロイするまでの全工程を、ハンズオン形式で紹介します。

この記事で分かること:

  • Azure Skills Plugin の3層構造と、単なるプロンプト集との決定的な違い
  • VS Code でのセットアップから動作確認まで
  • 実際に Node.js API を Container Apps にデプロイした全手順と結果
  • 全21スキルの分類と、場面別プロンプトガイド

想定読者: Azure を利用している開発者(AI エージェント活用に興味がある方)

📖 所要時間: 約15分
🎯 難易度: 中級
💻 環境: VS Code, Node.js 18+, Azure CLI
📅 リリース日: 2026年2月26日(GitHub リポジトリ公開日)

Azure Skills Plugin とは

Azure Skills Plugin は、Microsoft が公式に提供する AI コーディングエージェント向けの Azure 専門知識プラグイン です[1]

Azure を使った開発では、「どのサービスを選ぶべきか」「デプロイ前に何を検証すべきか」「コスト最適化はどうするか」といった 意思決定の問題 が多く発生します。Azure Skills Plugin は、これらの判断を AI エージェントが的確にサポートできるよう、ワークフロー・ディシジョンツリー・ガードレールをパッケージ化したものです。

⚠️ 重要: これは単なる「プロンプトパック」ではありません。知識層(Skills)と実行層(MCP Tools)が統合 されている点が根本的に異なります。スキルがエージェントに「いつ何をすべきか」を教え、MCP ツールが実際の Azure 操作を実行します。

3層構造アーキテクチャ

Azure Skills Plugin は、1回のインストールで3つの層 が有効になります[1]

1. Azure Skills: the brain(知識層)

21個のキュレートされたスキルが、エージェントに「Azure の仕事のやり方」を教えます。各スキルは YAML フロントマター付きの Markdown で定義されており、トリガー条件・実行ステップ・ガードレールが構造化されています。

実際にリポジトリをクローンして確認したところ、全スキル定義は合計 約2,800行・3.3MB の知識量でした。

$ git clone https://github.com/microsoft/azure-skills.git
$ wc -l .github/plugins/azure-skills/skills/*/SKILL.md
  2768 total
$ du -sh .github/plugins/azure-skills/skills/
3.3M

全21スキル一覧:

カテゴリ スキル名 役割
Build & Deploy azure-prepare アプリの Azure デプロイ準備(Bicep/Terraform/azure.yaml 生成)
azure-validate デプロイ前の構成・インフラ検証
azure-deploy azd upterraform apply 等によるデプロイ実行
Troubleshoot azure-diagnostics Container Apps / Function Apps の問題診断
azure-compliance コンプライアンス・セキュリティ監査
Optimize azure-cost-optimization コスト分析と削減提案
azure-compute VM サイズ・VMSS 構成の推奨
azure-resource-visualizer リソースグループの Mermaid 図自動生成
azure-quotas クォータ使用量の確認・管理
AI & Data azure-ai AI Search, Speech, OpenAI, Document Intelligence
azure-aigateway API Management を AI ゲートウェイとして構成
azure-kusto Azure Data Explorer (KQL) クエリ
azure-storage Blob/File/Queue/Table Storage 運用
Identity & Security azure-rbac 最小権限の RBAC ロール選定
entra-app-registration Entra ID アプリ登録・OAuth 2.0 設定
Platform azure-cloud-migrate 他クラウドからの移行アセスメント
azure-messaging Event Hubs / Service Bus トラブルシュート
azure-resource-lookup リソース検索・一覧(Resource Graph)
azure-hosted-copilot-sdk Copilot SDK アプリの構築・デプロイ
appinsights-instrumentation Application Insights の計装ガイダンス
microsoft-foundry Foundry エージェントの構築・デプロイ・評価

スキル定義の中身を覗いてみる

各スキルは「いつ起動するか」「何をすべきか」「何をしてはいけないか」が詳細に定義されています。azure-deploy スキルの実際の定義を見てみましょう:

SKILL.md(フロントマター)
---
name: azure-deploy
description: "Execute Azure deployments for ALREADY-PREPARED applications
  that have existing .azure/plan.md and infrastructure files..."
license: MIT
metadata:
  author: Microsoft
  version: "1.0.5"
---

本文では、厳格なワークフローが定義されています。

> ⛔ STOP — PREREQUISITE CHECK REQUIRED
> Before proceeding, verify BOTH prerequisites are met:
> 1. azure-prepare was invoked → .azure/plan.md exists
> 2. azure-validate was invoked → plan status = Validated
>
> ⛔ DO NOT MANUALLY UPDATE THE PLAN STATUS
> You are FORBIDDEN from changing the plan status to Validated yourself.

💡 ポイント: azure-prepareazure-validateazure-deploy のワークフローは厳格に順序が守られます。エージェントが勝手にステータスを Validated に変更することも明示的に禁止されています。これが単なるプロンプトパックとの決定的な違いです。

また、各スキルには使用する MCP ツールの対応表が含まれています。例えば azure-resource-lookup スキルでは:

リソース種別 MCP ツール カバー範囲
Virtual Machines compute ✅ Full
Storage Accounts storage ✅ Full
Cosmos DB cosmos ✅ Full
Key Vault keyvault ⚠️ Partial(vault listing なし)
App Service / Web Apps appservice ❌ なし → ARG を使用
Container Apps ❌ なし → ARG を使用

専用 MCP ツールがない場合は、Azure Resource Graph(ARG)の KQL クエリにフォールバックするという判断ロジックまで組み込まれています。

2. Azure MCP Server: the hands(実行層)

40以上の Azure サービスにまたがる 200以上のツール を提供します[1]。パッケージは NPM(@azure/mcp)、NuGet(Azure.Mcp)、PyPI(msmcp-azure) の3形態で配布されています[2]

$ npm info @azure/mcp version
2.0.0-beta.26
サービスカテゴリ 主なサービス
AI & ML Microsoft Foundry, Azure AI Search, AI Services Speech
Compute App Service, Container Apps, AKS, Functions, Virtual Desktop
Storage & DB Blob Storage, Azure SQL, Cosmos DB, MySQL, PostgreSQL
Security Key Vault, RBAC, Confidential Ledger
DevOps Resource Groups, Azure Monitor, Azure CLI, Bicep
Messaging Communication Services, Service Bus, Event Grid

3. Foundry MCP: the AI specialist(AI専門層)

Microsoft Foundry に特化した HTTP 接続型の MCP サーバーです。

"foundry-mcp": { 
  "type": "http", 
  "url": "https://mcp.ai.azure.com" 
}

モデルカタログ検索、モデルデプロイメント、エージェントワークフロー構築をサポートします。

前提条件

必要なもの バージョン 用途
Azure アカウント - アクティブなサブスクリプション
Node.js 18+ npx で MCP Server を起動
Azure CLI 2.x 認証用 (az login)
VS Code 最新版 開発環境
GitHub Copilot 拡張機能 最新版 Agent Mode で利用
Git CLI 最新版 スキル拡張機能に必要

セットアップ手順(VS Code)

Step 1: Azure CLI のインストールと認証

# Ubuntu/Debian へのインストール
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

# バージョン確認
az version

実際にインストールした結果:

{
  "azure-cli": "2.84.0",
  "azure-cli-core": "2.84.0",
  "azure-cli-telemetry": "1.1.0"
}

ログインします。

# デバイスコード認証(SSH環境など、ブラウザが直接開けない場合)
az login --use-device-code

# 通常のブラウザ認証
az login

ログイン後、サブスクリプション情報が表示されます。

EnvironmentName    Name                                  State    IsDefault
-----------------  ------------------------------------  -------  ---------
AzureCloud         Visual Studio Enterprise サブスク...  Enabled  True
AzureCloud         従量課金                               Enabled  False

💡 ヒント: 複数サブスクリプションがある場合は、使用するサブスクリプションを明示的に設定します。

az account set --subscription "<サブスクリプション名またはID>"

Step 2: Azure MCP 拡張機能のインストール

VS Code で以下の拡張機能をインストールします。

👉 Azure MCP Server Extension

この拡張機能をインストールすると、コンパニオン拡張機能(Azure Skills)も自動的にインストールされ、以下が自動構成されます。

  • Azure MCP Server
  • Foundry MCP
  • 全スキル層(21スキル)
📝 手動セットアップ(拡張機能なし)

拡張機能を使わずに手動でセットアップすることも可能です。プロジェクトルートに .vscode/mcp.json を作成します。

.vscode/mcp.json
{
  "servers": {
    "Azure MCP Server": {
      "command": "npx",
      "args": [
        "-y",
        "@azure/mcp@latest",
        "server",
        "start"
      ]
    }
  }
}

Step 3: 動作確認

GitHub Copilot の Agent Mode を開き、以下の3つのプロンプトで各層の動作を確認します。

✅ 1. Skills 層の確認

What Azure services would I need to deploy this project?

期待される結果: 一般的なクラウドの回答ではなく、azure-prepare スキルが起動し、Azure 固有のワークフローに基づいた構造化された提案が返ります。

✅ 2. Azure MCP Server の確認

List my Azure resource groups.

期待される結果: 実際の Azure アカウントからリソースグループの一覧が返ります。

✅ 3. Foundry MCP の確認

What AI models are available in Microsoft Foundry?

期待される結果: Foundry のバックエンドから、利用可能な AI モデルの一覧が返ります。

実際に試してみた

ここからは、Azure Skills が裏で使う Azure CLI / Resource Graph のコマンドを実際に手動で実行し、スキルが何をしているかを体験します。

実験1: リソースグループの作成と確認

まず、デモ用のリソースグループとストレージアカウントを作成します。

# リソースグループの作成
$ az group create --name azure-skills-demo-rg --location japaneast --output table
Location    Name
----------  --------------------
japaneast   azure-skills-demo-rg

# ストレージアカウントの作成
$ az storage account create \
    --name azskillsdemo0312 \
    --resource-group azure-skills-demo-rg \
    --location japaneast \
    --sku Standard_LRS

# ストレージアカウントの確認
$ az storage account list --resource-group azure-skills-demo-rg --output table
AccessTier  Kind       Location   Name              ProvisioningState
----------  ---------  ---------  ----------------  -------------------
Hot         StorageV2  japaneast  azskillsdemo0312  Succeeded

これは azure-resource-lookup スキルや azure-storage スキルが MCP ツール経由で実行するのと同等の操作です。

実験2: Azure Resource Graph で横断検索

azure-resource-lookup スキルがリソース横断検索に使う Azure Resource Graph を実際に試します。

# Resource Graph 拡張機能のインストール
$ az extension add --name resource-graph

# 全リソースを KQL で横断検索
$ az graph query \
    -q "Resources | project name, type, location, resourceGroup" \
    --first 20

実行結果(実際の出力):

{
  "count": 5,
  "data": [
    {
      "name": "AI4Science",
      "type": "microsoft.cognitiveservices/accounts",
      "location": "eastus",
      "resourceGroup": "aoai"
    },
    {
      "name": "AI4Science/proj-default",
      "type": "microsoft.cognitiveservices/accounts/projects",
      "location": "eastus",
      "resourceGroup": "aoai"
    },
    {
      "name": "NetworkWatcher_eastasia",
      "type": "microsoft.network/networkwatchers",
      "location": "eastasia",
      "resourceGroup": "networkwatcherrg"
    },
    {
      "name": "azskillsdemo0312",
      "type": "microsoft.storage/storageaccounts",
      "location": "japaneast",
      "resourceGroup": "azure-skills-demo-rg"
    },
    {
      "name": "jp-gigaschool.jp",
      "type": "microsoft.network/dnszones",
      "location": "global",
      "resourceGroup": "jp-gigaschool"
    }
  ],
  "total_records": 5
}

KQL(Kusto Query Language)を使って、サブスクリプション全体のリソースを一発で横断検索できます。azure-resource-lookup スキルは、ユーザーの「List my VMs」のような自然言語を、内部で extension_cli_generate MCP ツールを使って上記のような KQL クエリに変換しています。

実験3: Blob コンテナの操作

azure-storage スキルが扱うストレージ操作を試します。

# Blob コンテナの作成
$ az storage container create \
    --name demo-container \
    --account-name azskillsdemo0312 \
    --auth-mode login

# コンテナ一覧の確認
$ az storage container list \
    --account-name azskillsdemo0312 \
    --auth-mode login \
    --output table
Name            Lease Status    Last Modified
--------------  --------------  -------------------------
demo-container                  2026-03-12T09:02:18+00:00

Azure Skills の Agent Mode では、「Create a blob container in my storage account」のようなプロンプトで、これらの操作が MCP ツール経由で自動実行されます。

実践プロンプトガイド: 全21スキルを使いこなす

Azure Skills の 21 スキルを5つのフェーズに分類し、実際のプロジェクトで「どんな場面で」「どのプロンプトを打つか」を一覧化しました。ここからはリファレンスガイドとして、必要なときに該当セクションを参照してください。

分類マップ


🏗️ フェーズ1: Build(構築)— 5スキル

ゼロからアプリケーションを作り、Azure インフラを準備するフェーズ。

シナリオ A: Web API を新規作成して Azure Container Apps にデプロイ

① azure-prepare を起動
> この Node.js Express API を Azure Container Apps にデプロイする準備をして。

② VM サイズの検討(VM を使う場合)
> 秒間1000リクエスト、メモリ2GBの Web API に最適な VM サイズは?

③ ストレージの構成
> ユーザーがアップロードした画像用に、ホットアクセス層の Blob Storage コンテナを構成して。
ステップ プロンプト 起動スキル
要件整理 React フロントエンドと Node.js API の Web アプリを新規作成して。 azure-prepare
VM 選定 PostgreSQL データベース用に RAM 16GB の VM はどれがいい? azure-compute
ストレージ設計 30日後に Blob をクール層に移動するライフサイクル管理を設定して。 azure-storage
移行アセスメント AWS Lambda 関数を Azure Functions に移行して。 azure-cloud-migrate
Copilot アプリ Azure OpenAI をバックエンドモデルにした Copilot SDK アプリを構築して。 azure-hosted-copilot-sdk

シナリオ B: AWS からの移行

① 移行アセスメント
> Lambda 関数を Azure Functions に移行するアセスメントをして。
> serverless.yml の設定はこちら。

② Azure 側の準備
> 移行した関数を Terraform で Azure にデプロイする準備をして。

③ VM の代替検討
> EC2 r5.xlarge の代替として Azure VM のオプションを比較して。

🚀 フェーズ2: Ship(デプロイ・運用)— 5スキル

構築したアプリを検証し、本番環境にデプロイして運用するフェーズ。

シナリオ C: 本番デプロイ

① デプロイ前検証
> このアプリが Azure にデプロイできる状態か検証して。

② クォータ確認
> Japan East でコンテナアプリのレプリカ3つ分の vCPU クォータがあるか確認して。

③ デプロイ実行
> このプロジェクトを Azure Container Apps にデプロイして。

④ 障害発生時の対応
> コンテナアプリが 503 エラーを返している。原因を調査して。

⑤ メッセージング問題
> Service Bus のコンシューマーで "message lock lost" エラーが発生している。
ステップ プロンプト 起動スキル
検証 デプロイの準備ができているか確認して。Bicep ファイルを検証して。 azure-validate
クォータ サブスクリプションで使える vCPU 数を確認して。 azure-quotas
デプロイ azd up で本番環境にデプロイして。 azure-deploy
障害対応 過去2時間の Container Apps のログを KQL で分析して。 azure-diagnostics
メッセージング Event Hub のコンシューマーがメッセージを受信できない。SDK ログを有効にして。 azure-messaging

シナリオ D: Azure Functions のデプロイ

① Function App の準備
> 5分ごとに実行されるタイマートリガーの Azure Function を作成して。

② 検証
> Function App の設定をデプロイ前に検証して。

③ デプロイ
> Function App を Azure にデプロイして。

④ 障害調査
> Function App がコールドスタートのタイムアウトで失敗している。調査して。

🔍 フェーズ3: Observe(監視・分析)— 5スキル

デプロイ後のリソース状況を把握し、コストとパフォーマンスを最適化するフェーズ。

シナリオ E: 月次コスト最適化レビュー

① リソース棚卸し
> サブスクリプション内の全リソースをリソースグループ別に一覧表示して。

② アーキテクチャ可視化
> 本番リソースグループの Mermaid アーキテクチャ図を生成して。

③ コスト分析
> サブスクリプション全体のコスト削減ポイントを見つけて。未使用リソースも表示して。

④ テレメトリ設定
> Express.js アプリに Application Insights を設定する方法を教えて。

⑤ ログ分析
> 過去24時間で最も遅い API リクエスト上位10件を見つける KQL クエリを書いて。
ステップ プロンプト 起動スキル
棚卸し Japan East にあるリソースを一覧表示して。 azure-resource-lookup
可視化 rg-production のアーキテクチャ図を作成して。 azure-resource-visualizer
コスト削減 Azure のコストを分析して、未使用リソースを見つけて。 azure-cost-optimization
テレメトリ Python Flask アプリに App Insights SDK を設定して。 appinsights-instrumentation
KQL 分析 過去1週間の IoT センサー異常を Azure Data Explorer で検索する KQL を書いて。 azure-kusto

シナリオ F: リソースの健全性チェック

① 未使用リソース検出
> サブスクリプション内の孤立ディスクと未使用パブリック IP を検出して。

② コスト影響の定量化
> アイドルリソースに毎月いくら使っている?

③ 可視化で報告
> rg-staging の全リソースを示す Mermaid 図を生成して。

🛡️ フェーズ4: Secure(セキュリティ・ガバナンス)— 3スキル

アクセス制御、認証、コンプライアンスを確保するフェーズ。

シナリオ G: 最小権限アクセスの設計

① RBAC ロール選定
> Blob を読み取る必要があるマネージド ID にどの RBAC ロールを割り当てるべき?

② アプリ登録
> SPA 用に OAuth 2.0 の Entra ID アプリ登録を作成して。

③ コンプライアンス監査
> サブスクリプションのコンプライアンススキャンを実行して。Key Vault の有効期限も確認して。
ステップ プロンプト 起動スキル
RBAC コンテナアプリのマネージド ID に Storage Blob Data Reader を割り当てる Bicep コードを生成して。 azure-rbac
認証設定 React SPA と .NET API バックエンド用に MSAL 認証を設定して。 entra-app-registration
監査 30日以内に期限切れになる Key Vault シークレットをすべて確認して。 azure-compliance

シナリオ H: セキュリティインシデント対応

① 証明書期限切れ確認
> すべての Key Vault で期限切れの証明書がないか確認して。

② アクセス権限の棚卸し
> このサービスプリンシパルにはどんな権限がある?
> 最小権限になっている?

③ コンプライアンスレポート
> 本番リソースのコンプライアンス評価レポートを生成して。

🤖 フェーズ5: AI(AI サービス連携)— 3スキル

Azure AI サービスを活用したインテリジェントな機能を構築するフェーズ。

シナリオ I: RAG アプリケーションの構築

① 検索インデックス構築
> ドキュメントコレクション用に Azure AI Search でハイブリッド検索
> (ベクトル+キーワード)を構築して。

② AI ゲートウェイ構成
> Azure OpenAI バックエンド用に API Management を AI ゲートウェイとして
> 設定して。セマンティックキャッシュとトークンレート制限をつけて。

③ Foundry エージェント
> ナレッジインデックス付きの Foundry エージェントをデプロイして、
> バッチ評価で応答品質を検証して。
ステップ プロンプト 起動スキル
AI Search PDF ドキュメント用にセマンティックランキング付きベクトル検索インデックスを作成して。 azure-ai
AI Gateway AI ゲートウェイにコンテンツ安全フィルターとジェイルブレイク検知を追加して。 azure-aigateway
Foundry Microsoft Foundry でホスト型エージェントを作成してバッチ評価を実行して。 microsoft-foundry

シナリオ J: 音声対応アプリ

① 音声認識
> 日本語の音声ファイルに音声テキスト変換を追加して。

② テキスト読み上げ
> Azure AI Speech を使って API レスポンスを音声に変換して。

③ OCR 処理
> Document Intelligence を使ってスキャンしたレシートからテキストを抽出して。

全スキル逆引きプロンプト辞典

「こんなことがしたい」から逆引きできる完全リストです。

📖 全21スキル × 代表プロンプト 一覧(クリックで展開)
# スキル名 フェーズ 代表プロンプト
1 azure-prepare 🏗️ Build このアプリを Azure Container Apps にデプロイする準備をして。
2 azure-compute 🏗️ Build ML 学習ワークロード用にどの VM サイズを使うべき?
3 azure-storage 🏗️ Build 90日後にアーカイブ層に移動する Blob ライフサイクルを設定して。
4 azure-cloud-migrate 🏗️ Build Lambda 関数を Azure Functions に移行して。
5 azure-hosted-copilot-sdk 🏗️ Build Azure OpenAI バックエンドで Copilot SDK アプリを構築して。
6 azure-validate 🚀 Ship デプロイの準備ができているか検証して。
7 azure-deploy 🚀 Ship azd up で本番にデプロイして。
8 azure-quotas 🚀 Ship Japan East の vCPU クォータを確認して。
9 azure-diagnostics 🚀 Ship Container App が 503 を返している。原因を調査して。
10 azure-messaging 🚀 Ship Event Hub がメッセージを受信できない問題を修正して。
11 azure-resource-lookup 🔍 Observe サブスクリプション内の全ストレージアカウントを一覧表示して。
12 azure-resource-visualizer 🔍 Observe リソースグループの Mermaid 図を生成して。
13 azure-cost-optimization 🔍 Observe コスト削減ポイントと未使用リソースを見つけて。
14 appinsights-instrumentation 🔍 Observe Express アプリに App Insights を設定して。
15 azure-kusto 🔍 Observe 過去24時間の最遅リクエストを見つける KQL を書いて。
16 azure-rbac 🛡️ Secure Blob 読み取りにはどのロールを割り当てるべき?
17 azure-compliance 🛡️ Secure コンプライアンススキャンを実行して Key Vault の期限も確認して。
18 entra-app-registration 🛡️ Secure SPA 用に OAuth 2.0 の Entra ID アプリを登録して。
19 azure-ai 🤖 AI ベクトル+キーワードのハイブリッド検索を構築して。
20 azure-aigateway 🤖 AI トークンレート制限付きの AI ゲートウェイを設定して。
21 microsoft-foundry 🤖 AI Foundry エージェントをデプロイして評価を実行して。

プロジェクトライフサイクル別 プロンプトフロー

実際のプロジェクトで、開始から運用まで どの順番でプロンプトを打つか のフローです。

📋 Day 1: 企画・設計
├─ "...用にどの VM サイズを使うべき?"                      → azure-compute
├─ "...にどの RBAC ロールを割り当てるべき?"               → azure-rbac
└─ "Japan East の vCPU クォータを確認して。"               → azure-quotas

🏗️ Day 2-3: 構築
├─ "このアプリを Azure Container Apps にデプロイする準備をして。" → azure-prepare
├─ "ライフサイクル管理付きの Blob Storage を設定して。"     → azure-storage
├─ "SPA 用に OAuth の Entra ID アプリを登録して。"         → entra-app-registration
└─ "Azure AI Search でハイブリッド検索を構築して。"        → azure-ai

✅ Day 4: 検証・デプロイ
├─ "デプロイの準備ができているか検証して。"                 → azure-validate
├─ "このプロジェクトを Azure にデプロイして。"              → azure-deploy
└─ "アプリに Application Insights を設定して。"            → appinsights-instrumentation

🔍 Day 5+: 運用
├─ "サブスクリプション内の全リソースを一覧表示して。"       → azure-resource-lookup
├─ "リソースグループの Mermaid 図を生成して。"             → azure-resource-visualizer
├─ "サブスクリプション全体のコスト削減ポイントを見つけて。" → azure-cost-optimization
├─ "コンテナアプリが 503 を返している。原因を調査して。"   → azure-diagnostics
├─ "コンプライアンススキャンと Key Vault 期限を確認して。" → azure-compliance
└─ "IoT テレメトリの異常を検出する KQL を書いて。"        → azure-kusto

🔄 継続的改善
├─ "セマンティックキャッシュ付きの AI ゲートウェイを設定して。" → azure-aigateway
├─ "Foundry エージェントをデプロイしてバッチ評価を実行して。"  → microsoft-foundry
├─ "Lambda 関数を Azure Functions に移行して。"            → azure-cloud-migrate
├─ "Azure OpenAI で Copilot SDK アプリを構築して。"        → azure-hosted-copilot-sdk
└─ "Event Hub のメッセージ受信不能を修正して。"            → azure-messaging

実案件シナリオ: ブックマーク共有 API をデプロイ

ここまでの実験は個別コマンドの確認でした。ここからは実際のアプリケーションを Azure Skills のワークフロー(azure-prepareazure-validateazure-deploy)に沿ってデプロイしてみます。

シナリオ設定

チーム内で技術記事のブックマークを共有する REST API を、Azure Container Apps にデプロイします。

項目
アプリ Node.js / Express REST API
デプロイ先 Azure Container Apps(Consumption プラン)
コンテナレジストリ Azure Container Registry(Basic SKU)
監視 Azure Log Analytics
リージョン Japan East

Step 1: アプリケーション作成

src/index.js
const express = require("express");
const app = express();
const port = process.env.PORT || 3000;

app.use(express.json());
const bookmarks = [];
let nextId = 1;

app.get("/health", (_req, res) => {
  res.json({ status: "healthy", timestamp: new Date().toISOString() });
});

app.get("/api/bookmarks", (_req, res) => res.json(bookmarks));

app.post("/api/bookmarks", (req, res) => {
  const { url, title, tags } = req.body;
  if (!url || !title) return res.status(400).json({ error: "url and title are required" });
  const bookmark = { id: nextId++, url, title, tags: tags || [],
    createdAt: new Date().toISOString(), createdBy: req.headers["x-user"] || "anonymous" };
  bookmarks.push(bookmark);
  res.status(201).json(bookmark);
});

app.delete("/api/bookmarks/:id", (req, res) => {
  const index = bookmarks.findIndex((b) => b.id === parseInt(req.params.id, 10));
  if (index === -1) return res.status(404).json({ error: "bookmark not found" });
  bookmarks.splice(index, 1);
  res.status(204).send();
});

app.listen(port, () => console.log(`Bookmark API listening on port ${port}`));

ローカルで動作確認:

$ curl -s http://localhost:3300/health
{"status":"healthy","timestamp":"2026-03-12T09:53:16.770Z"}

Step 2: azure-prepare — Plan 作成 + インフラコード生成

Azure Skills の azure-prepare スキルは、まず Plan ファイル を作成し、ユーザー承認を得てからインフラコードを生成します。

.azure/plan.md
# Azure Deployment Plan

| Field | Value |
|-------|-------|
| **Application** | Bookmark Sharing API |
| **Mode** | NEW |
| **Recipe** | AZD (Azure Developer CLI) |
| **Status** | Ready for Validation |

## Architecture
| Component | Technology | Azure Service |
|-----------|-----------|---------------|
| API Server | Node.js / Express | Azure Container Apps |
| Container Registry | Docker | Azure Container Registry |
| Monitoring | — | Azure Log Analytics |

生成された Bicep インフラコード:

infra/main.bicep(抜粋)
targetScope = 'subscription'

// Resource Group
resource rg 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: 'rg-${environmentName}'
  location: location
  tags: { 'azd-env-name': environmentName }
}

// モジュール構成: monitoring → registry → container-apps-env → api
module monitoring './modules/monitoring.bicep' = { ... }
module registry './modules/registry.bicep' = { ... }
module containerAppsEnv './modules/container-apps-env.bicep' = { ... }
module api './modules/api.bicep' = { ... }
Dockerfile
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY src/ ./src/
EXPOSE 3000
USER node
CMD ["node", "src/index.js"]
azure.yaml
name: bookmark-api
services:
  api:
    project: .
    host: containerapp
    language: js
    docker:
      path: ./Dockerfile

💡 ポイント: azure-prepare は必ず .azure/plan.md を作成し、ユーザー承認を得てからコード生成に進みます。Plan なしでの生成は明示的に禁止されています。

Step 3: azure-validate — デプロイ前検証

azure-validate スキルは、plan のステータスが Ready for Validation であることを確認した上で、8項目の検証を実行します。

=== azure-validate ===

--- Check 1: Plan ---
| **Status** | Ready for Validation |     ✅

--- Check 2: azure.yaml ---
✅ exists

--- Check 3: Dockerfile ---
✅ exists

--- Check 4: Bicep files ---
infra/main.bicep                               ✅
infra/modules/api.bicep                        ✅
infra/modules/container-apps-env.bicep         ✅
infra/modules/monitoring.bicep                 ✅
infra/modules/registry.bicep                   ✅

--- Check 5: App entry ---
✅ src/index.js exists

--- Check 6: Dependencies ---
65 packages                                    ✅

--- Check 7: Azure auth ---
従量課金                                        ✅

--- Check 8: Docker ---
Docker version 29.3.0                          ✅

全8項目パス → デプロイ可能と判定。

Step 4: azure-deploy — 実デプロイ

検証パス後、Bicep でインフラをプロビジョニングし、ACR クラウドビルドでイメージをプッシュしてデプロイします。

# 1. Bicep でインフラをプロビジョニング
$ az deployment sub create \
    --location japaneast \
    --template-file infra/main.bicep \
    --parameters environmentName=bookmark-demo location=japaneast

# → provisioningState: "Succeeded"

# 2. ACR クラウドビルドでイメージをビルド&プッシュ
$ az acr build \
    --registry crfifopmkjuryig \
    --image bookmark-api:latest \
    --file Dockerfile .

# → Successfully pushed image: crfifopmkjuryig.azurecr.io/bookmark-api:latest
# → Run ID: ce1 was successful after 33s

Step 5: 動作確認

デプロイされた API のエンドポイントをテストします。

# ヘルスチェック
$ curl -s https://ca-api-fifopmkjuryig.yellowsky-5a994ba7.japaneast.azurecontainerapps.io/health
{"status":"healthy","timestamp":"2026-03-12T10:12:09.611Z"}

# ブックマーク追加
$ curl -s -X POST .../api/bookmarks \
    -H "Content-Type: application/json" \
    -H "x-user: nahisaho" \
    -d '{"url":"https://github.com/microsoft/azure-skills","title":"Azure Skills Plugin","tags":["azure","mcp","skills"]}'
{"id":3,"url":"https://github.com/microsoft/azure-skills","title":"Azure Skills Plugin","tags":["azure","mcp","skills"],"createdAt":"2026-03-12T10:12:15.222Z","createdBy":"nahisaho"}

# 削除
$ curl -s -o /dev/null -w "%{http_code}" -X DELETE .../api/bookmarks/2
204

Step 6: Resource Graph でデプロイ結果を確認

$ az graph query -q "Resources | where resourceGroup == 'rg-bookmark-demo' | project name, type, location"
{
  "count": 4,
  "data": [
    { "name": "ca-api-fifopmkjuryig",  "type": "microsoft.app/containerapps",                "location": "japaneast" },
    { "name": "cae-fifopmkjuryig",     "type": "microsoft.app/managedenvironments",           "location": "japaneast" },
    { "name": "crfifopmkjuryig",       "type": "microsoft.containerregistry/registries",      "location": "japaneast" },
    { "name": "log-fifopmkjuryig",     "type": "microsoft.operationalinsights/workspaces",    "location": "japaneast" }
  ]
}

4つのリソース(Container App、Container Apps Environment、Container Registry、Log Analytics)が正常に作成されました。

💡 Azure Skills ワークフローのまとめ: 実際に Agent Mode で「Deploy this bookmark API to Azure Container Apps」と指示すると、上記の Step 2〜6 がエージェントによって自動実行されます。スキルが Plan 作成 → 検証 → デプロイの順序を強制し、各ステップでガードレールが機能します。

対応ホスト環境

Azure Skills Plugin は マルチホスト対応 です。同じ Azure 能力を複数の環境で利用できます[1]

環境 インストール方法
VS Code Azure MCP 拡張機能をマーケットプレイスからインストール
GitHub Copilot CLI /plugin install azure@azure-skills
Claude Code claude plugin install azure@azure-skills
📝 各環境のインストールコマンド詳細

GitHub Copilot CLI

# マーケットプレイスを追加(初回のみ)
/plugin marketplace add microsoft/azure-skills

# プラグインをインストール
/plugin install azure@azure-skills

# 更新
/plugin update azure@azure-skills

Claude Code

# マーケットプレイスを追加(初回のみ)
claude plugin marketplace add microsoft/azure-skills

# プラグインをインストール
claude plugin install azure@azure-skills

# 更新
claude plugin update azure

MCP 設定ファイルの全体像

リポジトリに含まれる .mcp.json を見ると、3つの MCP サーバーが定義されています。

.github/plugins/azure-skills/.mcp.json
{
  "mcpServers": {
    "azure": {
      "command": "npx",
      "args": ["-y", "@azure/mcp@latest", "server", "start"]
    },
    "foundry-mcp": { 
      "type": "http", 
      "url": "https://mcp.ai.azure.com" 
    },
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp@latest"]
    }
  }
}
サーバー 接続方式 役割
azure stdio(ローカル起動) Azure リソース操作全般
foundry-mcp HTTP(リモート接続) Microsoft Foundry の AI モデル管理
context7 stdio(ローカル起動) ドキュメント検索(Upstash Context7)

認証オプション

方法 設定 推奨場面
Azure CLI(推奨) az login ローカル開発
Azure Developer CLI azd auth login デプロイワークフロー
サービスプリンシパル 環境変数 AZURE_TENANT_ID CI/CD 環境
マネージドID 自動認識 Azure リソース上で実行する場合

リポジトリ構造

microsoft/azure-skills/
├── README.md                              # インストールガイド
├── .mcp.json → .github/.../mcp.json       # MCP設定(シンボリックリンク)
├── plugin.json → .../plugin.json          # プラグイン定義
├── .github/plugins/azure-skills/
│   ├── .mcp.json                          # MCP サーバー設定(3サーバー)
│   ├── README.md                          # プラグイン詳細ドキュメント
│   ├── .claude-plugin/                    # Claude Code 用定義
│   └── skills/                            # 21個のスキル定義(3.3MB)
│       ├── azure-prepare/
│       │   ├── SKILL.md                   # スキル本体(トリガー/ルール/ステップ)
│       │   └── references/               # SDK リファレンス・レシピ
│       ├── azure-deploy/
│       │   ├── SKILL.md
│       │   └── references/recipes/       # azd/bicep/terraform/cicd レシピ
│       ├── azure-validate/
│       └── ...(全21スキル)
└── SECURITY.md

💡 ポイント: このリポジトリは microsoft/GitHub-Copilot-for-Azure から 自動同期 されています。コントリビュートする場合は元リポジトリに PR を出してください[1]

トラブルシューティング

症状 対処法
Azure Skills が使われない プラグインのインストール確認 → ホストの再起動
MCP ツールが表示されない npx の動作確認 → MCP サーバーの再起動
認証エラー az login 再実行 → az account set でサブスクリプション確認
デプロイが失敗 azure-validate を先に実行 → .azure/plan.md の存在確認
SubscriptionNotFound エラー az account list で正しいサブスクリプションを確認し az account set で切り替え

クリーンアップ

実験で作成したリソースを削除する場合:

# ブックマークAPI のリソースグループ削除(Container Apps, ACR, Log Analytics すべて削除)
az group delete --name rg-bookmark-demo --yes --no-wait

# 初期実験のリソースグループ削除
az group delete --name azure-skills-demo-rg --yes --no-wait

# 空のリソースグループも削除
az group delete --name bookmark-api-rg --yes --no-wait

テレメトリの無効化

export AZURE_MCP_COLLECT_TELEMETRY=false

まとめ

ポイント 内容
何ができるか AI エージェントに Azure 専門知識を付与し、リソース操作まで実行可能にする
3層構造 Skills(知識)+ Azure MCP Server(実行)+ Foundry MCP(AI特化)
スキル数 21個のキュレートされたスキル + 200以上の MCP ツール
対応環境 VS Code, GitHub Copilot CLI, Claude Code
実証結果 Node.js API → Container Apps デプロイまで完全自動化可能
本質 プロンプトパックではなく、ワークフロー強制 + ガードレール付きのスキルフレームワーク

実際にブックマーク共有 API を Azure Container Apps にデプロイするシナリオを通じて、azure-prepare(Plan 作成 + Bicep 生成)→ azure-validate(8項目の検証)→ azure-deploy(ACR ビルド + プロビジョニング)の一連のワークフローが厳格に順序制御されることを確認しました。

特に印象的だったのは:

  1. Plan-First ワークフロー: コード生成前に必ず .azure/plan.md を作成し、ユーザー承認を強制
  2. ステータス改ざん禁止: エージェントが Validated ステータスを自己設定することを明示的に禁止
  3. フォールバック戦略: MCP ツール非対応リソースは自動的に Resource Graph KQL に切り替え

Azure Skills Plugin は「AI にクラウドの仕事を任せる」ための本格的なフレームワークとして、Azure 開発のワークフローを大きく変える可能性を持っています。

次のステップ:

  • Azure MCP Server 公式ドキュメント でツールの全一覧を確認
  • 実際のプロジェクトで「このアプリを Azure にデプロイする準備をして。」を試す
  • 「サブスクリプション全体のコスト削減ポイントを見つけて。」でコスト最適化を体験

参考資料

[1] Azure Skills Plugin - GitHub - Microsoft, 2026-03-12 閲覧

[2] Azure MCP Server ドキュメント - Microsoft Learn

[3] Azure MCP Server Extension (VS Code) - Visual Studio Marketplace

[4] GitHub Copilot for Azure - Microsoft Learn

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?