データベースドキュメント生成コマンド tbls 更新情報 ( MySQLに対応/ER図自動生成/リレーション・コメント追加機能 etc)

tbls更新情報です。

やっと、もともと実装したいと思っていた機能をすべて実装できましたので紹介します。

なお、tblsコマンドについては以下のエントリに書いています。

k1low.hatenablog.com

追加機能 ( ~ v0.8.2 )

MySQL対応

まずはPostgreSQLを対応しましたが、MySQLの要望もあったので対応しました(もともと対応予定でしたが要望をいただいたので急ぎました)。

tbls doc mysql://user:pass@hostname:3306/dbname ./dbdoc

というような形でPostgreSQLと同じようにデータベースドキュメントを生成できるようになっています。

ER図作成機能

tbls コマンドを実行する環境で、Graphvizdot コマンドが実行できる場合は、 自動で dot コマンドを利用して以下のようなER図を生成してドキュメントに配置するようにしました。

f:id:k1LoW:20180610230630p:plain

ER図があったほうが視覚的にわかりやすいので、以外に便利です。

リレーション・コメント追加機能

tblsは外部キー制約を見てテーブル間のリレーションを判断します。

しかし、スキーマによっては、ORMにリレーション設定を任せていたりその他様々な理由で外部キーを張ることができないことがあると思います。

そのようなスキーマでも、テーブル間のリレーションをER図やドキュメントのテーブル情報に付与したい場合のために、追加でリレーションをtblsコマンドに渡すことができるようにしました。

具体的には --add オプションにYAMLファイルのパスを渡します。

$ tbls diff mysql://user:pass@hostname:3306/dbname --add path/to/additional_data.yml

追加するYAMLファイルは以下のように指定します。

---
relations:
  - # logsテーブルにおける FOREIGN KEY(user_id) REFERENCES users(id) と同様
    table: logs
    columns:
      - user_id
    parentTable: users
    parentColumns:
      - id
    def: logs->users
  - # logsテーブルにおける FOREIGN KEY(post_id) REFERENCES posts(id) と同様
    table: logs
    columns:
      - post_id
    parentTable: posts
    parentColumns:
      - id

また、--add オプションで渡すYAMLファイルで、テーブルコメントやカラムコメントも上書き追加可能です。

コメント修正のためにSQLを流す必要がなくなりますし、通常のテーブルだけでなくVIEWテーブルのカラムにもコメントが付与できるので便利です。

comments:
  -
    table: post_comments
    tableComment: 各投稿についたコメントの詳細確認用VIEWテーブル
    columnComments:
      post_user: 投稿したユーザ名
      comment_user: コメントしたユーザ名

テーブル定義(DDL)をドキュメントで確認できるように

PostgreSQLはVIEWテーブル、MySQLはテーブルとVIEWテーブルのテーブル定義をドキュメントから確認できるようにしました。

例えばVIEWテーブルTable Definition というリンクがあった場合、クリックするとテーブル定義を確認できるようになっています。

f:id:k1LoW:20180610233020p:plain

というわけで

更新が激しいサービスのデータベースやドキュメントのなかったデータベースにたった1コマンドでデータベースのドキュメントを生成できるtbls、是非使ってみてください!