ふれっしゅのーと

ふれっしゅのーと

趣味に生きる30代エンジニアが心に移りゆくよしなし事をそこはかとなく書きつくるブログ

PlantUMLでgitのブランチ図を描く方法

PlantUML の新たな可能性を見出す

git のブランチ図を自分で描きたいときってたまにありますよね。

「git-flow はもう古い」とか豪語して自分で考えた最強のブランチ運用を図示したり、最強ブランチがぶっ壊れてしまって事故状況の説明資料を作ったり(僕のことか?)


名高き git-flow(『A successful Git branching model』より引用)

今までは Draw.io で作図していたのですが、油断すると線の接続部がずれたり間隔が狂ったりして、レイアウトの微調整が必要でちょっと面倒でした。

PlantUML を使えばテキストベースで作図できて便利だなと思い、シーケンス図、ユースケース図、クラス図、オブジェクト図、アクティビティ図、コンポーネント図、ステートマシン図、マインドマップ、などなど、PlantUML で描ける図を片っ端から試してみたところ「おや?これは相性が良いのでは?」というものがありました。

シーケンス図 です。

本来はオブジェクト間のやりとりを時系列的に示す図です。ライフラインの activate と deactivate を矩形で表せるのですが、これがブランチの git checkout -bgit merge に対応づけられるのではないかと思いました。

で、できたのがこんな図です。


記事冒頭に載せた有名な git-flow の図を PlantUML のシーケンス図で再現してみました。シーケンス図の各直線(ライフライン)が git のブランチを表しています。

工夫した点

コミットの表現方法を工夫しました。

他ブランチにつながるコミットは矢印の端に丸をつける記法 o->o でなんとかなるのですが、自ブランチで閉じたコミットを表すうまい方法がありません。

自分への作用とみなして develop ->o develop のように描けば一応表せないこともないのですが、余計な線が増えてちょっと嫌です。本当はただ丸だけあればよいんです。


矢印が邪魔

試行錯誤の末、僕はついに PlantUML の矢印消滅バグ(?)を発見しました。

まず何もないところから矢印を生やします。?を始点にすることで短い矢印が描けます。ここまでは仕様どおりです。

?->o develop

この状態で ++ を付けてライフラインを activate して矩形を描きます。するとどういうわけか矢印が消滅します。

?->o develop ++

ちなみに終点に o をつけないと矢印は消滅しません。わずかに棒が残ります。

?-> develop ++

しかも不思議なことに右からの矢印ではこのバグは発生しません。謎です。*1

develop <-o? ++

改善したい点

矢印消滅バグに気づいて「これでいける!」と舞い上がったのですが、冷静に見ると、実はまだ矢尻が残ってるんですよね……

「▶○」←これはこういうマークであり、矢印ではない!

…と自分に言い聞かせてますが、やはり心の底では納得できてません。色を白にすると「○」も消えてしまうので困ったものです。うまい方法があるぞ!という方は是非コメントください。

後日談

記事投稿から数ヶ月経ちました。
あんまり手軽じゃない&美しくない ので、結局僕は PlantUML ではなく Draw.io で描いちゃってます。

誰かの需要とマッチする可能性もあるかもしれないので、記事は消さずに残しておきます。


2022-05-21:後日談を追記

*1:終点に丸をつけたいので「develop o<-?」が正しい気がするのですが、なぜか「develop <-o?」と書かないと意図通りの図を出せませんでした。右からの「?」の場合だけ始点と終点が逆になるようです。