plantumlで頑張らないレイアウト制御


先日、画面共有でplantuml書きながら打ち合わせしてたら、「結構すらすらとキレイに作れるんだね」って言われて、意外と知られてないのかなって思ったので書きました。

矢印の向きで制御する

割と直感的な挙動なのですが、これ知らない人がコーディング規約作ってたりすると、「矢印の向きは左から右にすること」とかいう規約作られて苦労します。

rectangle Foo
rectangle Bar
rectangle Baz

Foo -> Bar
Foo -> Baz

rectangle Foo
rectangle Bar
rectangle Baz

Foo -> Bar
Baz <- Foo

矢印に使う".(ドット)"や"-(ハイフン)"の数で制御する

plantumlの出力結果にはレイヤーというか層みたいなのがあり、矢印に使われる".(ドット)"や"-(ハイフン)"によって、矢印の先のオブジェクトがどの層に置かれるか制御できます。これも、知らない人が規約作ったりすると、ハイフンとかの数指定されてめんどくさくなります。

例えば先程出した図ですが、

rectangle Foo
rectangle Bar
rectangle Baz

Foo -> Bar
Foo -> Baz


これは矢印に使われてるハイフンが全て一本なので、層は1つです。ここで、FooからBarへの矢印のハイフンを2本に増やしてみます。

rectangle Foo
rectangle Bar
rectangle Baz

Foo --> Bar
Foo -> Baz


BarがFooの下に来るようになりました。このとき、出力結果は上下に別れて2層になってます。Bazも2層目に置きたい場合はBazの矢印の数も増やします。

rectangle Foo
rectangle Bar
rectangle Baz

Foo --> Bar
Foo --> Baz

Bazを更に下に置きたい場合、ハイフンを更に増やすと下に層が追加されます。

rectangle Foo
rectangle Bar
rectangle Baz

Foo --> Bar
Foo ---> Baz


この出力結果は"Fooがある層"、"Barがある層"、"Bazがある層"の3つになります。

層を横に広げたい場合は"left to right direction"を記述します。

left to right direction

rectangle Foo
rectangle Bar
rectangle Baz

Foo --> Bar
Foo ---> Baz

終わり

hiddenや"-r->"とか"-l->"で制御するのも悪くはないのですが、個人的にはそれらを乱用して頑張るよりは、矢印の装飾を最小限にして上記挙動を活用したほうが直感的な気がしますし、出力結果の統一感も保てるんじゃないかと思います。特に"left to right direction"入力したときの"-r->"や"-l->"の動きは個人的にすごくわかりづらいので。
最近は
draw.ioとかも出てきて出番も減ってるような気がしますが、テキストベースで変更履歴が残せたり、便利なところもあるので、もっと流行ってほしいなと思います。