PM 畫圖小幫手 - Plantuml

PlantUML 介紹與推廣

什麼是 PlantUML

「畫圖」是 PM 日常工作中最重要的技能之一,在說明規格、內容的流程、行為時,一張清楚並乾淨的圖片通常能讓溝通的效率加速,增進開發以及交付的流程

也因此在 PM 的實際工作中,不乏需要繪製如心智圖、Mindmap、甘特圖,或是各種類型的流程圖(Flowchart),也因此開始摸索適合的畫圖工具,以我而言最早還真的是用 PPT,接著陸續使用過 Draw.io、Zeplin、Miro、Moqups、也曾經使用過 Figma 來做發揮(我同事還會用 Canva)

然而這些工具長久使用下來,你會注意到某些問題及通點:

  1. 需要透過輸出、截圖等方式寫入規格書內
  2. 修改速度慢,改為之後還要額外輸出
  3. 維護困難,如果畫圖工具是 PM 自己的,在離職後接手的人很高機率重劃
  4. 畫布中的對齊、調整很花時間

因此在今天,想要來跟各位在產品開發苦海中的 PM,介紹這個我近期最喜歡的畫圖語法 - PlantUML

以下引用 Wiki 介紹

PlantUML是可以用純文本語言繪製圖表的開源軟體。 PlantUML支援許多統一建模語言(UML)的圖,也支援其他軟體開發相關的格式 例如ArchiMate、方塊圖、業務流程模型和標記法(BPMN)、C4模型、電腦網路圖、ER模型、甘特圖、心智圖和工作分解結構,也可以用在JSON及YAML檔案的視覺化。 PlantUML用良好格式,可讀性高的代碼,來產生圖表。 也有其他UML建模的文字格式,PlantUML可支援許多的圖表格式,而且不需要特別的格式設定。

以我來說,使用 PlantUML 的好處包含以下

  • 方便快速製圖以及快速修改
  • 容許任何人存取並使用
  • 可以直接使用在各種規格書(如Wiki、Blog、Google doc、Google sheet)上
  • 社群支援,且可以畫出任何我想要的東西以及範例

先附上一個我近期繪製的甘特圖,討論不同產品線開發時 Test Team 的人力配置使用

  
@startgantt
saturday are closed
sunday are closed
2024-09-17 are closed
2024-10-10 are closed
Project starts the 22nd of august 2024
[PO-auto-dev] is colored in Grey
note bottom
  Sandy
end note
[RP-PO-9] requires 1 days and is colored in blue
[RP-v3] requires 3 days and is colored in Green
note bottom
  Amei
end note
[RP-v4-pre] is colored in Grey
note bottom
  Sandy
end note
[RP-v4] requires 3 days and is colored in Green
note bottom
  Sandy
end note
[ProductA-v16] requires 6 days and is colored in Pink
note bottom
  Amei
  Sandy
  Andy
end note
[ProductA-v17-pre] is colored in Grey
note bottom
  Amei
  Henry
  Andy
end note
[ProductA-v17] requires 6 days and is colored in Pink
note bottom
  Kuanyi
  Henry
  Andy
end note
[ProductA-NEW-pre] requires 3 days and is colored in Grey
note bottom
  Andy
end note
[ProductA-Browser] requires 6 days and is colored in Orange
note bottom
  Andy
end note
[PO-auto-dev] starts at 2024-09-23
[RP-PO-9] starts at 2024-10-07
[RP-v3] starts at 2024-09-02
[RP-v4] starts at 2024-09-18
[ProductA-v16] starts at 2024-08-23
[ProductA-v17-pre] starts at 2024-9-5
[ProductA-v17] starts at 2024-10-15
[ProductA-NEW-pre] starts at 2024-09-12
[ProductA-NEW] starts at 2024-09-27
[RP-v4-pre] starts at [RP-v3]'s end
[RP-v4-pre] ends at [RP-v4]'s start
[PO-auto-dev] ends at [RP-PO-9]'s start
[ProductA-v17-pre] starts at [ProductA-v16]'s end
[ProductA-v17-pre] ends at [ProductA-v17]'s start
[ProductA-NEW-pre] ends at [ProductA-NEW]'s start
@endgantt

  

