Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

posted at

updated at

Organization

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

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?