K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

ガントチャートで短期プロジェクトを整理

中級

06.7.11

ガントチャートで短期プロジェクトを整理

最終更新 2020-06-17 読了時間 2 分
まとめ
ガントチャートは、横軸を時間、縦軸を担当(チームやタスク)にして、作業の期間を横棒で描くスケジュール図です。同じ週に複数のチームの棒が縦に重なれば並行作業、1 チームの棒が途切れていれば待ち期間と、進行の形がそのまま読めます。matplotlib では ax.broken_barh([(開始, 長さ)], (y 位置, 太さ)) が 1 チーム分の区間を一度に描き、ax.axvline で縦の点線を引けば「仕様確定」「テスト完了」のような節目を重ねられます。読み終えると、4 チーム × 12 週のタスクから第 8〜9 週に開発・QA・CS の 3 チームが同時に動く混雑を読み取り、自分のプロジェクトの区間リストを同じ形で描けるようになります。

直感 #

四半期のリリース準備で、企画は第 1〜3 週と第 5〜6 週、開発は第 2〜6 週と第 8〜10 週、と各チームが 2 つずつ作業期間を持っているとします。表で読むと「第 8 週に何チームが動いているか」を数えるのに時間がかかりますが、ガントチャートなら第 8 週の位置で縦に線を引いて棒が何本あるかを見れば済みます。棒の長さが期間です。棒の縦位置が担当チーム、縦の点線が締め切りやマイルストーンで、棒が点線を越えていれば、そのマイルストーンまでに作業が終わらない予定だと 1 秒で分かります。

Python で描く #

次のコードは 4 チームのタスクを (開始週, 長さ) のタプルで持ち、broken_barh でチームごとに横棒を描きます。第 3 週と第 9 週には axvline の縦線を立てます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import matplotlib.pyplot as plt

teams = ["企画", "開発", "QA", "CS"]
timeline = [
    [(1, 3), (5, 2)],
    [(2, 5), (8, 3)],
    [(4, 3), (8, 2)],
    [(3, 2), (7, 4)],
]
colors = ["#38bdf8", "#818cf8", "#f472b6", "#facc15"]

fig, ax = plt.subplots(figsize=(6.2, 3.8))
for idx, (team, segments) in enumerate(zip(teams, timeline)):
    for seg, color in zip(segments, colors):
        ax.broken_barh([seg], (idx - 0.35, 0.7), facecolors=color, alpha=0.85)

ax.set_ylim(-1, len(teams))
ax.set_xlim(0, 12)
ax.set_yticks(range(len(teams)), labels=teams)
ax.set_xticks(range(0, 13))
ax.set_xlabel("週")
ax.set_title("四半期リリース準備のガントチャート")
ax.grid(axis="x", alpha=0.2, linestyle="--", linewidth=0.8)
ax.set_axisbelow(True)

milestones = {"仕様確定": 3, "テスト完了": 9}
for label, week in milestones.items():
    ax.axvline(week, color="#475569", linestyle=":", linewidth=1.2)
    ax.text(week + 0.1, len(teams) - 0.4, label, rotation=90, va="top", fontsize=9)

fig.tight_layout()

plt.show()

matplotlib.axes.Axes.broken_barh を使えば簡単に横棒で期間を描画できますの図

実行結果の読み方 #

横棒の長さがタスクの期間、縦位置が担当チームです。第 8〜9 週は開発・QA・CS の棒が縦に 3 本重なっており、この時期にリソースが集中していることが読めます。点線の「テスト完了」(第 9 週)を開発の第 2 区間(第 8〜10 週)と CS の第 2 区間(第 7〜10 週)が越えているので、節目に対して 1 週間の遅れが予定に組み込まれていると分かります。週単位より細かく見たいときは、X 軸を pd.Timestamp の日付にして mdates.DateFormatter で日付表示に切り替えます。

使いどころと落とし穴 #

ガントチャートは、タスクが 4〜30 本程度の短期プロジェクトで、開始・終了と並行度を関係者と共有するのに向いています。タスク間の依存関係(A が終わらないと B が始まらない)やクリティカルパスは棒だけでは表せないので、本格的な工程管理が必要なら依存関係を扱える専用ツールに任せます。100 本を超えるタスクを 1 枚に詰めると縦長になって俯瞰できないため、フェーズごとに図を分けるか、マイルストーンだけを描く要約図を別に用意してください。色に「担当」や「ステータス」の意味を持たせるなら、ax.legend か ax.text で色の意味を明記しないと読者は装飾として読み飛ばします。