rails アプリから rails-erdでER図を出力するための準備

#はじめに
railsアプリからERDのpdfを出力できるという噂のrails-erd
とりあえず

```rb:Gemfile
（略）
rails-Graphviz
rails-erd
（略）
```

でbundle installして、ERD作成コマンドである`rake erd`を実行した。

```shell-session:zsh
%rake erd
```

怒られた。

```shell-session:zsh
%rake erd
Loading application environment...
Loading code in search of Active Record models...
Generating Entity-Relationship Diagram for 5 models...
rake aborted!
Saving diagram failed!
Verify that Graphviz is installed and in your path, or use filetype=dot.
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb:198:in `rescue in block in <class:Graphviz>'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb:190:in `block in <class:Graphviz>'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:142:in `instance_eval'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:142:in `save'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:120:in `create'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:74:in `create'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/tasks.rake:41:in `block (2 levels) in <top (required)>'
Tasks: TOP => erd => erd:generate
(See full trace by running task with --trace)
```
Graphvizがインストールされてるか確かめろ、もしくはファイルタイプをどっとにしろ、と。Graphviz というソフトを事前にインストールしておかねばならかなったのだ。

#準備1.Graphvizのインストール
Graphvizのページをみる。
http://www.graphviz.org/Download_macos.php
> Note: For some reason, the Graphviz app no longer works in the 2.38 and 2.39 packages for Mountain Lion (and Maverick). If you just need the command-line tools and libraries, these still work and are installed in /usr/local as usual. If you want the app, you can get it from homebrew or macports, or use the 2.36 version below.

最新の2.38はやつはMountain Lion (and Maverick)で動かねえよと。下の2.36 pkgかhomebrewとかmackportsでいれてね、とのこと。

とりあえずここを参考に
http://www.graphviz.org/Download..php

> Mac OS X
MacPorts provides both stable and development versions of Graphviz and the Mac GUI Graphviz.app. These can be obtained via the ports "graphviz", "graphviz-devel", "graphviz-gui" and "graphviz-gui-devel".
Homebrew has a graphviz port (so just brew install graphviz, we hope).

"we hope"という表現に若干の不安を覚えつつ `brew install graphviz`でインストールした。無事インストールはできた。


#準備2.rails-erdで使用するフォントの変更
Graphvizいれたからもう大丈夫だろう！再度`rake erd`に挑戦したらまた怒られた。

```
%rake erd
Loading application environment...
Loading code in search of Active Record models...
Generating Entity-Relationship Diagram for 5 models...
rake aborted!
Saving diagram failed!
Graphviz produced errors. Verify it has support for filetype=pdf, or use filetype=dot.
Original error: 2014-07-26 12:32:48.605 dot[5891:d07] CoreText performance note: Client called CTFontCreateWithName() using name "Arial Italic" and got font with PostScript name "Arial-ItalicMT". For best performance, only use PostScript names when calling this API.
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb:195:in `rescue in block in <class:Graphviz>'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb:190:in `block in <class:Graphviz>'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:142:in `instance_eval'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:142:in `save'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:120:in `create'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:74:in `create'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/tasks.rake:41:in `block (2 levels) in <top (required)>'
Tasks: TOP => erd => erd:generate
(See full trace by running task with --trace)
```

メッセージから伺うに、フォントが悪いのかな？と思い調べる。
https://github.com/voormedia/rails-erd/issues/61 のhayduke19us（commented on 11 Dec 2013）は「fontnameをPostscriptフォントなやつにしろ」といっている。とりあえず指摘されている2箇所を確認。

