9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails ERD触ってみた

Last updated at Posted at 2024-04-23

はじめに

みなさまこんにちは。
今回、railsのgemであるRails ERDを使用してみたのでまとめました。

Rails ERDとは

RailsのモデルからER図を自動生成することができるgem
以下の画像のようにER図を自動生成してくれます。
erd.png

出典

セットアップ

Graphvizをインストール (オープンソースのグラフ可視化ソフトウェア)

Graphvizとはグラフ作成用のツールで、DOT言語というものを用いてテキストファイルを画像として出力することが できる便利なやつです。

$ brew install graphviz

rails ERDをgemに追加

Gemfile
group :development, :staging, :production do
 gem 'rails-erd'
end
$ bundle install

実行方法

これだけ

$ bundle exec erd

ちょっと待つと、こんな感じのファイルが生成されます。
スクリーンショット 2024-04-23 17.17.24.png


開いてみると、こんな感じのER図が生成されています。めちゃ便利。 今回はまぁまぁ適当にECサイトで使いそうなモデルを書いて出力してみました。

スクリーンショット 2024-04-23 17.18.15.png

カスタマイズもできます

オプションをつけるとカスタマイズ可能になります。
上で生成したER図にオプションをつけて生成します。

  • タイトルをつける
  • 主キーを表示
  • ファイルの名前をつける
  • 出力されるファイルの拡張子の設定(デフォルトだとpdf)
$ bundle exec erd --title="お試しECサイトER図" --attributes=primary_keys --filename=ec_test_er --filetype=png

するとこんな感じに出力されたりします
スクリーンショット 2024-04-23 17.26.06.png

その他オプションはこちらから
https://voormedia.github.io/rails-erd/customise.html

中身はどうなってんの?

詳しいことはあまりわかりませんでしたが、なんとなく、、、、

  • Rails がすでにモデルの情報や関連付けの情報などは用意していて、そのデータをrails erdで加工している。

  • ActiveRecord::Base.descendantsメソッドで、アプリケーション内の全てのActiveRecordモデルクラスを返している

  • reflect_on_all_associationsメソッドでモデルクラスのすべてのアソシエーションを返している。

    つまり、belongs_to、has_one、has_many、has_many :through、has_and_belongs_to_manyなどのすべてのアソシエーションを含む配列を返す

  • reflect_on_all_associationsメソッドから得られるAssociationReflection オブジェクト から関連付けに関する情報を得ている

  • エンティティ、カラムの情報(カラム名、PK, UK, FKなど)、関連付け、カーディナリティは、結局のところモデルと AssociationReflection オブジェクトからうまく情報を取り出して得ている

さいごに

いいねぇ

9
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
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?