figgen — YAMLから説明図を出す
スライドや報告に貼る説明図を、YAMLの仕様1枚から作る。文字は画像として焼かず、 レイアウトはHTML/CSSで持ち、描画だけを Chrome に任せる。
pip install figgen
figgen 図.yaml # 同じ場所に 図.png と 図.html を出す
figgen 図.yaml --html # HTMLだけ(速い。中身の確認用)
figgen fig*.yaml # まとめて
clone しただけで動かすなら python draw.py 図.yaml(中身は同じ)。
必要なもの: Python 3.9以上 と Chrome か Edge。npm もビルドも要らない。
Chrome は描画にだけ使う(pip では入らないので、無ければ入れる)。
場所を変えたいときは環境変数 FIGGEN_CHROME。
python doctor.py # 足りないものを挙げ、見本を1枚実際に描いて確かめる
「入っているか」を数えるだけの点検はしない。 最後に必ず1枚描かせて、
figgen は使える。 が出れば本当に使える。
何が出るか
担当ごとのレーンに分けた流れ。 レーンの並び順は書いた順で、
レーンをまたぐ矢印は直角に折れる。戻る矢印(loops)も自分で指定する。
層に並べた箱と、その継ぎ目。 箱にも辺にもラベルと数字を載せられるので、 「どこが太いか」をあとから重ねられる。
強調する矢印と、下を迂回する矢印。 どの矢印を太くするか、 どこからどこへ近道を引くかを、こちらが決める。
仕様はそれぞれ examples/ にある。全13ブロックを1枚に並べた見本は
examples/全ブロック.yaml。
なぜ作ったか
画像生成モデルは日本語の文字を崩す。一方 mermaid・PlantUML・Graphviz 系は文字は正確だが、 どこに何を置くかを自分で決められない(配置エンジンが勝手に置く)。既存のYAML→図のOSSを 一通り見たが(drawthe.net / diagrams-as-code / yml2dot / infrastructure-diagrams 等)、 どれもインフラ構成図の生成が目的で、Graphviz にレイアウトを任せる作りだった。
説明図でこちらが決めたいのは、まさにその配置のほう。だから配置はCSSグリッドで持ち、 図の中身はYAMLで持ち、描画をChromeに任せる薄い道具にした。
- 文字が崩れない。テキストのまま置くので、解像度も自由(
scale) - 直せる。1行直して再実行すれば1秒で出る。画像生成のように全部描き直しにならない
- 数字が嘘にならない。散布図などはデータのJSONから描くので、手で置いた点にならない
- 見た目が揃う。色・余白・字は
theme.cssの1枚に集約してある
仕様(YAML)の書き方
title: 図の見出し
subtitle: 小見出し
footer: 左下に出る文字
source: 右下に出る文字(出典)
width: 1600 # 内部の設計幅。既定 1600
scale: 2 # PNGの倍率。既定 2(=3200px幅)
height: 900 # 書くと固定キャンバス。省くと内容の高さに合わせて切る
accent: blue # blue | orange
blocks:
- type: ...
本文で使える記法は3つだけ。**太字** / `コード` / [[アクセント色]]。改行はそのまま改行になる。
Markdownを全部通すと図の中で崩れるので、意図的にこれだけにしてある。
ブロック一覧
| type | 何を出すか |
|---|---|
banner |
全幅の帯。転回点や結論を1行で |
steps |
番号付きの横フロー |
chain |
横並びの連鎖。矢印つき。強調と迂回を指定できる |
columns |
N列のパネル。2案の比較に |
callout |
強調の1枚 |
metrics |
大きな数字の並び |
table |
表 |
note |
小さい注記 |
swimlane |
担当(レーン)を行、作業の順序を列に置く |
boxgraph |
層に並べた箱と、箱をつなぐ辺。箱にも辺にもラベルと数字が載る |
graph_pair |
2つのグラフ(ノード+辺)を並べる |
scatter_pair |
同じ点集合を2通りに囲う |
spacer |
余白 |
各ブロックのキー・記法・落とし穴は
src/figgen/BLOCKS.md にまとまっている。
ここが YAML 方言の正本で、MCP の figgen_blocks もこれを返す
(同じことを2か所に書くと必ず片方が古くなるため、一本にしてある)。
AIエージェントから使う(MCP)
figgen の弱点は「独自YAML方言を13ブロックぶん覚えないと書けない」ことだった。 MCP 越しに使うなら覚えるのはエージェントなので、その弱点が消える。 人は「こういう図が欲しい」と言うだけでよくなる。
pip install "figgen[mcp]" # MCPサーバーは Python 3.10 以上
Claude Code / Claude Desktop などの設定に足す:
{
"mcpServers": {
"figgen": { "command": "figgen-mcp" }
}
}
道具は2つだけ。
| 道具 | 何をするか |
|---|---|
figgen_blocks |
YAML方言(全13ブロックのキー・記法・落とし穴)を返す。図を書く前に呼ぶ |
figgen_render |
YAMLの仕様を PNG にする。仕様は .yaml として隣に残る |
figgen_render は PNG と一緒に仕様の .yaml を残す。figgen は「YAMLが正本、
PNGは生成物」という道具なので、直すときは YAML を1行変えて呼び直す。
出た PNG は必ず開いて見ること。 CSS は検証しないので、はみ出し・重なりは 見ないと分からない。縦のあふれは警告が出るが、横のあふれは黙って出る。
色
theme.css の先頭にまとまっている。カテゴリ色は blue → orange の順で固定で、順番を入れ替えない。
値は dataviz の検証済みパレットで、validate_palette.js の6項目(明度帯・彩度下限・色覚特性下での分離・
通常視での分離・地色とのコントラスト)を全部通したもの。色を足すときは同じ検証を通すこと。
制約・分かっている穴
- 横にあふれても警告しない。 縦のあふれだけは検知して警告する(
heightを省いたとき) - 1枚に詰めすぎると読めなくなる。 ブロック7つを超えたら2枚に割ることを考える
- 矢印は隣どうしと
bypassだけ。任意のノード間を結ぶ線は引けない。要るようになったら足す - フォントは環境依存(游ゴシック→Noto→Meiryo の順)。他のPCで出すと字幅が変わる
- ダークモードは持っていない。スライドに貼る前提で明るい地色だけ
置き場所の約束
図の仕様(.yaml)は、その図を使うプロジェクトの側に置く。 この道具の中には置かない。
仕様はプロジェクトの資料であって、道具の一部ではないため。
your-project/
docs/figures/アーキテクチャ.yaml ← 仕様はここ。図と一緒に版が進む
docs/figures/アーキテクチャ.png ← 生成物
生成された .html と .png は生成物なので手で編集しない。直すのは .yaml か theme.css。
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file figgen-0.1.0.tar.gz.
File metadata
- Download URL: figgen-0.1.0.tar.gz
- Upload date:
- Size: 34.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bee152f7b15392bb8a839199e3da036c30e40798e96c90d10f7b95cdb5355b65
|
|
| MD5 |
07cdfab1f838cce8c8c6e3425215854e
|
|
| BLAKE2b-256 |
a9f69951363dab76aed588a64fd01299e918529ff955b50193342590027756c4
|
File details
Details for the file figgen-0.1.0-py3-none-any.whl.
File metadata
- Download URL: figgen-0.1.0-py3-none-any.whl
- Upload date:
- Size: 34.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f86fb70d31f495db61045c3f17630f0c25bfaa1f0efc9be9960d17374f608ce
|
|
| MD5 |
3fb3b0680fffc192aa45981ad6eefaf3
|
|
| BLAKE2b-256 |
633b6aa87e562ba5decb20631fd6ef7a917bec45cca5c7d937426a39cf8086b6
|