松村 Advent Calendar 2016 の15日目です。 @muramurasan です。
RailsERD
RailsERDという、出力したいModelをオプションで指定して、コマンドラインでER図を出力できるgemがあります。
Perfect Ruby On Rails という本でも紹介されているgemで、ささっとER図を出力するには非常に強力なgemです。
そんな RailsERD ですが、利用する上で欲しくなってきた機能がありました。
それが、「yamlファイルに記述したModelに従ってER図を出力する」という機能です。
RailsERD単体だと何が困るか
というのも、このRailsERD、毎回コマンドラインでModelを指定して出力するのですが、繰り返し出力することを考えると、手間を感じるのです。
書き捨てのER図ならば、コマンドラインでも良いんですが、実運用を考えると任意のモデル群の図を、複数枚出力したい、モデルが更新されるたびに......ということが想定できます。
例えば、「決済」「カート」「検索」など、ドメイン毎に図を出力したい、かつ、変更があればER図を出力し直したい......といった感じです。
そこで、RailsERDをラップして「yamlファイルに記述したModelに従ってER図を出力する」というgemを作成しました。
FreshERD
前段の説明通り、yamlファイルに記述したModelに従ってER図を出力する、というgemです。
コアの機能は本家RailsERDに依存しており、例えば、最新の rails-erd 1.5
を利用すれば、Railsプロジェクト以外にも適用できたりします。
前置きはこの辺で、使い方と、実際に使ってみた例を紹介します。
インストール
Gemfileに下記の記述を追加して、bundle install
してください。
gem 'fresh_erd'
yamlの記述
Rails Tutorialのプロジェクトを例にyamlを記述してみます。
diagrams: tweet: - User - Micropost all: - User - Micropost - Relationship
tweet
、all
の単位でER図が出力されることになります。
このファイルを適当な名前、例えば、fresh_erd.yml
という名称で保存しておきます。
実際に使ってみた
以下のように、--input
オプションでyamlのパスを指定し、--output
オプションでER図を出力するフォルダを指定し、コマンドを叩きます。
$ bundle exec fresh_erd --input="fresh_erd.yml" --output="./"
以下が実行結果です。
--- Generate ERD : tweet Loading application in 'sample_app_rails_4'... Generating entity-relationship diagram for 4 models... Diagram saved to './tweet.png'. --- Generate ERD : all Loading application in 'sample_app_rails_4'... Generating entity-relationship diagram for 4 models... Diagram saved to './all.png'.
以下のようなER図が取得できます。
以上です!
ちなみにgitのフックと連携して、最新のER図が常にpushされるように......とか妄想しましたが、
やりすぎ感あるのでこの辺に留めておきました。(FreshERDという名前は、この妄想が由来です)