きり丸の技術日記

技術検証したり、資格等をここに残していきます。

動いているDBからテーブルやER図をDockerで生成する(Schema Spy)

テーブル定義やER図は自動生成できると楽です。また、本番環境のDBから生成できるともっと便利です。

テーブル定義やER図を自動生成するツールはたくさんありますが、現在のプロジェクトで使用しているSchema Spyを紹介します。GitHubのStar数が1600もあるので、多くのプロジェクトで使われていることでしょう。

なお、それなりに歴史があるツールですので、使い方等は今回の記事で解説はしません。今回の記事はあくまで「素振りしてみた」程度の内容になっています。

環境

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で十分ですが。

github.com

終わりに

CIで常に最新のDB定義を出力したい場合は、ローカルではなく検証環境を指定するといいでしょう。GitHub ActionsでローカルのDB定義を出力しようと思いましたが、DBの準備だったりFlywayの適用だったりと下準備が面倒そうだったので、諦めています。

毎回手動でテーブル定義を生成するのは面倒ですので、できるだけCI等で自動的に作成する仕組みを作れると良いでしょう。


この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。

参考

敬称略

kamukiriri:DockerでサクッとDBからER図を作成する qiita.com

公式Schema Spyリポジトリ github.com

f:id:nainaistar:20201228233250p:plain