Djangoのmodels.pyからPlantUMLを自動で作成する。django-model2puml

2022年1月14日Djangoの豆知識db設計,plantuml,おもしろライブラリ

DjangoのER図自動作成

DjangoでER図を自動で作成しようと考えたときにまず思いつくのが、django-extensionsによるgraph_modelsメソッドです。詳しくは↓の記事で解説しています。

Djangoでdjano-extensionsを利用してER図(=ERD)を自動作成する!

しかしdjango-extensionsでできるのは↓のようなER図で、若干気にいらない人も多いかと思います。

そこで今回はmodels.pyからPlantUMLのファイルを自動で出力できるライブラリdjango-model2pumlを発見したので、django_extensionsと比べてみます。

サンプルコード

Githubにあります。

もしくはターミナルで

git clone -b django_plantuml https://github.com/yeconnect/django-baby-starter-template.git

cd django-baby-starter-template

docker compose up

バージョン

python 3.9

django==3.2
django-model2puml==0.1.14

django-model2pumlセットアップ

サンプルコードを使っている場合は、セットアップができています。

1.ライブラリのインストール

pip install django-model2puml

(サンプルコードではrequirements.txtに追加して、一括でインストールしています。)

2.settings.pyに追記

INSTALLED_APPS = [
    ...
    'puml_generator',
]

↑のようにsettings.pyのINSTALLED_APPSにpuml_generatorを追加します。

これでセットアップは完了です!

PlantUMLのファイルを作成してみる。

それではmodels.pyのモデル定義からPlantUMLのファイルを作成してみましょう

サンプルコードを使っている場合は

docker compose run --rm web python manage.py generate_puml

サンプルコードを使っていない場合は

python manage.py generate_puml

こんなPlantUMLファイルができました

ブラウザ上でPlantUMLをきれいに表示できる「PlantUML Editor」にこのPlantUMLファイルをコピペすると↓のようになりました。

django-extensionsのER図より柔軟で使いやすいと感じました!

generate_pumlコマンドのパラメータまとめ

python manage.py generate_puml にはいくつかパラメータをつけられます。以下まとめてみましたが、実際に動かしてみた挙動から推測で書いてあるもありますのでご了承ください。

–file(ファイル名を指定して作成)

python manage.py generate_puml --file hogehoge.puml

のようにするとhogehoge.pumlというファイルができます。デフォルトはmodels_diagram.pumlのようです。

–title(PlantUMLにタイトルを追加する)

python manage.py generate_puml --title hogehoge

のようにするとタイトルがhogehogeになります。必要な人もいるのでしょうか?

–add-help(説明をPlantUMLにも付ける)

python manage.py generate_puml --add-help

のようにすると、設計の説明が追加されます。例えばverbose_nameを書いていた場合、それがPlantUMLファイルに入ります。

–add-choices(選択肢を表示する)

python manage.py generate_puml --add-choices

CharFieldのchoicesを使っている場合、これを付けると選択肢が追加されます。例えば性別の選択肢sexがあるとき、この–add-choicesを付けると↓のように表示されます。

–add-legend(記号の説明を付ける)

python manage.py generate_puml --add-legend

このパラメータを付けると、↓のように、どの記号がどのDjangoのmodel fieldに対応するのかの説明が付きます。

–include(特定のアプリのみ)

python manage.py generate_puml --include blog

特定のアプリだけ記述したいときに使えます。↑だとblogアプリのみ抽出されます。

–omit(特定のアプリを除く)

python manage.py generate_puml --omit blog

のようにすると、blogアプリ部分を記述しなくなります。

-add-omitted-headers(omitされたアプリのヘッダーだけ表示させる)

python manage.py generate_puml  --add-omitted-headers --omit blog

おそらく–omitと同時に使うオプションです。除外したアプリのヘッダーだけ残したい時に使えます。

–headers-only(フィールドの情報を除く)

python manage.py generate_puml --headers-only

フィールドの情報が記述されなくなります。