打倒!PlantUMLのなにこれレイアウト
How difficult it is to adjust the layout using PlantUML!
ドキュメント作成時にPlantUMLをよく使います。PlantUMLを使うと、図を用いたドキュメントもGit管理できるのでとても便利なのですが、たまに「なにこれ?」なレイアウトになって、調整も難しい時があります。
今回は、私が直面したなにこれレイアウトと、(理屈は分からないけど)なんとか解消した方法をご紹介します。なお、バージョンによって描画結果が変わることも多いので、あくまで参考として御覧ください。
ちなみにPlantUMLに関する以前の記事はこちら。
本日のなにこれレイアウト
まずは、こちらのレイアウトを見ていただきたい。
@startuml
a -ri-> b
c -ri-> d
b -[hidden]- d
d -ri-> e
@enduml
描画するとこんな感じ。これは期待通りです。
(ri
はright
の省略、記載なしはdown
になります)
上の図、bとdをまとめたいので、少し修正してあげたものがこちら。
@startuml
rectangle {
class b
class d
}
a -ri-> b
c -ri-> d
b -[hidden]- d
d -ri-> e
@enduml
これを描画すると、こうなります。なにこれ。
打倒!なにこれレイアウト!
あくせくやってもなかなかうまくいかなかったのですが、結論から先に話すと、left to right direction
というキーワードを使うと期待通りのレイアウトになりました。
@startuml
left to right direction
rectangle {
class b
class d
}
a --> b
c --> d
b -[hidden]le- d
d --> e
@enduml
描画はこんな感じ。そう、これですね。ほしかったのは。
left to right directionってなんだ?
では、left to right direction
とはなんなのでしょうか。ドキュメントを見ると、ユースケース図の説明にこんな記載があります。
作図方向を left to right に変更するには
left to right direction
コマンドを使います。
クラス図等、他のUMLの説明では出てきていないので、ユースケース図向けの機能のようですが、上述の通り他のUMLでも使用できます。
下記の例で挙動を確認してみましょう。
@startuml
[Component] -left-> left
[Component] -right-> right
[Component] -up-> up
[Component] -down-> down
@enduml
もともとはこんな感じで描画されます。
left to right direction
をつけるとこんな感じ。90度傾けた形になるのかと思いきや、反転もしています。
続いてこちらの例を見てみましょう。
@startuml
a -ri-> c
b -ri-> c
@enduml
図はこんな感じ。まぁ気持ちはわかる。
ただ、こんな感じで修正すると、もっと期待値に近くなります。
@startuml
left to right direction
a -do-> c
b -do-> c
@enduml
どうやら、right
やleft
の場合、up
やdown
よりも同じ行に配置しようとする制約が強いようです。
left to right direction
を付けることで描画方向が変わりますが、それ以外の部分でも少し違うようです。ただ、もともとはユースケース図向けに用意された機能なので、他のUMLで正しく動くかは保証できません。この機能を使ってのレイアウト調整は、最終手段にした方がよさそうですね。