Djangoでdjano-extensionsを利用してER図(=ERD)を自動作成する!graph_modelsメソッドの使い方
ER図(=ERD)とは?
ER図とはEntity Relationship Diagramの略で、簡単に言うと「データベース設計を関係が見やすいように図にしたもの」です。
今回はDjangoのDB設計の定義ファイルであるmodels.pyの記述からこれを自動生成してみます!
課題:Djangoのmodels.pyに書いたDB設計からER図を自動で作成したい!
数個のテーブルしかない段階だとあまり感じないかもしれませんが、テーブルが多くなるに連れて開発チームのみながその関係を把握するのが難しくなります。
そんなときにER図があると助かりますが、設計時に作っていなかったり、後からテーブルを足していったりでちゃんとしたER図がない場合はそこそこあるのではないでしょうか?
それを解消してくれるのが、django-extensionsのgraph_modelsコマンドです。現在の、つまり最新のmodels.pyからER図を自動で生成してくれます。
サンプルコード
Githubにサンプルコードを上げています。以下のコマンドで環境構築できます。
git clone -b django_extensions_model https://github.com/yeconnect/django-baby-starter-template.git
cd django-baby-starter-template
docker compose up
(docker compose upのコマンドは1~2分程度かかります。)
ステップ1:django-extensionsのインストール
サンプルコードの場合は、requirements.txtにdjango-extensionsをすでに入れているので必要ありません。
Dockerを使っていない場合は
pip install django-extensions
が必要ですが、今回は必要ありません。
ステップ2:pygraphvizをインストール
pygraphvizはグラフを書くのに必要なライブラリです。先程のようにrequirements.txtに入れるのですが、それだけでは動きません。なぜならpygraphvizは、pythonではない言語で書かれたGraphvizのラッパーだからです。
サンプルコードのように、まずはDockerfileを以下のようにして、Graphvizをインストールしておく必要があります。
FROM python:3.9
RUN apt-get update -y
RUN apt-get dist-upgrade -y
RUN apt-get install -y build-essential graphviz-dev graphviz pkg-config
このようにDockerfileを書いていれば、requirements.textに書いたpygraphvizを正常にインストールすることができます。
ステップ3:models.pyにDB設計を書く
各自作りたいものを書きます。ちなみにサンプルコードには、todo/models.pyとblog/models.pyの2つがあります。
ステップ4:graph_modelsコマンドを実行する。
準備ができたら、ターミナルで
docker compose run --rm web python manage.py graph_models -a -o erd_of_all.png
とすると↓のようにerd_of_all.pngが作成されました!
ステップ5:graph_modelsコマンドのオプションを深ぼり
先程は graph_models -a -o ファイル名.png
でした。これは、すべてのテーブルをグラフにしたものです。「テーブルが多すぎて集中できない!」、「特定のアプリのER図が見たい」という場合もあるかと思います。
特定のアプリ(ここではblogとする)のER図を作成したいときは
docker compose run --rm web python manage.py graph_models blog -o erd_of_blog.png
のように「-a」の部分をアプリ名に置き換えるとできます。
また、結果のファイル名を変更したい場合は、「 -o ファイル名.png」 とすればいけます。
おまけ
ちなみにサンプルコードをdocker compose upして、ブラウザで
http://localhost:4989/blog/erd
http://localhost:4989/todo/erd
にアクセスするとそれぞれ、すべてのER図、blogのER図、todoのER図が表示されるようにしてみました。
ぜひ試して見てください!
こんなER図ではしょぼいという場合
把握しやすくはなったけど今ひとつという場合、PlantUMLファイルにmodels.pyを出力してくれるライブラリdjango-model2pumlがあります。より柔軟に対応できそうですね。
こちらの記事で解説しています。(「Djangoのmodels.pyからPlantUMLを自動で作成する。django-model2puml」)
ディスカッション
コメント一覧
まだ、コメントがありません