打倒!PlantUMLのなにこれレイアウト

How difficult it is to adjust the layout using PlantUML!

Takuo
VELTRA Engineering
5 min readJul 11, 2018

--

ドキュメント作成時にPlantUMLをよく使います。PlantUMLを使うと、図を用いたドキュメントもGit管理できるのでとても便利なのですが、たまに「なにこれ?」なレイアウトになって、調整も難しい時があります。

今回は、私が直面したなにこれレイアウトと、(理屈は分からないけど)なんとか解消した方法をご紹介します。なお、バージョンによって描画結果が変わることも多いので、あくまで参考として御覧ください。

ちなみにPlantUMLに関する以前の記事はこちら

本日のなにこれレイアウト

まずは、こちらのレイアウトを見ていただきたい。

@startuml
a -ri-> b
c -ri-> d
b -[hidden]- d
d -ri-> e
@enduml

描画するとこんな感じ。これは期待通りです。
rirightの省略、記載なしは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

どうやら、rightleftの場合、updownよりも同じ行に配置しようとする制約が強いようです。

left to right directionを付けることで描画方向が変わりますが、それ以外の部分でも少し違うようです。ただ、もともとはユースケース図向けに用意された機能なので、他のUMLで正しく動くかは保証できません。この機能を使ってのレイアウト調整は、最終手段にした方がよさそうですね。

--

--

Takuo
VELTRA Engineering

Engineer who likes travel, simple code, and something new