如何開始畫圖

PlantUML 是透過描述物件的關係來進行,不過要說他很直覺嗎…我倒覺得是需要花時間進行學習的 例如網路上最常出現的範例是這樣

Bob->Alice : hello

而透過渲染之後,實際產出的在UI上看到的為

  
Bob->Alice : hello

  

而如果要實際要開始畫圖,推薦可以從先點開這兩個網站開始進行

上面的連結是 PlantUML 的官方網站,基本上所有任何想要畫的東西,看這個就可以解決90%的問題,甚至能夠在裡面挖掘出許多不同的畫圖表達方式,增加 PM 的表達工具

另一個連結則是線上 Render 出圖片的服務,我最常做的流程為以下

  1. 先心裡想好要畫什麼樣的圖,流程、時序、還是什麼特殊的東西,並簡單用筆畫出草稿
  2. 打開Plant官方網站,從上面掃有沒有接近的呈現
  3. 找到中意的之後,copy code 並且到線上畫圖貼上,開始修改
  4. 完成後,把 code 移植到我的目標區域,完成

基本上我不推薦像是讀書與學習,比較建議用 ‘工具’ 的概念來使用 PlantUML,意思是如同類似 組裝傢俱,當有需要時再參考說明書操作即可,而畫圖也一樣,平常可以快速的瀏覽各種圖示,等真正需要畫圖時再研究語法即可

畫完了!如何上到我的文件上

首先我們要理解一件事,PlantUML 終究只是一團 Code,因此轉成圖片是需要額外的 Plugin 去處理,才有辦法在我們看到的任何平台上產出圖片,目前主流的 Plugin 都是經由 PlantUML 自身所提供的 server 服務,大家各種魔改之後套用在不同的文件上使用

以我目前公司的來說, 我們公司是使用 Atlassian 的 Wiki 作為 Spec 的維護,因此只要下載對應的 Plugin 即可使用

而如果你是使用 Wordpress,想要在 Blog 內畫圖,也可以去找這個 WP Plugin,即可在你的 blog 中使用

最多人使用的 Google 服務,目前 Google Doc 以及 Google Slide 可以使用 PlantUML Gizmo,使用後就可以差入圖片了

外掛圖

我的作品

最後附上一張規劃討論 Dev 流程的圖片,歡迎大家參考,祝大家未來都能順利畫圖

  
@startuml Converter CLI
skinparam responseMessageBelowArrow true

collections "Marketplace image" as mkt #C1B8C8
Database "Production env" as prod_en #C1B8C8
Database "UAT env" as uat_en #9BA0BC
participant "Main" as main #DE9151
participant "Dev" as dev #F34213
participant "Story branch" as ep_sto #BC5D2E
participant "RD" as rd #BBB8B2
participant "Story 2 Branch" as ep_sto2 #BC5D2E


group#Gold #LightBlue Story 1 dev
dev -[#red]> ep_sto: Open Story branch
ep_sto -[#red]> rd: rd develop
ep_sto <-- rd: code complete
hnote over ep_sto 
unit test
endhnote
dev <-- ep_sto: merge after pass
end

group#Gold #LightBlue Story 2 dev
dev -[#red]> ep_sto2: Open Story 2 branch
rnote over ep_sto2 #BBB8B2
RD open PO branch
endrnote
hnote over ep_sto2 
unit test
endhnote
dev <-- ep_sto2: merge after pass
end

rnote over mkt , ep_sto2 #black
 Code freeze 
endrnote
main <-- dev: Merge dev to Main, add tag

group#Gold #Pink Uat build
uat_en o<- main: Build for uat
end
hnote over uat_en 
uat test and fix issue
endhnote

rnote over mkt , ep_sto2 #black
Release end
endrnote

group#Gold #Pink Uat build
prod_en o<- main: Build for Prod
mkt o<- main: Update image

end

rnote over mkt , ep_sto2 #black
Codee freeze ending
endrnote

@enduml