目的
RedmineのER図が無かったのだが、手で描くのが非効率なのでなるべく自動化したかったため
方法
SchemaSpyを使用。railsモードを使ってER図を描画した。
公式:
https://schemaspy.readthedocs.io/en/latest/index.html
環境情報
- CentOS 7
- MySQL 5.7.26
- MySQL JDBCドライバ 5.1.48
- SchemaSpy 6.1.0
実施スクリプトのディレクトリ構成
※ 出力ディレクトリは割愛しています。
schemaspy
├─config
│ config.file
│
└─jar
mysql-connector-java-5.1.48.jar
schemaspy-6.1.0.jar
制御ファイル
jarファイルや、ER図の出力ディレクトリは、フルパスで記述しています。
データベース名も含め、適宜、自身の環境に読み替えてください。
schemaspy.sオプションは、指定しないとエラーになりました。
# type of database. Run with -dbhelp for details
schemaspy.t=mysql
# optional path to alternative jdbc drivers.
schemaspy.dp=/media/sf_work/script/schemaspy/jar/mysql-connector-java-5.1.48.jar
# database properties: host, port number, name user, password
schemaspy.host=localhost
schemaspy.port=3306
schemaspy.db=ew_dev_redmine33x
schemaspy.u=root
# schemaspy.p=database_password
# output dir to save generated files
schemaspy.o=/media/sf_work/script/schemaspy/er_output
# db scheme for which generate diagrams
schemaspy.s=ew_dev_redmine33x
実行コマンド
java -jar /media/sf_work/script/schemaspy/jar/schemaspy-6.1.0.jar -configFile /media/sf_work/script/schemaspy/config/config.file -vizjs -rails -connprops useSSL\\=false
オプション解説:
- -vizjs
- Graphvizという描画モジュールを使わず、SchemaSpyに組み込まれている描画モジュールを使用する
- -rails
- DBに外部キー制約が定義されていなくても、カラム名から推察してリレーションの線を作ってくれる。RedmineはRailsで、かつ、外部キー制約がなかったので、このオプションを使った。
- -connprops useSSL\=false
- SSL関係でワーニングが出るのを回避したかったので、公式を参照して付けたオプション。
出力結果
出力ディレクトリに指定したフォルダにindex.htmlが作成されるので、ブラウザで見てみましょう。
とても全体を見切れないことがわかりました。テーブル単位で見てみましょう。
issuesテーブルがRedmineの要なので、ここを見てみました。
なんとか見れないこともないですが、データベースのカラム名から推察しているので、Redmineのソースコードを読み取っているわけではありません。ActiveRecordで独自に作成されたリレーションは取り込めないということですね。手でリレーションを追加することもできますが、自動化したいという目的には合っていません。
まとめ
外部キー制約が貼られているのであれば、ER図の作成を非常に効率化できそうです。
しかしRailsのソースコードを解析していないので、精度の高いER図を出力するには別の手段が必要だと分かりました。
Rails ERDというツールがあったので、こちらを調べてみようと思います。
参考情報