rails-erd でいい感じの ER図を出す
諸事情で ER図をとても作りたくなることってよくありますよね。
rails で開発しているプロジェクトだと rails-erd というツールを使うと
モデル定義から簡単に ER図っぽいものを生成できるのですが、
なにもオプション指定をしないと複雑で読みづらいものができてしまうことがあります。
- Form オブジェクトが表示されてしまう
- 使っている gem のクラス (audit など) が表示されてしまう
- created_by や updated_by など、users モデルの参照がごちゃごちゃしてしまう
- has_many :through の関係が点線で表示されている
- カラムの表示がアルファベット順になっている
また、表示されている内容をよく見ると id や created_at などの標準カラムや、
foreign_key が貼られている参照カラムなども表示されていません。
このあたり、ちょっと整理しないと **ER図** としてはちょっと読みづらいですよね。
というわけで、ちょっと手を入れて見やすい図にする工夫をしてみました。
bundle exec rake erd filetype=dot attributes=foreign_keys,primary_keys,timestamps,inheritance,content indirect=false sort=false ruby -e '\ dot = open("erd.dot").read dot.gsub!(/^\s*".*?::.*?;\n/m, "") # remove Ruby classes (Form, Audit, ...) dot.gsub!(/^.*? -> ".*?::.*?;\n/, "") # remove relation to Ruby classes dot.gsub!(/^(\s*m_User -> .*?;\n)\1{2}/m, "") # remove created/updated/deleted_by releations print dot ' > output.dot dot -Tpdf -o erd.pdf output.dot dot -Tpng -o erd.png output.dot
工夫してるところは以下のとおりです。
- rails_erd
- 出力内容を加工するために画像ではなく dot 形式で出力
- attributes オプションを指定して、すべてのカラムを表示させる
- indirect=False を指定して、has_many :throught の点線を表示しない
- sort=False を指定して、カラムをソートさせない
- フィルタ処理
- Form オブジェクトや gem など、Ruby のクラスっぽいもの (:: を含むもの)を除外
- User モデルへの参照は読みづらいので削除
大したことはやってないのですが、あとで忘れそうなので備忘として。
※ 諸事情でお手伝いしたやつなので、具体的なサンプルはお見せできません。あしからず。