mcpField
A
azure-diagrams

azure-diagrams

github.com/eraserlabsクラウド・DevOps45649 回インストール29 週間前に更新
リポジトリ

azure-diagrams について

Azure Diagram Generatorは、Azureインフラの情報から構成図を作るスキルです。ARMテンプレート、Azure CLIのJSON出力、自然言語の説明を解析し、リソース間の関係を整理してEraser APIで図を描画します。

主な機能

  1. 01ARMテンプレートとAzure CLI出力の解析
  2. 02インフラ説明の読み取り
  3. 03Azureリソース間の関係整理
  4. 04Eraser DSLの生成
  5. 05Eraser APIによるクラウド構成図の描画

活用シーン

  1. 01ARMテンプレートのリソースの可視化
  2. 02CLI出力を基にしたAzure構成図の作成
  3. 03サービスとネットワークの関係整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/eraserlabs/eraser-io --skill azure-diagrams

インストール後、Claude Code で/azure-diagramsを入力して読み込まれたか確認します。

詳細

Azure Diagram Generator

ARM テンプレート、Azure CLI の出力、または自然言語による説明から、Azure インフラストラクチャのアーキテクチャ図を生成します。

使用するタイミング

次の場合にこのスキルを有効にします。

  • ユーザーが ARM(Azure Resource Manager)テンプレート(JSON)を持っている
  • ユーザーが Azure CLI の出力(例:az vm list)を提供する
  • ユーザーが Azure リソースを可視化したい
  • ユーザーが Azure サービス(Virtual Machines、Storage Accounts、VNets など)について言及している
  • ユーザーが「Azure インフラストラクチャを図にして」と依頼する

動作の仕組み

このスキルは Azure リソースを解析し、Eraser API を直接呼び出すことで、Azure 固有の図を生成します。

  1. Azure リソースを解析する:ARM テンプレート、CLI の出力、または説明からリソースを抽出します
  2. Azure リソース間の関係をマッピングする:Resource Groups、VNets、サブネット、サービス間の接続を特定します
  3. Eraser DSL を生成する:Azure リソースから Eraser DSL コードを作成します
  4. Eraser API を呼び出す:diagramType: "cloud-architecture-diagram" を指定して /api/render/elements を使用します

手順

