12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

先日、画面共有で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とかも出てきて出番も減ってるような気がしますが、テキストベースで変更履歴が残せたり、便利なところもあるので、もっと流行ってほしいなと思います。

12
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?