PlantUMLでER図を描く!

How to draw ER diagram with PlantUML.

Takuo
VELTRA Engineering
8 min readDec 25, 2017

--

前回は、GitHubでER図を管理する方法を記事にしましたが、今回はPlantUMLでER図を描く方法を紹介します。(前回の記事はこちら

なぜかは知らないのですが、シーケンス図やユースケース図、クラス図などとは違い、ER図についてはPlantUMLの描き方のドキュメントが少ないです。(そもそも公式のページに記載がない)

ということで、非公式ですが、描いている中で見つけた描き方を紹介したいと思います。

エンティティ

エンティティは通常、こんな感じに描きます。あまりないと思いますが、ダブルクォーテーションで囲うことで、非文字(スペース等)を使用することもできます。非文字を使用する場合は、asを使って別名を定義してあげましょう。

entity entity1 {
primary_key
--
attribute
}
entity "entity 2" as entity2 {
}

エンティティのEを、別の文字に変えることもできます。

entity master <<M, DDAA00>> {
}
entity 主テーブル <<主, 00AADD>> {
}

エンティティの色を変更するにはこのように描きます。グラデーションも可能ですが、使うかな?これ。

entity red #red {
}
entity blue #blue {
}
entity custermize #AAEEBB {
}
entity gradation1 #red-green {
}
entity gradation2 #red|green {
}
entity gradation3 #red/green {
}
entity gradation4 #red\green {
}

エンティティにラベルを付けることもできます。

entity entity1 <label type 1> {
}
entity entity2 <<label type 2>> {
}

属性

属性の頭にマークを付けることができます。主キーや外部キーにはマークを付けてあげましょう。

entity "attribute symbol" {
+ green circle
- red square
# yellow diamond
~ blue triangle
* black circle
nothing
}

太字や斜体、アンダーライン等の表記も可能です。

entity "attribute style" {
normal
<b> bold
<i> italic
<u> underline
<color:RED> red
}

セパレータ

主キーとそれ以外を区別するセパレータは、いくつでもいれることができます。点線や二重線のセパレータを使用することもできます。

entity "separator style" {
normal
--
double
==
dot
..
bold
__
}

セパレータにタイトルを付けることもできます。

entity "separator title" {
-- normal --
== double ==
.. dot ..
__ bold __
}

リレーション

関連するエンティティをリレーションによってつなぐことができます。updown(do)等で、相対的な位置を指定することもできますが、必ず指定した通りに配置されるわけではないようです。エンティティの数が多くなると描画が難しくなるので、あまり多用しない方がいいと思います。

entity entity {
}
entity up {
}
entity down {
}
entity right {
}
entity left {
}
entity -up- up
entity -do- down
entity -ri- right
entity -le- left

リレーションにラベルを付けることができます。><を使用すると、矢印として表示してくれるようです。

entity entity1 {
}
entity entity2 {
}
entity1 -ri- entity2 : labeling
entity1 -ri- entity2 : arrow >
entity1 -ri- entity2 : arrow <

カーディナリティを表したい場合は、このように記述します。

entity entity1 {
}
entity entity2 {
}
entity1 -ri- entity2 : one >
entity1 -ri-o| entity2 : zero or one >
entity1 -ri-o{ entity2 : zero or many >
entity1 -ri-|| entity2 : one and only one >
entity1 -ri-|{ entity2 : one or many >
entity1 -ri-{ entity2 : many >

パッケージ

エンティティが多くなるとER図が分かりにくくなるので、適切なパッケージに分けましょう。パッケージの形状としていくつか種類を指定できます。

package default {
entity entity1 {
}
}
package node <<Node>> {
entity entity2 {
}
}
package rectangle <<Rectangle>> {
entity entity3 {
}
}
package frame <<Frame>> {
entity entity4 {
}
}
package cloud <<Cloud>> {
entity entity5 {
}
}
package database <<Database>> {
entity entity6 {
}
}
package folder <<Folder>> {
entity entity7 {
}
}

パッケージ間のリレーションもかけます。でもそこじゃない感。

package package1 <<Node>> {
entity entity1 {
}
}
package package2 <<Node>> {
entity entity2 {
}
}
package1 -ri- package2

その他

各エンティティの色の変え方は上で紹介しましたが、そもそもデフォルトの色を変えたい場合はskinparamで指定します。entity ではなくclassとなっているのは、クラス図の仕組みをER図に流用した名残でしょうか。

skinparam class {
BackgroundColor PaleGreen
ArrowColor SeaGreen
BorderColor Green
}
entity entity1 {
}
entity entity2 {
}
entity1 -ri- entity2

何度も使用する文字列は定数として定義することができます。

!define RED #FFAAAAentity entity1 RED {
}
entity entity2 RED {
}

メモもかけます。

entity entity1 {
}
entity entity2 {
}
note top of entity1 : this is note1.
note bottom of entity2 : this is note2.
note right of entity2 : this is note3.\nnext line.
entity1 -ri- entity2
note on link : this is note4.

いろいろな描き方を紹介しましたが、特殊な描き方を多用すると、それはそれでわかりにくくなります。また、あまり多くのエンティティをひとつに詰め込むと、やはりわかりにくくなります。適度に分割しながら、シンプルでわかりやすいER図を目指しましょう!

--

--

Takuo
VELTRA Engineering

Engineer who likes travel, simple code, and something new