How to draw ER diagram with PlantUML.

Takuo Oki
Takuo Oki
Dec 25, 2017 · 8 min read

前回は、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図を目指しましょう!

VELTRA Engineering

Posts from the VELTRA Engineering team. www.veltra.com

Takuo Oki

Written by

Takuo Oki

Engineer who likes travel, simple code, and something new

VELTRA Engineering

Posts from the VELTRA Engineering team. www.veltra.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade