← 構成図ジェネレーター

さくらのクラウド構成図ジェネレーター MVP 0.2.0

簡易YAMLからdraw.io、Mermaid、SVG、PNGを生成できます。公開Web版の入力解析・匿名化・描画・PNG変換はブラウザ内だけで行います。入力や生成した図をアップロードするAPI、解析用の外部サービス、アクセス解析、永続保存はありません。

チャットから図を生成する

「チャットで作成」に日本語の構成説明を入力し、「送信して生成」を押します。初回は新規作成、成功後は現在の構成の変更に切り替わります。

サーバー2台とスイッチ1台を作って、サーバーをスイッチにつないで
DBを1台追加してスイッチにつないで
サーバーのメモリを8GiB、CPUを4コアにして
取り消す

Enterで送信、Shift+Enterで改行。日本語変換中のEnterでは送信しません。YAMLタブで解釈結果を確認できます。

外部AIは使わず、対応する構成表現をブラウザ内で解釈します。自由な会話全般、代名詞、否定・除外、複雑な条件には未対応です。曖昧な指示では図を変更せず、確認を返します。GBはGiBの提案値として扱ったことを返答に表示します。

直前10回の変更を「取り消す」で戻せます。YAMLの手編集・ファイル読込は取り消し履歴をリセットします。会話はページ内で最大40メッセージ保持し、永続保存しません。「履歴を消す」でも図は保持します。

共通29件+チャット22件の51テストと、ブラウザでの追加・取り消し・不明指示の保留を確認しています。

YAMLで使う

  1. ジェネレーターを開き、「YAMLを編集」タブでサンプルを選んで「読み込む」。
  2. YAMLを編集し、「構成図を生成」を押す。編集後は古い出力が無効になります。
  3. 顧客向けの匿名化とシンプル/詳細表示を選ぶ。
  4. draw.io / Mermaid / SVG / PNGを保存する。必要ならGraph JSONも保存する。

「ファイルを開く」はローカルファイルの読み取りです。サーバーへのアップロードはしません。「YAMLを保存」は入力をそのまま保存するので匿名化しません。未保存の編集がある場合はページを閉じる前に保存してください。サイトのホスティング事業者には通常のページアクセスは届きますが、入力内容を送信するコードはありません。

YAMLの最小例

version: "1"
title: Webシステムの提案
resources:
  - key: web
    type: server
    label: Webサーバー
    zone: 提案ゾーンA
    attributes: {cores: 2, memoryGiB: 4}
  - key: disk
    type: disk
    label: ディスク
    zone: 提案ゾーンA
    attributes: {diskGiB: 100}
links:
  - {from: web, to: disk, relation: attached_to}

keyは英字で始まる英数字・ハイフン・アンダースコア64文字以内。重複不可。typeはサンプルの短縮名、公式Terraform登録名、カタログの正規名が使えます。カタログ未登録でも汎用図形と警告を残して生成します。

項目 指定
version 1または"1"。他の版は拒否
title 任意の図タイトル。顧客向けでは定型タイトルへ置換
resources 1~150件。key/type必須、label/zone/group/attributesは任意
links 最大300件。from/toはresource key、relationは任意
groups 最大40件。key/label必須、kind、parentまたはzoneを任意指定
attributes cores、memoryGiB、diskGiB、capacityGiBは正の数値。ip、hostname、planは社内用の詳細属性

任意属性は既定で取り込まず警告します。password/token/private_key/access_keyなどは社内用でも取り込みません。未知値はnullとしてGraphに保持します。任意の変数展開やコード実行はありません。zoneは自由な提案表記で、実在ゾーンの確認は行いません。

グループと関係

groups:
  - key: private
    label: VPCルータ配下
    kind: vpc-router
    zone: 提案ゾーンA
resources:
  - {key: web, type: server, group: private}

resourceにzoneがなくても親groupの提案ゾーンを継承します。parentを使えばグループを入れ子にできます。parentとzoneの同時指定、循環する親、存在しない参照、resourceとgroupのzone不一致はエラーです。一つのresourceは一つの表示groupに所属します。実際のVPC到達性は検証しません。

関係はconnected_to(接続)、attached_to(ディスク)、backend(backend)、routes_to(ルート)、redundant_with(冗長化)、depends_on(依存)など。未知の関係は「関連」として描き警告します。evidenceはexplicit / inferred / unresolved、planeはnetwork / storage / dependency / logicalを指定できます。推定・依存・冗長化は破線、方向性がある関係だけ矢印を付けます。

匿名化と出力

顧客向けが既定です。resource/group/zoneのラベルと内部IDを置換し、IP/hostname/plan/任意属性と入力来歴を除去。数値のCPU・メモリ・容量だけを残します。未知型の名称も定型化します。元の入力は変更しません。描画前に処理するため、SVGやdraw.ioの隠れた属性、Graph JSONにも除去を適用します。

