Help us understand the problem. What is going on with this article?

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が作成されるので、ブラウザで見てみましょう。

image.png

とても全体を見切れないことがわかりました。テーブル単位で見てみましょう。
issuesテーブルがRedmineの要なので、ここを見てみました。

image.png

なんとか見れないこともないですが、データベースのカラム名から推察しているので、Redmineのソースコードを読み取っているわけではありません。ActiveRecordで独自に作成されたリレーションは取り込めないということですね。手でリレーションを追加することもできますが、自動化したいという目的には合っていません。

まとめ

外部キー制約が貼られているのであれば、ER図の作成を非常に効率化できそうです。
しかしRailsのソースコードを解析していないので、精度の高いER図を出力するには別の手段が必要だと分かりました。
Rails ERDというツールがあったので、こちらを調べてみようと思います。

参考情報

https://blog.hatappi.me/entry/2017/03/28/083000

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away