LoginSignup
4

More than 3 years have passed since last update.

SchemaSpyとdocker-composeでDB定義書作成

Last updated at Posted at 2020-12-05

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4