匿名化を外すと社内用になり、名称とゾーンを保持します。詳細版では許可されたIP/hostname/planも出力します。提出前に設定と図を確認してください。

出力 用途と制限
draw.io 編集可能なmxGraph XML。zone/groupの実際の親子関係も保持
Mermaid flowchart TBテキスト。接続意味とgroupを保持。SVGと同じ座標配置を保証しない
SVG 文字・図形を保持するベクター。任意script、外部画像、foreignObjectを生成しない
PNG 白背景のラスタ画像。WebはローカルCanvas、CLIはPillow。1倍/2倍、1,600万画素まで
Graph JSON 既存のJSON Schema 1.0.0へ適合する正規化モデル。匿名化設定を適用

PNGの日本語はローカルフォントに依存します。長いラベルは図上で省略される場合があり、警告とGraphの元値を確認してください。ノードの重なりを防ぐ決定的配置ですが、大きな図や密な接続では線の交差・線とノードの重なりを最適化しません。図を分割して使ってください。

ローカルPython CLI

必要環境:Python 3.10以降、Node.js 20以降、Pillow、日本語TTF/OTF/TTCフォント。engine.cjsに実行依存を同梱しているため、生成だけならnpm installは不要です。初回の依存導入後は実行中の外部通信なしで生成できます。

python -m pip install -r requirements.txt
python .\構成図.py ".\サンプル\単体サーバー.yaml" --out ".\生成結果" --detail

SVG/draw.io/mmd/PNG/Graph JSON/診断JSONの6ファイルを生成します。社内用は--internal、PNG倍率は--scale 1または--scale 2、フォントは--font "C:\Windows\Fonts\meiryo.ttc"で指定。既存ファイルを上書きする場合だけ--overwriteを付けます。入力不正やPNG変換失敗の段階では出力を書き込みません。書込み段階のディスク障害は複数ファイルの完全なtransactionを保証しません。

ローカルWeb版

ZIPを展開したディレクトリで実行してください。

python -m http.server 8765 --bind 127.0.0.1 --directory web

ブラウザでhttp://127.0.0.1:8765/を開きます。Workerを使うため、index.htmlのダブルクリックではなくローカルHTTPサーバーを利用してください。入力はメモリ内のみで、ブラウザを閉じると失われます。

構造・設計判断

core.mjsのCollector → 正規化Graph → Presentation(匿名化)→ Layout → Rendererを分離。ブラウザWorkerとPython CLIが同じ生成エンジンを使用し、重複実装を避けました。PythonはCLIとPNGラスタライズを担当し、ブラウザ描画・共通エンジンはJavaScriptです。

ADR-MVP-001:MVPはPython CLI+JavaScript共通エンジンを採用。純Pythonの別実装やGo/WASMは見送り。ブラウザ内での利用、オフライン生成、同一Graph契約を小さく実現するため。API Collectorを拡張する段階でGo SDKとの接続を再検討します。

ADR-MVP-002:JSON Schema検証コードはビルド時に事前コンパイル。実行時のeval、unsafe-eval、リモートschema取得は不要。公開CSPはconnect-src 'none'を維持します。

ADR-MVP-003:型一覧は固定commitのTerraform v2 ResourcesMapから生成し、意味・表示・scopeの対応だけをcatalog-overlay.jsonへ分離。45種の登録名を抽出し11種の表示対応を確認。これはprovider schemaの属性抽出・最新サービス全網羅・API対応確認の代替ではありません。未対応/未確認型は汎用表示します。

再ビルドとカタログ更新

npm ci
npm run build
npm test
python CLI検証.py

ビルドはwebのJSとengine.cjs、事前コンパイル検証器を再生成します。golden/はレビュー済みの4構成の期待値で、通常テスト時には更新しません。golden生成.mjsはベースラインを意図的に変更するときだけ使います。カタログ更新はpython カタログ生成.pyで候補生成し、差分を人がレビューしてからbuildしてください。取得URLはcatalog-source.jsonで管理します。自動PR・日次更新は未実装です。

設計書、入力schema、Graph schema、出典・取得日・schema版・commit・digestを含むruntime catalogも同梱しています。依存ライセンスはTHIRD_PARTY_NOTICES.txtに収録。

今回の範囲と未実装

実装済み:任意YAMLの解析、契約・参照・循環検証、正規化Graph、入れ子group、顧客向け匿名化、5サンプル、4形式保存、未知型・鮮度警告、ローカルCLI。

未実装:API/usacloud/Terraformの実環境収集、正式provider schemaの属性抽出、料金/実在zoneの検証、公式アイコン、更新PRパイプライン、疎通・到達性検証。今回の図はすべて提案図としてフッターに明示します。

検証:共通エンジンとチャット計51テスト、4構成のgolden、CLI実ファイル検査、Mermaid 11.15.0による5構成の構文検査、ブラウザの実PNG保存・匿名化・不正入力・CSP動作を確認しています。