テーブル定義やER図は自動生成できると楽です。また、本番環境のDBから生成できるともっと便利です。
テーブル定義やER図を自動生成するツールはたくさんありますが、現在のプロジェクトで使用しているSchema Spyを紹介します。GitHubのStar数が1600もあるので、多くのプロジェクトで使われていることでしょう。
なお、それなりに歴史があるツールですので、使い方等は今回の記事で解説はしません。今回の記事はあくまで「素振りしてみた」程度の内容になっています。
環境
- PostgreSQL
- 13(latest)
- Docker
- 19.03.12
- Schema Spy
- 6.1.0
- Windows
- Power Shell
Schema Spyから生成されるサンプルHTML
Schema Spyを使用すると、HTMLファイルが自動生成されます。先にどのようなサンプルが出力されるかを確認し、開発・運用・引継ぎに使えるか確認しましょう。 schemaspy.org
使い方
参考元のQiita記事を見ていただけると十分です。
docker run -v "$PWD/schema:/output" --net="host" schemaspy/schemaspy:6.1.0 \ -t <DB種類> -host <DBホスト名/IP>:<ポート> -db <DB名> -u <DBユーザー名> -p <DBパスワード>
実際に実行したコマンド
Windows環境で実行する場合は、PowerShellで実行してください。コマンドプロンプトだと$PWD
が解決できません。私がQiitaのとおりにできなくて四苦八苦した理由がそれでした。
docker run -v "$PWD/schema:/output" --net="host" schemaspy/schemaspy:6.1.0 -t pgsql -host localhost:5432 -db database -u user -p pass
今回の場合は、アドベントカレンダー2020で使用した次のリポジトリのDBを取得しています。ローカルで立ち上げているDBの定義を取得していますが、本来は本番環境、または本番相当環境を指定すると正確なDDLが取得できます。
JavaであればDBのマイグレーションを管理するFlywayがあるので、余計なことをしていなければローカルDBで十分ですが。
終わりに
CIで常に最新のDB定義を出力したい場合は、ローカルではなく検証環境を指定するといいでしょう。GitHub ActionsでローカルのDB定義を出力しようと思いましたが、DBの準備だったりFlywayの適用だったりと下準備が面倒そうだったので、諦めています。
毎回手動でテーブル定義を生成するのは面倒ですので、できるだけCI等で自動的に作成する仕組みを作れると良いでしょう。
この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。
参考
敬称略
kamukiriri:DockerでサクッとDBからER図を作成する qiita.com
公式Schema Spyのリポジトリ github.com