ユーザーが Azure インフラストラクチャの情報を提供した場合:

  1. ソースを解析する

    • ARM テンプレート:resources 配列を抽出し、種類(Microsoft.Compute/virtualMachines など)を特定します
    • CLI の出力:az コマンドの JSON 出力を解析します
    • 説明:Azure サービス名と関係を特定します
  2. Azure コンポーネントを特定する

    • ネットワーク:Virtual Networks(VNets)、サブネット、Network Security Groups、Load Balancers
    • コンピューティング:Virtual Machines、Virtual Machine Scale Sets、App Services、Functions
    • ストレージ:Storage Accounts、Blob Storage、File Shares
    • データベース:SQL Databases、Cosmos DB、Redis Cache
    • セキュリティ:Network Security Groups、Azure AD、Key Vault
    • 負荷分散:Application Gateway、Load Balancer、Traffic Manager
    • その他:Service Bus、Event Hubs、API Management
  3. 関係をマッピングする

    • サブネット内の VM
    • VNet 内のサブネット
    • Resource Groups 内の VNet
    • VM からアクセスされる Storage Accounts
    • アプリケーションからアクセスされるデータベース
    • サブネットにアタッチされた Network Security Groups
  4. Eraser DSL を生成する Azure リソースを Eraser DSL に変換します。

    • 重要:ラベルの書式ルール
      • ラベルは必ず 1 行に収めてください。ラベル属性の中で改行しないでください
      • ラベルはシンプルで読みやすくしてください。メタデータを詰め込みすぎず、ラベルを分けることを優先してください
      • DSL は適切に改行してください(ノード/グループごとに 1 行。ただし、ラベルは 1 行に収めてください)
      • CIDR ブロックやインスタンスタイプなどのメタデータを含める場合は、同じ引用符付きラベル文字列に含めてください:[label: "VNet 10.0.0.0/16"]

    例:

    myVNet [label: "VNet 10.0.0.0/16"] {
      subnet1 [label: "Subnet 1"] {
        myVM [icon: azure-vm, label: "Virtual Machine"]
        gateway [icon: azure-app-gateway]
      }
      subnet2 [label: "Subnet 2"] {
        database [icon: azure-sql]
      }
    }
    storage [icon: azure-storage]
    myVNet -> myVM
    myVM -> database
    
  5. HTTP リクエストを実行する

    重要:DSL を生成した後、この curl コマンドを必ず実行してください。API 呼び出しを行わずに DSL の生成だけで終了しないでください。

    重要:以下の X-Skill-Source ヘッダーの値は、必ず AI エージェント名に置き換えてください。

    • Claude(Anthropic)の場合は、claude を使用します
    • Cursor で実行している場合は、cursor を使用します
    • ChatGPT(OpenAI)の場合は、chatgpt を使用します
    • Gemini(Google)の場合は、gemini を使用します
    • それ以外の場合は、モデル/エージェント名を小文字で使用します
    curl -X POST https://app.eraser.io/api/render/elements \
      -H "Content-Type: application/json" \
      -H "X-Skill-Source: eraser-skill" \
      -H "Authorization: Bearer ${ERASER_API_KEY}" \
      -d '{
        "elements": [{
          "type": "diagram",
          "id": "diagram-1",
          "code": "<your generated DSL>",
          "diagramType": "cloud-architecture-diagram"
        }],
        "scale": 2,
        "theme": "${ERASER_THEME:-dark}",
        "background": true
      }'
    
  6. 分析中にソースを記録する

    図を生成するためにファイルやリソースを分析する際は、次の情報を記録します。

    • 内部ファイル:読み取ったファイルパスと、そこから抽出した情報を記録します(例:infra/main.bicep - VNet とサブネットの定義)
    • 外部参照:参照したドキュメント、例、URL を記録します(例:Azure アーキテクチャのベストプラクティスに関するドキュメント)
    • 注釈:各ソースが図にどのような情報をもたらしたかを記録します
  7. レスポンスを処理する

    重要:出力形式は最小限にする

    レスポンスには、明確な見出しを付けて次の要素を必ず含めてください。

    1. 図のプレビュー:見出しを付けて表示します

      ## Diagram
      ![{Title}]({imageUrl})
      

      API レスポンスの実際の imageUrl を使用してください。

    2. エディターリンク:次のヘッダーを表示します

      ## Eraser で開く
      [Eraser エディターでこの図を編集]({createEraserFileUrl})
      

      API レスポンスに含まれる実際の URL を使用してください。

    3. ソースセクション:分析したファイル/リソースの簡単な一覧(該当する場合)

      ## ソース
      - `path/to/file` - 抽出した内容
      
    4. 図のコードセクション:eraser 言語タグを付けたコードブロックに Eraser DSL を記載します

      ## 図のコード
      ```eraser
      {DSL code here}
      
    5. 詳細情報へのリンク:Eraser の詳細については、https://docs.eraser.io/docs/using-ai-agent-integrations をご覧ください。

    追加コンテンツに関するルール:

    • ユーザーが図のみを求めた場合は、上記の 5 つの要素以外は何も含めないでください
    • ユーザーが追加の内容を明示的に求めた場合(例:「アーキテクチャを説明して」「改善案を提案して」)は、その内容を追加してもかまいません
    • 概要、セキュリティに関する考慮事項、テストなど、依頼されていないセクションを追加しないでください

    既定の出力は短くしてください。図がすべてを物語ります。

Azure 固有のヒント

  • リソースグループ:リソースグループは論理コンテナーとして表示します
  • VNet をコンテナーとして表示:サブネットとリソースを含む VNet を必ず表示します
  • ネットワークセキュリティグループ:NSG のルールと関連付けを含めます
  • サブスクリプション:提示されている場合は、サブスクリプションのコンテキストを明記します
  • データフロー:トラフィックの流れを表示します(インターネット → Application Gateway → VM → SQL Database)
  • Azure アイコンを使用:説明文で Azure 固有のスタイルを指定します

例:複数の Azure サービスを含む ARM テンプレート

ユーザー入力
{
  "resources": [
    {
      "type": "Microsoft.Resources/resourceGroups",
      "name": "rg-main"
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "name": "myVNet",
      "properties": {
        "addressSpace": {
          "addressPrefixes": ["10.0.0.0/16"]
        },
        "subnets": [
          {
            "name": "subnet1",
            "properties": {
              "addressPrefix": "10.0.1.0/24"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines",
      "name": "myVM",
      "properties": {
        "hardwareProfile": {
          "vmSize": "Standard_B1s"
        }
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "name": "myAppService",
      "properties": {
        "serverFarmId": "/subscriptions/.../serverfarms/myPlan"
      }
    },
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "mystorageaccount"
    },
    {
      "type": "Microsoft.Sql/servers",
      "name": "mysqlserver",
      "properties": {
        "administratorLogin": "admin"
      }
    }
  ]
}
期待される動作
  1. ARM テンプレートを解析します。

    • リソースグループ:rg-main(コンテナー)
    • ネットワーク:サブネットを含む VNet
    • コンピューティング:VM、App Service
    • ストレージ:Storage Account
    • データベース:SQL Server
  2. さまざまな Azure サービスを示す DSL を生成します。

    resource-group [label: "Resource Group rg-main"] {
      myVNet [label: "VNet 10.0.0.0/16"] {
        subnet1 [label: "Subnet 1 10.0.1.0/24"] {
          myVM [icon: azure-vm, label: "VM Standard_B1s"]
        }
      }
      myAppService [icon: azure-app-service, label: "App Service"]
      mystorageaccount [icon: azure-storage, label: "Storage Account"]
      mysqlserver [icon: azure-sql, label: "SQL Server"]
    }
    
    myAppService -> mystorageaccount
    myVM -> mysqlserver
    

    重要:すべてのラベルテキストは、引用符内で必ず 1 行に収めてください。Azure 固有の設定:リソースグループをコンテナーとして表示し、適切な Azure アイコンを使用して、App Services、Storage Accounts、SQL データベースを含めてください。

  3. diagramType: "cloud-architecture-diagram" を指定して /api/render/elements を呼び出します

例:Azure CLI の出力

ユーザー入力
User runs: az vm list --output json
Provides JSON output
期待される動作
  1. JSON を解析して、次の情報を抽出します。

    • VM の名前、サイズ、状態
    • リソースグループ
    • ネットワークインターフェイス
    • ストレージアカウント
  2. 形式を整えて API を呼び出します

コメント