plantuml 本身就是一个开源项目,在github上有它的
仓库 https://github.com/plantuml/plantuml 和
组织 https://github.com/plantuml 。

作者是Arnaud Roques,这里有一篇 对他的访谈 https://modeling-languages.com/interview-plantuml/ ,聊到他创作plantuml的初衷是什么?“keeping the documentation up to date”。翻译过来叫“让交接项目的程序员少一些wtf”,哈,果然程序员的痛点都差不多。
plantuml 是使用java开发的,最早release版本应该是在2009年,我看github上至今仍然以1个月1个版本的速度发布release更新着。它最大的好处就是使用纯文本来绘制图形。是的,不仅仅是时序图,它可以绘制类图,流程图,部署图,甘特图,思维导图:

image-20211213091500497
官方文档在:https://plantuml.com/zh/
比如我现在使用最多的就是它的时序图。(官方文档翻译为“顺序图”,而官方文档的“时序图”是时间线的意思)
https://plantuml.com/zh/sequence-diagram
这种复杂的分组流程
image-20211213092200516
用下列简单的文本就能描述出来了。
@startumlAlice -> Bob: 认证请求Bob -> Alice: 认证失败group 我自己的标签 [我自己的标签2] Alice -> Log : 开始记录攻击日志 loop 1000次 Alice -> Bob: DNS攻击 end Alice -> Log : 结束记录攻击日志end@enduml
颇为神奇。
plantuml支持的时序图的关键字我整理了一下。
actor(角色)boundary(边界)control(控制)entity(实体)database(数据库)collections(集合)queue(队列)order(顺序)as (别名)\n(换行)skinparam responseMessageBelowArrow true (文本对齐)-> --> ->o ->> (各种箭头样式)autonumber (自动对消息编号)header (页眉)footer (页脚)newpage 分页group (分组)loop (循环)note left of,note right of或note over (增加备注)hnote 和 rnote 备注框形状note across (多个参与者增加备注)== (分隔符)ref over (引用)... 延迟maxMessageSize (文本最大长度)|| 限定空间activate和deactivate (生命线激活,取消激活)destroy (生命线消失)return (返回)create 创建参与者++ 激活目标(可选择在后面加上#color)-- 撤销激活源 创建目标实例!! 摧毁目标实例[] 进入和发出? 缩短teoz 瞄点和持续<< >> 构造类型box 包裹参与者hide footbox 移除脚注[skinparam](https://plantuml.com/zh/skinparam) 改变外观至于绘制的工具,各种ide目前已经都支持了。我自己在vscode和goland上都尝试过绘制非常大的时序图,goland的绘制会比vscode慢一些,甚至在这个plantuml比较复杂的时候,goland会出现内存不足,加载失败的错误。但是在vscode中,没有出现过。
在plantuml可以支持的类型中,目前最让我觉得有用的就是时序图和jsom/yaml 数据,时序图不用说了,对于json和yaml,一旦非常大的配置文件,使用json/yaml来进行描述,阅读起来是多么痛苦的事情,特别是yaml,需要对比锁进层次。而使用plantuml,能绘制出非常通俗易懂(逼格十足)的配置文件层次图,是非常爽的一件事情。
好了,后续交接项目的时候,别再写一大堆的wiki了,用用plantuml吧,让下任接手者为之惊艳一番。
参考文章:
https://modeling-languages.com/interview-plantuml/
https://plantuml.com/zh/
https://draveness.me/dsl/
作者:轩脉刃