terraform-diagrams について
terraform-diagrams は、Terraform のインフラコードをクラウドアーキテクチャ図に変換するスキルです。リソース、モジュール、依存関係を解析し、Eraser DSL を生成して Eraser API で描画します。
主な機能
- 01リソース、モジュール、データソースの解析
- 02リソース間の依存関係と接続の抽出
- 03Eraser DSL の生成
- 04Eraser API による図の描画
- 05クラウドプロバイダー別のリソース整理
活用シーン
- 01Terraform 設定からアーキテクチャ図を作成
- 02モジュールとリソース間の依存関係を確認
- 03複数プロバイダーにまたがるインフラを図示
- 04ネットワークとセキュリティリソースを図に含める
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ eraserlabs/ eraser-io --skill terraform-diagramsインストール後、Claude Code で/terraform-diagramsを入力して読み込まれたか確認します。
詳細
Terraform 図生成ツール
Terraform の .tf ファイルから、アーキテクチャ図を直接生成します。Terraform コードの解析と、インフラストラクチャのリソース、モジュール、およびそれらの関係の可視化に特化しています。
使用する場面
次のような場合に、このスキルを有効にしてください。
- ユーザーが Terraform ファイル(
.tf、.tfvars)を持っていて、インフラストラクチャを可視化したい場合 - ユーザーが「Terraform を図にして」や「このインフラストラクチャを可視化して」と依頼した場合
- ユーザーが Terraform、HCL、または Infrastructure as Code に言及した場合
- ユーザーが Terraform で管理しているリソースのアーキテクチャを確認したい場合
仕組み
このスキルは Terraform コードを解析し、Eraser API を直接呼び出すことで、Terraform 専用の図を生成します。
- Terraform ファイルを解析:リソース、モジュール、データソース、変数を特定します
- 関係を抽出:依存関係、リソース間の接続、モジュール階層をマッピングします
- Eraser DSL を生成:Terraform リソースから Eraser DSL コードを作成します
- Eraser API を呼び出す:
diagramType: "cloud-architecture-diagram"を指定して/api/render/elementsを使用します
手順
ユーザーが Terraform コードを提供した場合:
-
Terraform を解析する
- すべての
resourceブロック(AWS、Azure、GCP など)を特定します moduleブロックとその設定を抽出しますdataソースとその依存関係を記録しますvariableとoutputの定義を特定します
- すべての
-
関係をマッピングする
- リソースの依存関係を追跡します(例:
subnet_id = aws_subnet.public.id) - プロバイダーごとにリソースをグループ化します(AWS、Azure、GCP)
- 他のリソースを格納するコンテナーとして VPC/VNet を特定します
- セキュリティグループ、IAM ロール、ネットワークルールを記録します
- リソースの依存関係を追跡します(例:
-
Eraser DSL を生成する Terraform リソースを Eraser DSL に変換します:
- 重要:ラベルの書式ルール
- ラベルは必ず 1 行に収めます。ラベル属性内で改行しないでください
- ラベルはシンプルで読みやすく保ちます。メタデータを詰め込みすぎるより、ラベルを分けることを優先します
- DSL は適切に改行します(ノード/グループごとに 1 行とし、ラベルは 1 行に収めます)
- CIDR ブロックやインスタンスタイプなどのメタデータを含める場合は、同じ引用符付きラベル文字列に含めます:
[label: "VPC 10.0.0.0/16"]
例:
main-vpc [label: "VPC 10.0.0.0/16"] { public-subnet [label: "Public Subnet 10.0.1.0/24"] { web-server [icon: aws-ec2, label: "Web Server t3.micro"] load-balancer [icon: aws-elb] } private-subnet [label: "Private Subnet"] { database [icon: aws-rds] } } load-balancer -> web-server web-server -> database - 重要:ラベルの書式ルール
-
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 }' - Claude(Anthropic)の場合は、
-
解析中にソースを記録する
Terraform ファイルとリソースを解析して図を生成する際は、以下を記録します:
- 内部ファイル:読み取った各 Terraform ファイルのパスと、抽出したリソースを記録します(例:
infra/main.tf- VPC とサブネットの定義、infra/rds.tf- データベースの設定) - 外部参照:参照したドキュメント、例、URL を記録します(例:Terraform AWS プロバイダーのドキュメント、AWS アーキテクチャのベストプラクティス)
- 注釈:各ソースについて、図にどのような情報を反映したかを記録します
- 内部ファイル:読み取った各 Terraform ファイルのパスと、抽出したリソースを記録します(例:
-
レスポンスを処理する
重要:最小限の出力形式
レスポンスには、明確な見出しを付けて以下の要素を必ず含めてください:
-
図のプレビュー:見出しを付けて表示します
## 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 コード} -
詳細情報へのリンク:
Eraser について詳しくは、https://docs.eraser.io/docs/using-ai-agent-integrations をご覧ください
その他のコンテンツに関するルール:
- ユーザーが図のみを求めた場合は、上記の 5 要素以外を含めないでください
- ユーザーが追加情報(例:「アーキテクチャを説明して」「改善案を提案して」)を明示的に求めた場合は、その内容を追加してもかまいません
- 概要、セキュリティ上の考慮事項、テストなど、求められていないセクションを追加しないでください
デフォルトの出力は短くしてください。図自体が説明を担います。
-
-
複数のプロバイダーを処理する
- Terraform で複数のプロバイダーを使用している場合は、プロバイダーごとにグループ化します
- AWS、Azure、GCP のリソースごとにセクションを分けます
- 該当する場合は、プロバイダー間の接続を示します
Terraform 固有のヒント
- モジュールごとにグループ化:モジュールを使用している場合は、モジュールの境界を示します
- VPC/VNet をコンテナーとして表示:サブネットやリソースが視覚的にその中に収まるようにします
- データフローを含める:リソースの接続方法を示します(例:ALB → EC2 → RDS)
- セキュリティを強調:セキュリティグループ、IAM ロール、ネットワーク ACL を含めます
- リソースタイプを表示:プロバイダー固有のアイコン(AWS、Azure、GCP)を使用します
- CIDR ブロックを含める:VPC とサブネットのネットワークアドレスを表示します
例:マルチプロバイダーの Terraform
ユーザー入力
# AWS Resources
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
}
resource "aws_instance" "web" {
subnet_id = aws_subnet.public.id
instance_type = "t3.micro"
}
# Azure Resources (multi-provider)
resource "azurerm_resource_group" "main" {
name = "rg-main"
location = "East US"
}
resource "azurerm_virtual_network" "main" {
name = "vnet-main"
resource_group_name = azurerm_resource_group.main.name
address_space = ["10.1.0.0/16"]
}
# Module usage
module "database" {
source = "./modules/rds"
vpc_id = aws_vpc.main.id
}
期待される動作
-
Terraform を解析します:
- AWS:VPC、サブネット、EC2 インスタンス
- Azure:リソースグループ、VNet(マルチプロバイダー構成)
- モジュール:VPC に依存するデータベースモジュール
-
マルチプロバイダーおよびモジュール構造を示す DSL を生成します:
# AWS Resources aws-vpc [label: "AWS VPC 10.0.0.0/16"] { aws-subnet [label: "Public Subnet 10.0.1.0/24"] { web-server [icon: aws-ec2, label: "Web Server t3.micro"] } } # Azure Resources resource-group [label: "Resource Group rg-main"] { azure-vnet [label: "Azure VNet 10.1.0.0/16"] } # Module database-module [label: "Database Module"] { rds-instance [icon: aws-rds] } aws-vpc -> database-module重要:すべてのラベルテキストは、引用符内の1行に収める必要があります。Terraform 固有の要件:モジュールをコンテナーとして表示し、プロバイダーごとにグループ化して、リソースの依存関係を含めます。
-
diagramType: "cloud-architecture-diagram"を指定して/api/render/elementsを呼び出します
結果
ユーザーには次の内容を示す図が表示されます:
- コンテナーとしての VPC
- VPC 内にネストされたパブリックサブネット
- サブネット内の EC2 インスタンス
- 適切な AWS スタイル