素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

【さらばER図設計作業】docker-composeで「SchemaSpy」でデータベースのドキュメントを自動生成するやり方【DBリバースエンジニアリング】

投稿日: 2019年4月20日
最終更新日:

スポンサーリンク

336×280




DBの設計書、保守するのめんどくさい問題

皆さんはシステム開発を行う際にDB設計をしたことはありますでしょうか?

データベースの種類はOracleやMySQL、PostgreSQL、MariaDBなど様々な種類がありますが、リレーショナルDBであれば基本的には設計の仕方は変わりません。

また、DBは大切なデータを蓄積し、システム側の様々な機能から呼び出されるのでしっかりと設計を行う必要があります。

そして設計をするということはもちろん、設計書も必要になりますよね。

しかし、このDB設計書というものはとても保守がめんどくさいのが実態です。orz

エクセルで管理すると、自動反映が出来ないので常にソース(DDL文)と二重管理をする必要が出てしまったり、Gitによる差分管理も出来ません

ERMasterEnterprise Architect(有料)を使えば、ある程度は自動出力が出来ますが、やはりヒューマンエラーが発生する可能性があります。

果たして、何が最善なのだろうか。。。

と、悩んでいたところ良さそうなツールを見つけてしまいました!

SchemaSpy

SchemaSpyとは?

SchemaSpyとは、既存のDBをクローリングして自動でテーブル構造やカラム、PK/FKなどの定義をHTMLドキュメントとして吐き出してくれるツールとなっています!


Do you hate starting on a new project and having to try to figure out someone else’s idea of a database? Or are you in QA and the developers expect you to understand all the relationships in their schema? If so then this tool’s for you.SchemaSpy — SchemaSpy 6.0.0 documentation

最高じゃん!!!

メリット

Point

  • HTMLなのでGit管理可能
  • UIが見やすい
  • クリックで簡単に参照先のTBLを見ることが出来る
  • 様々なDBに対応
  • 自動化なのでヒューマンエラーが無い
  • CIなどの自動化に組み込める

Dockerでサクッと使える

SchemaSpyはJava製なので、Java8がインストールされている環境であれば簡単に実行することが出来ます。

しかし、Javaのバージョン問題描写をするための必須ライブラリ(graphviz)が必要な場合もあるため、準備がちょっとめんどくさいです。

そんな面倒くさがり屋さん向けに、Docker環境で簡単に実行するためのイメージがDocker Hubで公開されているので、そちらを使えばコマンド一発で実行する事が可能です!

今回はDockerを使った実行方法についてご紹介していこうと思います。

使い方

前提

今回はDockerがローカルで動く事が前提です。

プロパティファイルの準備

まずはschemaSpy実行時に読み込む設定ファイルを用意しましょう。

Dockerで起動

あとは、Dockerコマンドが使える状態であれば、以下のコマンドを叩くだけで既存のデータベースをクローリングして自動でドキュメントを生成してくれます!

以下のような実行ログが出れば無事に生成されていると思います。

成果物

ディレクトリ構造

成果物は以下のようなディレクトリ構造になっています。(第2階層以降略)

UIもとても見やすく、クリックすることでテーブル構造の詳細画面に飛べるのでとても便利です!

publicスキーマしか出力されない問題

原因

デフォルトだと、publicスキーマしか読み込まれないらしいです。

ぐぬぬ。。。

全部のスキーマを出力することはオプションで可能

しかしご安心を。

schemaspyのドキュメント をみると、出力対象のスキーマを指定するコマンド引数が複数用意されていました。

引数 概要 キャプチャ
-s {スキーマ名} 特定の一つのスキーマを出力対象にする
※この場合はスキーマ一覧画面は生成されない
-schemas {スキーマ名A}[,{スキーマ名B}...] ,」区切りで複数のスキーマを出力対象にする
-all 対象DBのすべてのスキーマを出力対象にする
※システム関連のスキーマも出力される

とりあえずはこの3つの引数を使い分ければ良いでしょう。

動作確認

では、試しに-allすべてのスキーマを出力してみましょう。

正常にすべてのスキーマが出力されていますね♪

HTML構造なのでリンク先に飛べるのがとても便利ですしUIも見やすい
また、S3などにおけばブラウザで閲覧出来るドキュメントにもなりますし、エクセルや画像出力では不可能だったgit管理での差分把握も可能になるので、開発/運用/保守としてもかなりスマートになりますね♪

終わりに

以上のように、めんどくさいER図やリレーションの設計書起こしをやる手間が省けました!

CIツールなどを使えば、開発者はDDLの設計だけに専念し、ローカルでDDLを適用してSchemaSpyでドキュメント出力したものをレビューして修正、のようなフローも可能になると思います。

今回のようなリバースエンジニアリングは作業効率をとてもあげる手法なので、皆さんもぜひ使ってみてはいかがでしょうか♪

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , , , , , , ,

blogenist

Author: blogenist