bicep-diagrams について
bicep-diagramsは、Azure Bicepファイルからクラウドアーキテクチャ図を作るスキルです。リソースと関係を解析してEraser APIで描画し、インフラの確認や記録に使えます。
主な機能
- 01Bicepのリソースとモジュールを解析
- 02依存関係とリソース間の関係を整理
- 03Eraser DSLを生成
- 04Eraser APIで図を描画
活用シーン
- 01BicepファイルからAzure構成を可視化
- 02モジュール境界とリソース依存関係を表示
- 03ネットワーク、コンピューティング、ストレージ構成を記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ eraserlabs/ eraser-io --skill bicep-diagramsインストール後、Claude Code で/bicep-diagramsを入力して読み込まれたか確認します。
詳細
Bicep 図生成ツール
Azure Bicep ファイルから直接、アーキテクチャ図を生成します。Bicep は、Azure リソースを宣言的にデプロイするためのドメイン固有言語(DSL)です。
使用する場面
次の場合にこのスキルを有効にします。
- ユーザーが Bicep ファイル(
.bicep)を持っていて、インフラストラクチャを可視化したい場合 - ユーザーが「Bicep の図を作成して」や「この Bicep インフラストラクチャを可視化して」と依頼した場合
- ユーザーが Bicep または Azure Bicep に言及した場合
- ユーザーが Bicep でデプロイしたリソースのアーキテクチャを確認したい場合
仕組み
このスキルは、Bicep コードを解析し、Eraser API を直接呼び出すことで、Bicep に特化した図を生成します。
- Bicep ファイルを解析:リソース宣言、モジュール、パラメーター、出力を特定します
- 関係を抽出:依存関係、リソース参照、モジュール階層を対応付けます
- Eraser DSL を生成:Bicep リソースから Eraser DSL コードを作成します
- Eraser API を呼び出し:
diagramType: "cloud-architecture-diagram"を指定して/api/render/elementsを使用します
手順
ユーザーが Bicep コードを提供した場合:
-
Bicep を解析する
- すべての
resource宣言(Microsoft.Compute/virtualMachines など)を特定します module宣言とその構成を抽出しますparamとoutputの定義を確認しますvar変数とその使用箇所を特定します
- すべての
-
関係をマッピングする
- リソースの依存関係(
dependsOnや暗黙的な依存関係など)を追跡します - リソースを種類別(コンピューティング、ネットワーク、ストレージなど)にグループ化します
- VNet がサブネットとリソースを格納するコンテナーであることを特定します
- ネットワークセキュリティグループ、Key Vault、その他のセキュリティリソースを確認します
- リソースの依存関係(
-
Eraser DSL を生成する Bicep リソースを Eraser DSL に変換します:
- 重要:ラベルの書式ルール
- ラベルは必ず1行で記述してください。ラベル属性内で改行してはいけません
- ラベルはシンプルで読みやすくしてください。メタデータを詰め込みすぎず、別々のラベルにすることを推奨します
- DSL は適切に改行して書式を整えてください(ノード/グループは1行ずつ記述し、ラベルは1行のままにします)
- CIDR ブロックや VM サイズなどのメタデータを含める場合は、同じ引用符付きのラベル文字列に含めてください:
[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 - 重要:ラベルの書式ルール
-
HTTP リクエストを送信する
重要:DSL を生成した後、必ずこの curl コマンドを実行してください。DSL を生成しただけで API 呼び出しをせずに終了してはいけません。
重要:以下の
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 }' - Claude(Anthropic)の場合は、
-
解析中にソースを記録する
Bicep ファイルとリソースを解析して図を生成する際、以下を記録します:
- 内部ファイル:読み込んだ各 Bicep ファイルのパスと、抽出したリソースを記録します(例:
infra/main.bicep- VNet とサブネットの定義、infra/sql.bicep- SQL Database の構成) - 外部参照:参照したドキュメント、例、URL を記録します(例:Azure Bicep のドキュメント、Azure アーキテクチャのベストプラクティス)
- 注釈:各ソースが図にどのような情報を提供したかを記録します
- 内部ファイル:読み込んだ各 Bicep ファイルのパスと、抽出したリソースを記録します(例:
-
レスポンスを処理する
重要:出力は最小限の形式にする
レスポンスには、明確な見出しとともに、必ず以下の要素を含めてください:
-
図のプレビュー:見出しを付けて表示します
## Diagram API レスポンスから取得した実際の
imageUrlを使用します。 -
エディターへのリンク:見出しを付けて表示します
## Open in Eraser [Edit this diagram in the Eraser editor]({createEraserFileUrl})API レスポンスから取得した実際の URL を使用します。
-
ソースのセクション:解析したファイル/リソースの簡潔な一覧(該当する場合)
## Sources - `path/to/file` - 抽出した内容 -
図のコードのセクション:
eraser言語タグを付けたコードブロックに Eraser DSL を記述します## Diagram Code ```eraser {DSL code here} -
詳細情報へのリンク:
You can learn more about Eraser at https://docs.eraser.io/docs/using-ai-agent-integrations
追加のコンテンツに関するルール:
- ユーザーが図だけを求めた場合は、上記の5つの要素以外は何も含めないでください
- ユーザーが追加の内容を明示的に求めた場合(例:「アーキテクチャを説明して」「改善案を提案して」)は、その内容を追加してもかまいません
- 概要、セキュリティ上の考慮事項、テストなど、求められていないセクションを追加してはいけません
デフォルトの出力は短くしてください。図を見れば内容が分かります。
-
-
モジュールを処理する
- モジュールを使用している場合は、モジュールの境界を示します
- モジュールのパラメーターと出力を含めます
- モジュールとメインリソースの接続を示します
Bicep 固有のヒント
- リソースグループを表示する:Bicep のデプロイ先はリソースグループです
- VNet をコンテナーとして表示する:サブネットとリソースを含む VNet を表示します
- 依存関係を含める:
dependsOnの関係を表示します - モジュール構造:モジュールを使用している場合は、その境界を表示します
- パラメーター:リソース構成に影響する主要なパラメーターを記載します
- Azure アイコンを使用する:Azure 固有のスタイルを指定します
例:パラメーターとモジュールを使った Bicep
ユーザー入力
@description('The name of the Virtual Network')
param vnetName string = 'myVNet'
@description('The address prefix for the VNet')
param vnetAddressPrefix string = '10.0.0.0/16'
@description('The address prefix for the subnet')
param subnetAddressPrefix string = '10.0.1.0/24'
@description('VM size')
param vmSize string = 'Standard_B1s'
// Main VNet resource
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-05-01' = {
name: vnetName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [vnetAddressPrefix]
}
subnets: [
{
name: 'subnet1'
properties: {
addressPrefix: subnetAddressPrefix
}
}
]
}
}
// VM resource with dependsOn
resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-11-01' = {
name: 'myVM'
location: resourceGroup().location
properties: {
hardwareProfile: {
vmSize: vmSize
}
}
dependsOn: [virtualNetwork]
}
// Module usage
module storageModule './modules/storage.bicep' = {
name: 'storage'
params: {
location: resourceGroup().location
}
}
期待される動作
-
Bicep を解析します:
- パラメーター:vnetName、vnetAddressPrefix、subnetAddressPrefix、vmSize
- リソース:サブネットを含む VNet、dependsOn の関係を持つ VM
- モジュール:パラメーターを持つストレージモジュール
-
Bicep 固有の機能を示す DSL を生成します:
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"] } } storage-module [label: "Storage Module"] { storage-account [icon: azure-storage] } myVNet -> myVM重要:すべてのラベルテキストは、引用符の中で1行に収める必要があります。Bicep 固有の要件:モジュールをコンテナーとして表示し、
dependsOnの関係を含め、リソース構成でのパラメーターの使用を記載します。 -
diagramType: "cloud-architecture-diagram"を指定して/api/render/elementsを呼び出します -
diagramType: "cloud-architecture-diagram"を指定して/api/render/elementsを呼び出します
結果
ユーザーは次の内容を示す図を受け取ります:
- コンテナーとしての VNet
- VNet 内にネストされたサブネット
- サブネット内の VM
- 表示された依存関係
- 適切な Azure スタイル