用途
draw.io Diagram Skill 是一个用于 draw.io 图表创建、编辑与审查的技能。根据资料描述,它适用于 .drawio XML 文件的编辑、PNG 转换、布局调整以及 AWS 图标的使用。
主要能力
- 以纯 XML 文本方式编辑 .drawio 文件。
- 将 .drawio 文件转换为 PNG(含透明背景、2 倍缩放等选项)。
- 通过调整 mxGeometry 中的坐标、宽高完成布局调整。
- 支持在 mxGraphModel 及文本元素 style 中设置字体(如 Noto Sans JP)。
- 提供 AWS 图标搜索脚本,并建议使用最新版官方图标(mxgraph.aws4.*)。
使用方式
基本规则
- 只编辑 .drawio 文件。
- 不要直接编辑 .drawio.png 文件。
- 在幻灯片中使用 pre-commit hook 自动生成的 .drawio.png。
字体设置
用于 Quarto 幻灯片时,在 mxGraphModel 标签指定默认字体:
<mxGraphModel defaultFontFamily="Noto Sans JP" ...>
并在每个文本元素的 style 属性中显式指定 fontFamily:
style="text;html=1;fontSize=27;fontFamily=Noto Sans JP;"
转换命令
转换脚本位于 scripts/convert-drawio-to-png.sh。
# 转换所有 .drawio 文件
mise exec -- pre-commit run --all-files
# 转换特定 .drawio 文件
mise exec -- pre-commit run convert-drawio-to-png --files assets/my-diagram.drawio
# 直接运行脚本(使用技能自带脚本)
bash ~/.claude/skills/draw-io/scripts/convert-drawio-to-png.sh assets/diagram1.drawio
内部使用的命令:
drawio -x -f png -s 2 -t -o output.drawio.png input.drawio
选项说明:
- -x:导出模式
- -f png:PNG 格式输出
- -s 2:2 倍缩放(高分辨率)
- -t:透明背景
- -o:输出文件路径
布局调整步骤
- 用文本编辑器打开 .drawio 文件(纯 XML 格式)。
- 找到要调整元素的 mxCell(可通过 value 属性的文本搜索)。
- 调整 mxGeometry 标签中的坐标:x(距左位置)、y(距上位置)、width(宽度)、height(高度)。
- 运行转换并验证。
坐标计算:元素中心坐标 = y + (height / 2);对齐多个元素时,计算并匹配中心坐标。
设计原则
- 清晰:创建简单、视觉整洁的图表。
- 一致:统一颜色、字体、图标大小、线条粗细。
- 准确:不因简化而牺牲准确性。
元素规则:为所有元素添加标签;用箭头表示方向(优先使用两个单向箭头而非双向箭头);使用最新官方图标;为自定义符号添加图例。
可访问性:确保足够颜色对比度;除颜色外使用图案区分。
渐进披露:将复杂系统拆分为分阶段图表——上下文图(外部视角的系统概览)、系统图(主要组件及关系)、组件图(技术细节与集成点)、部署图(基础设施配置)、数据流图(数据流与转换)、时序图(时序交互)。
元数据:在图表中包含标题、描述、最后更新时间、作者和版本。
最佳实践
- 背景色:移除 background="#ffffff",使用透明背景以适配多种主题。
- 字体大小:使用标准字号的 1.5 倍(约 18px)以保证 PDF 可读性。
- 日文文本宽度:每字符预留 30-40px,宽度不足会导致意外换行。例如 10 字符文本预留 300-400px:
<!-- For 10-character text, allow 300-400px -->
<mxGeometry x="140" y="60" width="400" height="40" />
- 箭头放置:始终将箭头放在后层(在 XML 中紧跟标题之后);避免与标签重叠;箭头起点/终点距标签下边缘至少 20px。
<!-- Title -->
<mxCell id="title" value="..." .../>
<!-- Arrows (back layer) -->
<mxCell id="arrow1" style="edgeStyle=..." .../>
<!-- Other elements (front layer) -->
<mxCell id="box1" .../>
- 箭头连接到文本标签:文本元素不支持 exitX/exitY,需使用显式坐标:
<!-- Good: Explicit coordinates with sourcePoint/targetPoint -->
<mxCell id="arrow" style="..." edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1279" y="500" as="sourcePoint"/>
<mxPoint x="119" y="500" as="targetPoint"/>
<Array as="points">
<mxPoint x="1279" y="560"/>
<mxPoint x="119" y="560"/>
</Array>
</mxGeometry>
</mxCell>
- edgeLabel 偏移调整:通过 offset 属性控制箭头标签与箭头的距离(负值置于箭头上方,正值置于下方):
<!-- Place above arrow (negative value to distance) -->
<mxPoint x="0" y="-40" as="offset"/>
<!-- Place below arrow (positive value to distance) -->
<mxPoint x="0" y="40" as="offset"/>
- 移除无关的装饰性图标(例如已有 ECR,则单独的 Docker 图标多余)。
- 标签与标题:仅服务名用 1 行;服务名加补充信息用 2 行并换行;冗余写法(如 ECR Container Registry)缩短为 1 行;使用 <br> 标签换行。
- 背景框架与内部元素放置:在背景框架(分组框)内放置元素时须留足边距。内部元素须距框架边界至少 30px;须考虑圆角(rounded=1)和描边宽度;须对 PNG 输出进行目视验证是否溢出。
坐标计算验证示例:背景框架 y=20、height=400,则范围为 y=20-420;内部元素顶部为 frame y + 30 或更多(如 y=50),底部为 frame y + height - 30 或更少(如至多 y=390)。
<!-- Bad example (may overflow) -->
<mxCell id="bg" style="rounded=1;strokeWidth=3;...">
<mxGeometry x="500" y="20" width="560" height="400" />
</mxCell>
<mxCell id="label" value="Title" style="text;...">
<mxGeometry x="510" y="30" width="540" height="35" />
</mxCell>
<!-- Good example (sufficient margin) -->
<mxCell id="bg" style="rounded=1;strokeWidth=3;...">
<mxGeometry x="500" y="20" width="560" height="430" />
</mxCell>
<mxCell id="label" value="Title" style="text;...">
<mxGeometry x="510" y="50" width="540" height="35" />
</mxCell>
参考与 AWS 图标
参考内容包括布局指南、AWS 图标和 AWS 图标搜索脚本。AWS 图标搜索示例:
python ~/.claude/skills/draw-io/scripts/find_aws_icon.py ec2
python ~/.claude/skills/draw-io/scripts/find_aws_icon.py lambda
检查清单
- 未设置背景色(page="0")
- 字体大小合适(建议更大)
- 箭头置于后层
- 箭头不与标签重叠(在 PNG 中验证)
- 箭头起点/终点距标签足够远(至少 20px)
- 箭头不穿透方框或图标(在 PNG 中验证)
- 内部元素不溢出背景框架(在 PNG 中验证)
- 背景框架与内部元素间边距 30px+
- AWS 服务名称为官方名称/正确缩写
- AWS 图标为最新版本(mxgraph.aws4.*)
- 无多余元素残留
- 已目视验证 PNG 转换结果
适用场景
根据资料,该技能适用于需要编辑 .drawio XML、进行 PNG 转换、调整布局以及使用 AWS 图标进行架构类图表制作的场景,也覆盖审查图表布局与可访问性的需求。
限制
资料中未提供该技能的具体平台依赖、运行环境要求、收费方式、价格、性能指标或效果承诺等信息,暂未提供。