LoginSignup
6
4

More than 1 year has passed since last update.

SchemaSpyでER図をパパッと自動生成する

Last updated at Posted at 2022-04-06

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_idcategories.idでリレーションがあると判断する感じのやつのことです。

サクッとできるので、さっそくやってみましょうー🏃‍♀️

手順

前提として、今回はdockerベースで、Mysql5.6でER図を作成する方法でやってます。

ダウンロード

githubリポジトリのReleasesから最新版をDLしていきます。

image.png

CodeからDLしようかなーとも思ったんですが、公式ドキュメントのInstallationのリンクから飛んだ先がReleasesなので、それに従いましょう。

続いて、Releaseページの最新版のうち、ziptarをDL。

image.png

コマンド実行

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 実行中にデバッグログを出力

参考資料

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4