PlantUMLでER図を描く!

How to draw ER diagram with PlantUML.

Takuo
Takuo
Dec 25, 2017 · 8 min read
Image for post
Image for post

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

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

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

エンティティ

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

Image for post
Image for post
entity entity1 {
primary_key
--
attribute
}
entity "entity 2" as entity2 {
}

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

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

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

Image for post
Image for post
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 {
}

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

Image for post
Image for post
entity entity1 <label type 1> {
}
entity entity2 <<label type 2>> {
}

属性

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

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

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

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

セパレータ

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

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

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

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

リレーション

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

Image for post
Image for post
entity entity {
}
entity up {
}
entity down {
}
entity right {
}
entity left {
}
entity -up- up
entity -do- down
entity -ri- right
entity -le- left

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

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

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

Image for post
Image for post
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図が分かりにくくなるので、適切なパッケージに分けましょう。パッケージの形状としていくつか種類を指定できます。

Image for post
Image for post
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 {
}
}

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

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

その他

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

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

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

Image for post
Image for post
!define RED #FFAAAAentity entity1 RED {
}
entity entity2 RED {
}

メモもかけます。

Image for post
Image for post
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

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store