Open1

PlantUML + PyCharm でER図作成|draw.ioからの乗り換えメモ

tech_mwtech_mw

DB構造を考えている際に今まで通りdrawioで図形配置でポチポチ作ろうかとも思ったのですが、UML形式のコードから簡単にER図を作成ができるらしいとの事、せっかくなので試してみました。
備忘録メモです。

環境

pc:MacBook Pro(2019)
os:macos Sequoia
pycharm:Community Edition(2022.2.5)
graphviz: 13.1.0

モデルの前提

今回のER図は、ミニマムで簡易的な電子書籍アプリのデータ構造を想定

sample_er.puml
@startuml
'線の描画方法を直線ではなく直角線へ
skinparam linetype ortho

entity "users(ユーザー情報)" as users {
  *id : INT <<PK>>
  indication_name : VARCHAR(100)
  email : VARCHAR(100)
  created_at : DATETIME
  updated_at : DATETIME
}

entity "books(書籍)" as books {
  *id : INT <<PK>>
  title : VARCHAR(200)
  publisher : VARCHAR(100)
  is_published : INT
  read_direction : INT
  price : INT
  price_tax_inc : INT
  delivery_start : DATETIME
  delivery_end : DATETIME
  page : INT
}

entity "book_purchases(書籍購入履歴)" as book_purchases {
  *id : INT <<PK>>
  user_id : INT <<FK>>
  book_id : INT <<FK>>
  title : VARCHAR(200)
  purchased_at : DATETIME
  amount : INT
}

entity "book_views(書籍閲覧履歴)" as book_views {
  *id : INT <<PK>>
  user_id : INT <<FK>>
  book_id : INT <<FK>>
  title : VARCHAR(200)
  viewed_at : DATE
  pages_viewed : INT
}

' }o--|| の意味:「多:1」リレーション
' }   : N側を示す
' o   : 外部キー(FK)を持つ「子」側(N側)
' ||  : 単一側を示す
book_purchases }o--|| users : user_id
book_purchases }o--|| books : book_id
book_views }o--|| users : user_id
book_views }o--|| books : book_id
@enduml

pumlファイル表示方法(pycharm or drawio)

  1. PyCharm上でプラグイン拡張でのリアルタイムプレビュー
  2. draw.io上でコード埋込

の2パターンがあります(ざっくり)

PyCharm上でプラグイン拡張でのリアルタイムプレビュー

必要なものは以下の2つです:

  1. PlantUML Integration(PyCharmプラグイン)
  2. graphviz(描画エンジン)

導入手順

  1. PyCharm > Settings > Plugins > PlantUML Integration をインストール+有効化
  2. $ brew install graphviz(※Homebrewが入っている前提)
  3. $ dot -V でGraphvizのバージョンが表示されるか確認
  4. .pumlファイルを作成すれば、画面分割でリアルタイムプレビューが表示される

プレビュー画面例

draw.io上でコード埋込

  1. draw.io を開く
  2. 「配置 > 挿入 > 高度な設定 > UMLを埋め込む」を選択

注意点

  • draw.io のUMLエンジンは PlantUMLのごく一部構文にのみ対応しています
  • そのため PyCharm上では表示されるが draw.ioではエラーになることがある
  • 結論:PlantUMLのフル構文を使いたいなら PyCharm + Graphvizがベスト


リレーション定義周りの記法が最初分かりづらかったのですが、それさえ分かればそれっぽいER図が簡単に作成できるのでdrawioで図形を配置して手作りするより簡単ですね、修正もコードを調整するだけなので。

もうER図をdraw.ioで手作業で作るのはやめます。修正も再利用も圧倒的にPlantUMLが楽でした。