はじめまして。謎の集団ZeneloでDBAやらSREの見習いをやっている者です。
初めてQiitaを書くので、煽りタイトルの割には駄文かつかなり内容が薄いですがご了承ください。
ER図を手で管理するのはつらい
現在、謎の集団zeneloではER図を ERMaster というツールで管理している。 ERMasterは細かい部分までER図を表現できる素晴らしいツールではあるが、Json型やDatetime(6)など対応していない為表現できない型があったり、Eclipseを開かなければならないなどいくつかの課題があります。
何より手で管理するのがつらく、 ER図を作成するのは、SRE用語で言うトイルにあたる作業である為、
SREを志す身としては、このトイルを撲滅したいと思い、何か良いツールがないかを探していました。
そこでSchemaSpyの登場
SchemaSpyとは、指定したDatabaseのテーブルの情報(ColumnやIndex)や、リレーション(ER図)などをよしなにhtmlに出力してくれるツールです。
あのメルペイ様でも使用事例があり、CircleCIで自動生成しているそうです。
https://tech.mercari.com/entry/2018/05/25/133818
また、githubの「database-diagrams」タグで一番のスター数であり、開発も盛んに行われているようです。
https://github.com/topics/database-diagrams
SchemaSpyのいいところ
UIがキレイ
この手のツールは一昔前の堅苦しいUIのイメージ(偏見)ですが、今風のUIでとても見やすいです。
サンプルのリンク
http://schemaspy.org/sample/index.html
docker run で作成できる
schemaspyは、dockerのimageを予め提供してくれているので、dockerを実行できる環境さえあれば、以下のコマンドで一発で作成できる。
これによりcodebuildなどのCI上で実行することにより、ER図の自動生成をすることができる。
docker run -v "$PWD/schema:/output" --net="host" schemaspy/schemaspy:6.1.0 -t mysql -host $ENDPOINT:3306 -db $DB_NAME -u $DB_USER -p $DB_PASSWORD -connprops useSSL\\=false -s information_schema
※ バージョンは2020/05/25現在最新のバージョンの6.1.0を指定
使い方は以下のQiitaの記事がわかりやすかったです。
https://qiita.com/kamukiriri/items/ab1669c19831c18db9ee
https://qiita.com/miurabo/items/9cd5826db0018177db6d
指定したテーブルの関連する部分だけ表示させてくれる
見たいテーブルをクリックすると、そのテーブルと直接関係をもつテーブルだけを表示してくれます。
しかも、各関連テーブルはリンクになっていて、クリックするとそのテーブルの詳細ページに飛べるようになっています。
複数のテーブルを管理するDBの場合、一般的なER図のツールではテーブルが多すぎて何を見ればいいのかわからなくなる場合があるのでとても助かる機能です。
もちろん全体図も表示することも可能。
http://schemaspy.org/sample/relationships.html
最後に
codebuildなどと組み合わせて、トリガーが発動したら、ER図を生成して、S3にpublishする仕組みを作ればER図を管理する苦労から開放されます。 あの重いEclipseを開かなくてよくなる。 ERMasterからの移行はまだできていませんが、AWSリソースを用いた仕組みの部分についてはまた後日書こうかなと思います。