SchemaSpyでデータベースのドキュメントを生成してみた

2019.08.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。プロダクトグループの坂井です。

システムは1度作成して終わりではなく、日々機能改善、仕様変更を繰り返して変化していきます。 ドキュメントをメンテナンスする時間がなかった、忘れていた・・・など色々と理由はあると思いますが、実装とドキュメントの整合性を保つのは大変なことだと思っています。

こういったメンテナンスが少しでも楽になりそうなSchemaSpyを利用して、既存の実装からどれくらいのレベルのドキュメントが生成できるかを試してみました。

SchemaSpyとは?

既存のデータベースからデータベースのドキュメントをHTMLで出力するJava製のツールとなります。
SchemaSpy

また、弊社ブログでも紹介させていただきました。
Apache AirflowのER図をSchemaSpyで自動生成するようにしてみた | DevelopersIO

環境

  • macOS Mojave 10.14.6
  • SchemaSpy 6.1.0
  • Java 1.8.0_222
  • MySQL 5.7.27

必須要件として、Java8が必要となります。
SchemaSpy | requirements

ドキュメントを生成

以下の通り、テーブルとビューを用意します。

CREATE TABLE groups (
    group_id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    group_name VARCHAR(50)
);

CREATE TABLE users(
    user_id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    group_id INT,
    CONSTRAINT fk_group_id FOREIGN KEY(group_id) REFERENCES groups(group_id)
);

CREATE VIEW sample_view(
    user_id,
    first_name,
    last_name,
    group_name
) AS
SELECT
    u.user_id,
    u.first_name,
    u.last_name,
    g.group_name
FROM
    users u
    INNER JOIN
        groups g
    ON  u.group_id = g.group_id
;

続いて出力対象のデータベース接続情報を設定します。この設定はファイルまたはコマンドライン引数で指定できます。 今回はファイルにて指定することにしました。
SchemaSpy | configuration

# type of database. Run with -dbhelp for details
schemaspy.t=mysql
# optional path to alternative jdbc drivers.
schemaspy.dp=mysql-connector-java-5.1.48-bin.jar
# database properties: host, port number, name user, password
schemaspy.host=[ホスト名]
schemaspy.port=[ポート番号]
schemaspy.db=[データベース名]
schemaspy.u=[ユーザ名]
schemaspy.p=[パスワード]
# output dir to save generated files
schemaspy.o=output
# db scheme for which generate diagrams
schemaspy.s=[スキーマ名]

出力を実行するディレクトリは以下の通り準備しました。

[実行ディレクトリ]
├── mysql-connector-java-5.1.48-bin.jar     JDBCドライバ
├── output                                  出力ディレクトリ
├── schemaspy-6.1.0-SNAPSHOT.jar            SchemaSpy本体
└── schemaspy.properties                    設定ファイル

準備が整ったので、以下のコマンドを叩き実行します。

java -jar schemaspy-6.1.0-SNAPSHOT.jar -configFile schemaspy.properties -vizjs

設定したディレクトリ配下にHTMLファイル一式が出力されます。

ドキュメントの内容

出力されたファイルの中で、データベースのドキュメントとして利用できそうな箇所を確認してみます。

テーブル一覧

テーブル名、カラム数、レコード数などが一覧出力されます。テーブルに加えてビューも出力されます。 また、出力結果をクリップボード、Excel、CSV、PDFで出力することもできます。

テーブル詳細

カラム名、型、サイズなどが出力されます。また、各種キー情報やインデックス情報も出力されます。

ER図

さいごに

出力内容はいかがでしょうか?データベースのドキュメントとしては十分な情報が出力されていると思います。 コマンドで出力することができるので、CIに組み込み継続的に実行することで、幸せになれる気がします。

データベースのドキュメントのメンテナンスが大変だと思っている方は、試してみてはいかがでしょうか。