Rails, GraphvizとRailRoadで設計確認

いつも最初にきちんと設計するんですが、あれこれと仕様変更でどんどんコードが変わっていく・・

しかもRspecでテスト書いているので仕様変更にも柔軟に対応できてしまう。

そうなると、後でこれってどうなってたっけ?みたいなことになる。

そんなときに簡単に設計をチェックできる、いわゆるリバースエンジニアリングに近いことができます。

http://www.graphviz.org/

http://railroad.rubyforge.org/

# sudo port install graphviz
# sudo gem install railroad

RAILS_ROOTに移動して、コマンド実行。

# railroad -C -o doc/controllers.dot
# railroad -M -o doc/models.dot
# neato -Tpng doc/controllers.dot > doc/controllers.png
# neato -Tpng doc/models.dot

簡単なクラス図を生成してくれます。

いちいちコマンドが面倒なのでrakeタスクにしちゃいます。

namespace :doc do
  namespace :railroad do
    task :models do
      sh "railroad -i -l -a -m -M -o doc/models.dot"
      sh "neato -Tpng doc/models.dot > doc/models.png"
    end

    task :controllers do
      sh "railroad -i -l -C -o doc/controllers.dot"
      sh "neato -Tpng doc/controllers.dot > doc/controllers.png"
    end
  end
  task :railroad => %w(railroad:models railroad:controllers)
end

私はコントローラーのアクションとか確認するのによく使います。

広告

RubyGems, install rack

rackを本格的に導入したいので検証。

http://rack.rubyforge.org/

ブラウザ⇔サーバ⇔rack⇔フレームワーク⇔アプリケーション

% sudo gem install rack

ついでにpassengerも対応しているのでアップデート。2.0.5だった。

1.0.xの時にすごく苦労してたのは記憶に新しい。

webサーバはapacheかmongrelの2択だし、一応いれとこう。

% sudo gem install passenger

フレームワークはまだ検証してないけど色々とあるみたい。

halcyonに失敗したので、あとで纏めてチェック!!!

RubyGems, install halcyon

% sudo gem install halcyon

エラーでたよー

% halcyon init my_app
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- merb-core/vendor/facets (LoadError)
	from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
	from /opt/local/lib/ruby/gems/1.8/gems/halcyon-0.5.4/bin/../lib/halcyon.rb:3
	from /opt/local/lib/ruby/gems/1.8/gems/halcyon-0.5.4/bin/../lib/halcyon.rb:3:in `each'
	from /opt/local/lib/ruby/gems/1.8/gems/halcyon-0.5.4/bin/../lib/halcyon.rb:3
	from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
	from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
	from /opt/local/lib/ruby/gems/1.8/gems/halcyon-0.5.4/bin/halcyon:3
	from /opt/local/bin/halcyon:19:in `load'
	from /opt/local/bin/halcyon:19
% 

あとで調べておこう。

MacPorts, fetch failed

treeに限ったことではないが、たまに起こる現象。

% sudo port install tree
--->  Fetching tree
--->  Attempting to fetch tree-1.5.1.1.tgz from ftp://mama.indstate.edu/linux/tree/
--->  Attempting to fetch tree-1.5.1.1.tgz from http://svn.macports.org/repository/macports/distfiles/tree
--->  Attempting to fetch tree-1.5.1.1.tgz from http://svn.macports.org/repository/macports/distfiles/general/
--->  Attempting to fetch tree-1.5.1.1.tgz from http://svn.macports.org/repository/macports/downloads/tree
Error: Target org.macports.fetch returned: fetch failed
Error: Status 1 encountered during processing.

回避策

% sudo env MASTER_SITE_LOCAL=http://distfiles.macports.org/tree/ port -v fetch tree
--->  Fetching tree
--->  tree-1.5.1.1.tgz doesn't seem to exist in /opt/local/var/macports/distfiles/tree
--->  Attempting to fetch tree-1.5.1.1.tgz from http://distfiles.macports.org/tree/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 30792  100 30792    0     0  20523      0  0:00:01  0:00:01 --:--:-- 42766
% sudo port install tree
--->  Verifying checksum(s) for tree
--->  Extracting tree
--->  Applying patches to tree
--->  Configuring tree
--->  Building tree with target all
--->  Staging tree into destroot
--->  Installing tree 1.5.1.1_0
--->  Activating tree 1.5.1.1_0
--->  Cleaning tree

OK。