---
title: 如何繪製甘特圖?
description: 說明如何用 mermaid.js 繪製甘特圖
tags: post, tutorial
---
甘特圖是經典的專案管理工具。大專案經過層層拆解成小任務,繪製成直條,直條的長度代表所需時間,一眼就能看出專案各部分所需時間,以及瓶頸所在。
先前我們示範了流程圖和圓餅圖的畫法,甘特圖一樣是透過 mermaid 的語法完成的。所以一樣是撇撇撇(\`\`\`),加上語法的關鍵詞「mermaid」。接下來請直接看筆記:
### 建議 [點雙欄模式](https://hackmd.io/Sc-2rS3TT4Oym51QuKiJaA?both) 檢視原始語法。
1. 宣告甘特圖
2. 定義日期格式
3. 用 `section` 宣告一個區塊
4. 給區塊的內容定義:任務名稱、開始日期、持續天數
5. 如果有多個任務,可以模仿範例的 `b2, after b1` 方式來接續下一個任務
```mermaid
gantt
%% 宣告這是甘特圖
title 甘特圖
%% 給它一個標題
dateFormat MM-DD
%% 日期格式
axisFormat %m-%d
%% 縱軸的日期格式
section 我的厲害網站
%% 宣告一個區塊
規劃 : crit, done, plan, 05-15, 10d
%%語法:
%%甘特圖上的任務名稱 : [crit], [active|done], 任務名稱, [日期|after 任務名稱], 長度
開工 : active, work, after plan, 180d
測試 : test, 08-01, 70d
section 撰寫程式
CSS :b1, after implement copyright, 30d
JavaScript :b2, after b1, 20d
整合 : after b2, 40d
section 設計
線稿 : active, wire, 06-12 , 12d
切版 : implement, after wire, 24d
UX 測試 : crit, uxt, after implement, 24d
section 文案
撰寫文案 : copyright, 07-29, 12d
%%todayMarker off
```
(製作本範例過程中,沒有任何網站受到傷害。)
值得一提的是,mermaid 中的甘特圖,任務可以相依於多個任務,意思是,如果 CSS 要等切版和文案(只是舉例),就把被等候的任務全部寫進 `after` 後面,以空白隔開。
持平而論,圖愈複雜、需要的調整愈多,寫語法作圖會愈棘手,尤其不適合邊做邊調整。
然而在文件中,我們常常需要說明**局部**的情況、描述少數幾項事物之間的關係,那麼用純文字作圖反而容易維護,直接讀也多少讀得懂。用 HackMD 描述蓋巨蛋的專案期程可能有點瘋,但簡單規劃一下功能開發的進度,是完全沒問題的。
# 參考資料
- [Mermaid.js 的說明文件](https://mermaid-js.github.io/mermaid/#/gantt?id=syntax)