1仕組みと動作原理
9種類のダイアグラムで単一の「デザインシステム」を共有:セマンティックカラーパレット(技術スタックではなくコンポーネント種別で色を割当)、フォントサイズ階層、ダークベース+グリッド背景、3種の矢印マーカーにより、レイアウト前にシステムを定義。
| Primary | `rgba(8, 51, 68, 0.4)` | `#22d3ee` (cyan) | Frontend, user-facing, inputs |
レイアウトでは「固定描画順序+不透明マスク矩形」によりSVGの半透明重なり問題を解決:矢印を先に描き、同位置に不透明な塗りつぶし矩形を重ねて矢印を隠し、最後に半透明コンポーネント枠を配置。
The opaque masking rect trick is essential — semi-transparent component fills will show arrows underneath without it:
主観的な美観判断を排除し、そのまま適用できる間隔・境界の厳格な数値ルールを採用:コンポーネント高さ50〜70px、垂直間隔≥40px、水平間隔≥30px、矢印ラベルは境界から10px、viewBox周囲に30pxの余白。
- **Minimum gap between components:** 40px vertical, 30px horizontal
各図型ごとにレイアウトアルゴリズムの参考資料を用意し、描画前に確認:階層化、列・行の割り当て、列間隔、障害物回避のL字ルーティング、バスライン配置などに明確な手法が存在。
1. **Identify layers:** Group components by role (clients, gateways, services, data, infrastructure)
出力は単一ファイルで自己完結したSVG:固定の幅・高さを持たずviewBoxのみを指定し、スタイルとdefsはすべてインライン化してスケーラブルな埋め込みを容易化。
2. Set `viewBox` to fit all content with 30px padding; do NOT set fixed `width`/`height` attributes (let the SVG scale responsively)
SVGを@2x PNGへ変換するスクリプトを同梱:viewBoxを解析して寸法を算出し、sharpでdensity=72*scaleにてレンダリングおよびリサイズを行ってPNGを出力。
await sharp(svg, { density: 72 * opts.scale })
中国語組版への特別対応:文字幅が広い中国語文字を考慮し、フォントファミリーの切り替えとボックス幅の拡張を行うことでテキストのあふれを防止。
**Chinese text support:** When labels contain Chinese characters, use `font-family: 'JetBrains Mono', 'Noto Sans SC', 'PingFang SC', sans-serif'` and increase box widths — CJK characters are wider
明確な保存ルール:入力がファイルの場合は{inputFileDir}/diagram/、それ以外は{projectDir}/diagram/{topic-slug}/に保存し、ディレクトリがなければ自動作成。
**Save location:** If the input is a file, save to `{inputFileDir}/diagram/`.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| package | sharp(scripts/main.ts 动态 import,用于 SVG→PNG 光栅化) |
| cli | bun / npx(${BUN_X} 运行时) |
| network | Google Fonts(写入产物 SVG 的 @import,由查看端加载;非脚本外发) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプト・コマンドの実行: scripts/main.ts(bunで実行、sharpを用いてローカルSVGファイルをPNGにラスタライズ)
- 本地工作目录: ファイルの読み書きおよび成果物出力: <input>@2x.png(または -o 指定パス)を出力、必要に応じて diagram/ ディレクトリを作成
5二重目の独立検証
- [ok] 脚本仅本地行为 — main.ts 全文无 fetch/http/spawn/process.env;readFileSync(SVG) → sharp(density) → resize → png → toFile,另 mkdirSync 建目录。
- [ok] Google Fonts 外链的性质 — 两处命中均为写入产物 SVG 的 @import 文本与 Output Rules 自述 'no external dependencies except the Google Fonts import';脚本自身不请求该域名,按批4 口径不判级,已写入 risks。
- [ok] 绘制顺序与遮罩矩形确为强制 — SKILL.md 明写 'The opaque masking rect trick is essential',并给出 8 层绘制顺序与组件片段(遮罩 rect + 样式 rect 成对)。
- [ok] 间距规则为可检查数字 — 组件高 50-70px、垂直 ≥40px/水平 ≥30px、箭头标签 10px、区域边界内缩 20px、图例距最低元素 ≥20px、viewBox 30px padding,最后一并在流程第 5 步自检。
- [ok] 参考文件覆盖范围(是否夸大) — 4 份布局参考对应 architecture/flowchart/sequence/structural;思维导图/时间线/状态机/数据流/示意在图型表中给出要点但无专门文件,SKILL.md 用 'Read the reference file if one exists for that type' 表述,不构成夸大。
- [ok] meta 元数据 — GitHub API:MIT、25926 stars、pushed_at 2026-09-10T15:13:43Z;本地 HEAD 与 pin 1567581c26ec… 一致。
6結論
e4806bf926545ede…