SchemaSpyとは
稼働しているデータベースからテーブル一覧やテーブル詳細、ER図 などのドキュメントをリバースで生成し、HTMLとして出力してくれるツール
利用する目的
ER図がメンテされていないプロジェクトにおいて現状のテーブル構成を把握する際に利用したい。
今回作成したもの
https://github.com/isystk/docker-schemaspy.git
ディレクトリ構成
. ├── docker │ ├── apache (Webサーバー) │ │ ├── conf.d (apacheの設定ファイル) │ │ └── logs (apacheのログ) │ ├── mysql (DBサーバー) │ │ ├── conf.d (mysqlの設定ファイル) │ │ ├── data (mysqlのデータファイル) │ │ ├── init (mysqlの初期DDL) │ │ ├── logs (mysqlのログ) │ │ └── script (mysql関連のスクリプト) │ ├── schemaspy │ │ └── conf/schemaspy.properties │ ├── .env │ └── docker-compose.yml ├── public (ER図が出力されるディレクトリ) └── dc.sh (Dockerの起動用スクリプト)
使い方
ダウンロード
Githubからソースファイルをcloneして取得します。
git clone https://github.com/isystk/docker-schemaspy.git
DockerでApacheとMysqlを起動します。
docker/mysql/init のディレクトリにMysqlへインポートしたいデータベースのDumpファイルを配置して下さい。Dockerイメージが作成される際にここに配置したDDLがインポートされます。
mysqldump -u root -p -A > ./dump.sql
Dumpファイルの出力例
docker/schemaspy/conf/schemaspy.properties ファイルには、データベースの接続先情報が記述されています。接続するデータベース名やパスワードなどの情報を設定して下さい。
# type of database. Run with -dbhelp for details
schemaspy.t=mysql
# optional path to alternative jdbc drivers.
schemaspy.dp=/app/mysql-connector-java.jar
# database properties: host, port number, name user, password
schemaspy.host=mysql
schemaspy.port=3306
schemaspy.db=<データベース名>
schemaspy.u=<ユーザー名>
schemaspy.p=<パスワード>
# output dir to save generated files
schemaspy.o=/var/www/html
# db scheme for which generate diagrams
schemaspy.s=work
以下のコマンドを実行するとApacheとMysqlのDockerイメージが作成されて起動します。初回のみデータベースが起動するまで少し時間がかかるので起動が完了してからSchemaspyを実行して下さい。
./dc.sh start
SchemaSpyを実行してMysqlに接続しER図を出力します。
./dc.sh schemaspy
ブラウザでSchemaSpyが出力したER図にアクセスしてみる
http://localhost/使ってみた感想
通常の開発フローだとER図でテーブル設計をしてからDDLを生成して、データベースに反映するという流れになると思いますが、「テーブル設計をする」という意味では使いづらいなぁと感じました。ER図がメンテされていないようなプロジェクトで現状のテーブル構成を参照したいって時には使えると思います。