什麼是 PlantUML
「畫圖」是 PM 日常工作中最重要的技能之一,在說明規格、內容的流程、行為時,一張清楚並乾淨的圖片通常能讓溝通的效率加速,增進開發以及交付的流程
也因此在 PM 的實際工作中,不乏需要繪製如心智圖、Mindmap、甘特圖,或是各種類型的流程圖(Flowchart),也因此開始摸索適合的畫圖工具,以我而言最早還真的是用 PPT,接著陸續使用過 Draw.io、Zeplin、Miro、Moqups、也曾經使用過 Figma 來做發揮(我同事還會用 Canva)
然而這些工具長久使用下來,你會注意到某些問題及通點:
- 需要透過輸出、截圖等方式寫入規格書內
- 修改速度慢,改為之後還要額外輸出
- 維護困難,如果畫圖工具是 PM 自己的,在離職後接手的人很高機率重劃
- 畫布中的對齊、調整很花時間
因此在今天,想要來跟各位在產品開發苦海中的 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 出圖片的服務,我最常做的流程為以下
- 先心裡想好要畫什麼樣的圖,流程、時序、還是什麼特殊的東西,並簡單用筆畫出草稿
- 打開Plant官方網站,從上面掃有沒有接近的呈現
- 找到中意的之後,copy code 並且到線上畫圖貼上,開始修改
- 完成後,把 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 #blackCode 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 #blackRelease 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 #blackCodee freeze ending endrnote @enduml