##rails_erd/diagram/graphviz.rb
```rb:/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb

module RailsERD
  class Diagram
    # Create Graphviz-based diagrams based on the domain model. For easy
    # command line graph generation, you can use:
    #
    #   % rake erd
    #
    # === Options
    #
    # The following options are supported:
    #
    # filename:: The file basename of the generated diagram. Defaults to +ERD+,
    #            or any other extension based on the file type.
    # filetype:: The file type of the generated diagram. Defaults to +pdf+, which
    #            is the recommended format. Other formats may render significantly
    #            worse than a PDF file. The available formats depend on your installation
    #            of Graphviz.
    # notation:: The cardinality notation to be used. Can be +:simple+ or
    #            +:bachman+. Refer to README.rdoc or to the examples on the project
    #            homepage for more information and examples.
    # orientation:: The direction of the hierarchy of entities. Either +:horizontal+
    #               or +:vertical+. Defaults to +horizontal+. The orientation of the
    #               PDF that is generated depends on the amount of hierarchy
    #               in your models.
    # title:: The title to add at the top of the diagram. Defaults to
    #         <tt>"YourApplication domain model"</tt>.
    class Graphviz < Diagram
      NODE_LABEL_TEMPLATES = { :html => "node.html.erb", :record => "node.record.erb" } # @private :nodoc:

      NODE_WIDTH = 130 # @private :nodoc:

      # Default graph attributes.
      GRAPH_ATTRIBUTES = {
        :rankdir => :LR,
        :ranksep => 0.5,
        :nodesep => 0.4,
        :pad => "0.4,0.4",
        :margin => "0,0",
        :concentrate => true,
        :labelloc => :t,
        :fontsize => 13,
        :fontname => "Arial Bold"
      }

      # Default node attributes.
      NODE_ATTRIBUTES = {
        :shape => "Mrecord",
        :fontsize => 10,
        :fontname => "Arial",
        :margin => "0.07,0.05",
        :penwidth => 1.0
      }

      # Default edge attributes.
      EDGE_ATTRIBUTES = {
        :fontname => "Arial",
        :fontsize => 8,
        :dir => :both,

```

この辺かー。バックアップとって修正する。とりあえずフォントは"Courier"にした。
`:fontname => "Courier"`に変更。

##rails_erd/diagram/templates/node.html.erb
ビューでもfontfaceでfont指定している箇所があるので、要修正。

```rb:/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/templates/node.html.erb
<% if options.orientation == :vertical %>{<% end %>
<table border="0" align="center" cellspacing="0.5" cellpadding="0" width="<%= NODE_WIDTH + 4 %>">
  <tr><td align="center" valign="bottom" width="<%= NODE_WIDTH %>"><font face="Arial Bold" point-size="11"><%= entity.name %></font></td></tr>
</table>
<% if attributes.any? %>
|
<table border="0" align="left" cellspacing="2" cellpadding="0" width="<%= NODE_WIDTH + 4 %>">
<%   attributes.each do |attribute| %>
  <tr><td align="left" width="<%= NODE_WIDTH %>" port="<%= attribute %>"><%= attribute %> <font face="Arial Italic" color="grey60"><%= attribute.type_description %></font></td></tr>
<%   end %>
</table>
<% else %>
<% end %>
<% if options.orientation == :vertical %>}<% end %>
```
`font face="Courier"`にした。

#再挑戦=>成功！！

再挑戦

```shell-session:zsh
%rake erd
Loading application environment...
Loading code in search of Active Record models...
Generating Entity-Relationship Diagram for 5 models...
Done! Saved diagram to erd.pdf.
```
やったー！プロジェクトルート直下にpdfファイルができたよ。

```shell-session
%ls
Gemfile
README.rdoc
app
config
db           
lib          
public       
tmp
Gemfile.lock 
Rakefile     
bin          
config.ru    
erd.pdf      
log          
test         
vendor
```

こんな感じのができた（適当なモデルだから恥ずかしい）
![スクリーンショット 2014-07-26 12.59.03.png](https://qiita-image-store.s3.amazonaws.com/0/7046/36e418dd-6d2a-6795-a012-537f18cbd971.png)

Courierだとなんとなくかわいい。えがったえがった。