DB定義書はないんですか?と各所から聞かれるこの頃・・・
何かDB定義書を自動生成してくれるいいツールはないのかと探していたら、SchemaSpyというツールを見つけました!
SchemaSpyとは
SchemaSpy
https://schemaspy.readthedocs.io/en/latest/
既存のRDBMSから情報を読み込んで、htmlにしてくれます!
ER図はテーブル数が多いと、全体ではいい感じにはならないのですが、部分的は見れる感じになります。
Java製のツールです。
SchemaSpyをDockerで使う
SchemaSpyはJavaでできていて、ここからjarファイルをダウンロードするだけ・・・なのですが、
そもそもjarファイルを使うにはローカルにJavaが入っていることが必要かつ、
JavaでDBに接続するためのjdbcドライバーも必要なのでちょっと面倒です。
ですが、SchemaSpyには、公式のDockerイメージが用意されています!
これで面倒な環境構築も必要ありません!
※DBの種類によってはドライバーを用意する必要がありそう。MySQLはDockerイメージに含まれています。
SchemaSpyのDockerイメージ
https://hub.docker.com/r/schemaspy/schemaspy/
とりあえず手頃なDBに接続してドキュメント作ってみよう
と、ここで私が参考にした素敵なページをご紹介します。
SchemaSpyで日本語カラム名を含むデータベースからER図を作成
https://dev.classmethod.jp/articles/schemaspy-docker-localize-jp/
ここを見れば、Dockerの設定からアウトプットまで万事OKです!
接続する手頃なDBがない!
本番環境に接続してドキュメント作成するのもなー・・・
手頃にローカルだけでドキュメント作成したいなあ・・・
そんなときはdocker-composeを使って、Dockerで立てたDBサーバへアクセスしてドキュメント作成してみます。
設定はこんな感じ・・・
docker-compose
version: "3.7"
services:
mysql:
container_name: db
build: ./mysql
environment:
MYSQL_ROOT_PASSWORD: XXXX
volumes:
- ./mysql/bind/mysql:/var/lib/mysql
ports:
- 3306:3306
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
schemaspy:
container_name: schemaspy
image: schemaspy/schemaspy:snapshot
build:
./schemaspy
volumes:
- ./schemaspy/output:/output
- ./schemaspy/schemaspy.properties:/schemaspy.properties
depends_on:
- mysql
# docker-compose upするたびにドキュメント作成されるのが嫌な人は入れる
#entrypoint: /bin/sh
以下の部分は、docker-compose upするたびにドキュメント作成が起動するのがいやなので入れてあります(自分のマシンだとドキュメント作成も結構時間がかかるのです・・・)
entrypoint: /bin/sh
SchemaSpyのDockerイメージは、起動時にドキュメントを作成するように設定されています。
以下のコマンドを打つと、entrypointが/usr/local/bin/schemaspyに設定されているのがわかります。
これで起動時にドキュメント作成が実行されるわけです。
docker inspect schemaspy
docker-composeファイルでentrypointを適当なもので上書きしてやることで、
起動時にドキュメントを作成しなくなります。
任意のタイミングで以下のコマンドを打つことで、ドキュメントを作成できます。
# schemaspy起動
docker-compose run schemaspy
# dockerにログイン
docker exec -it schemaspy /bin/sh
# ドキュメント作成コマンド実行
cd /
/usr/local/bin/schemaspy