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

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

まだER図の管理で消耗してるの? SchemaSpy でER図を自動生成して管理する 

はじめまして。謎の集団ZeneloでDBAやらSREの見習いをやっている者です。
初めてQiitaを書くので、煽りタイトルの割には駄文かつかなり内容が薄いですがご了承ください。 :bow:

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

指定したテーブルの関連する部分だけ表示させてくれる

見たいテーブルをクリックすると、そのテーブルと直接関係をもつテーブルだけを表示してくれます。
image.png
しかも、各関連テーブルはリンクになっていて、クリックするとそのテーブルの詳細ページに飛べるようになっています。
複数のテーブルを管理するDBの場合、一般的なER図のツールではテーブルが多すぎて何を見ればいいのかわからなくなる場合があるのでとても助かる機能です。

もちろん全体図も表示することも可能。
http://schemaspy.org/sample/relationships.html

最後に

codebuildなどと組み合わせて、トリガーが発動したら、ER図を生成して、S3にpublishする仕組みを作ればER図を管理する苦労から開放されます。 あの重いEclipseを開かなくてよくなる。 ERMasterからの移行はまだできていませんが、AWSリソースを用いた仕組みの部分についてはまた後日書こうかなと思います。

ap8322
Scalaエンジニアから、SRE兼DBA見習いへ
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