SchemaSpyを使って、RedmineのER図作成を自動化する


目的

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オプションは、指定しないとエラーになりました

config.file
# 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というツールがあったので、こちらを調べてみようと思います。

参考情報