terraform-diagrams
Terraformコードからアーキテクチャ図を自動生成します。`.tf`ファイルがある場合や、Terraformインフラを可視化したいときに使用してください。
description の原文を見る
Generates architecture diagrams from Terraform code. Use when user has .tf files or asks to visualize Terraform infrastructure.
SKILL.md 本文
Terraform ダイアグラムジェネレーター
Terraform の .tf ファイルから直接アーキテクチャダイアグラムを生成します。Terraform コードの解析とインフラストラクチャリソース、モジュール、およびそれらの関係の可視化に特化しています。
使用する場合
このスキルを有効にする条件:
- ユーザーが Terraform ファイル (
.tf、.tfvars) を持っていてインフラストラクチャを可視化したい - ユーザーが「Terraform をダイアグラムにして」または「このインフラストラクチャを可視化して」と尋ねる
- ユーザーが Terraform、HCL、またはインフラストラクチャ・アズ・コードを言及している
- ユーザーが 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 を生成した後、このコマンドを実行する必要があります。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 セクション: 分析されたファイル/リソースの簡潔なリスト (該当する場合)
## Sources - `path/to/file` - What was extracted -
ダイアグラムコードセクション:
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 つの要素以外は何も含めない
- ユーザーがさらに多くを明確に要求した場合 (例: 「アーキテクチャを説明して」、「改善を提案して」)、その追加の内容を含めることができます
- Overview、Security Considerations、Testing などのリクエストされていないセクションを追加しない
デフォルト出力は短くすべき。ダイアグラム画像がそれ自体を語ります。
-
-
複数プロバイダーを処理する
- 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 スタイル
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- eraserlabs
- リポジトリ
- eraserlabs/eraser-io
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/eraserlabs/eraser-io / ライセンス: MIT
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。