ER図(Entity Relationship Diagram)はDBテーブルを関連性と属性を使って表す図のことです。
プロジェクトにジョインする時とか、ER図を書きながらテーブル構成を把握すると捗りますよね!
とはいえ、テーブル数が数百を超えると手書きは時間がかかるし、機能的に重要でないテーブルとかもあり効率が悪くなってきます。
(ツールを使ってもいいですが、テーブルの追加があった時にわざわざメンテするの忘れがちになってしまいますしね)
エンジニアらしく効率的に作れないかな🤔と思っていたら、ER図を自動生成するSchemaSpyというツールがあったので、使い方と共に紹介します。
SchemaSpyについて
↓ER図サンプル
https://schemaspy.org/sample/index.html
オープンソースのER図自動生成ツールで、
dockerベースとjarベース(Java製アプリケーション)の2種類で使うことができます。
使えるRDBMS主だったところ(Mysql,Postgresql,Oracle,SQLServer)なら問題なく使えます。
使用してみたわかったこと・感想は、以下の通り。
・300テーブルくらいのER図を約5m半で作成 (テーブルのレコード数とかも出力するので、DBの状態によって前後するかも)
・各レコードの統計も出力
・基本は外部キー制約設定を元にリレーション分析するが、オプション(-rails
)で暗黙のリレーションもチェックしてER図を作成してくれる
暗黙のリレーションとは、products
にINT型category_id
がありcategories
というテーブルがあったら、
products.category_id
をcategories.id
でリレーションがあると判断する感じのやつのことです。
サクッとできるので、さっそくやってみましょうー🏃♀️
手順
前提として、今回はdocker
ベースで、Mysql5.6
でER図を作成する方法でやってます。
ダウンロード
githubリポジトリのReleasesから最新版をDLしていきます。
CodeからDLしようかなーとも思ったんですが、公式ドキュメントのInstallationのリンクから飛んだ先がReleasesなので、それに従いましょう。
続いて、Releaseページの最新版のうち、zip
かtar
をDL。
コマンド実行
DLしたら解凍し、解凍したディレクトリ内に移動してdockerコマンドを実行します。
参考までに、私が開発環境でER図を作成した時のコマンドを記載します。
docker run -v "$PWD/schema:/output" --net="host" schemaspy/schemaspy:snapshot \
-t <DBの種類(mysql postgresqlなど)> -host <ホスト:ポート [例localhost:3306]> -db <スキーマ名> -u <ユーザ名> -p <パスワード> -connprops useSSL\\=false -s <スキーマ名>
他の方の投稿されている記事のコマンドとほぼ同じですが、
私の場合はrg.schemaspy.model.InvalidConfigurationException: Schema (-s/-schemas) was not provided and unable to deduce schema, schema is sometimes referred to as user/owner/database
というエラーが出て、-s
オプションを追加することで解消しました。
-dbと-s両方でスキーマ名指定しているので、どちらか一方だけの指定だけで大丈夫な方法があるかも。
公式でオプションの説明が色々記載されてますが、おおよそ使いそうなのを下記にまとめました。
導入の際には色々試してもらえればと思います。
オプション | 意味 | 必須 |
---|---|---|
-t | RDBMSタイプ(mysql pgsql ,sqlite , ora など。デフォルトはora ) |
○ |
-db | DBスキーマ名 | ○ |
-u | 接続ユーザ名 | ○ |
-p | 接続ユーザのパスワード | ○ |
-host | 接続先ホストとポート番号 | ○ |
-connprops useSSL=false | MySQL 5.5.45+, 5.6.26+ and 5.7.6+環境の場合、SSLを省略して接続するためのオプション | △ |
-s | スキーマ指定。ユーザ名とスキーマ名が同じ時は省略可能 | △ |
-rails | railsベースの論理リレーションを探索するオプション | |
-o | ファイルの出力先(デフォルトはカレントディレクトリ) | |
-debug | 実行中にデバッグログを出力 |
参考資料