カバレッジ測ってみた

最近つくっているプロジェクト(WeatherHacker)で、カバレッジを取り始めたら結構捗った。個人で進めているプロジェクトでは特に、どこまで進めば良いか・どこまで進んだのかが見えづらいので、指標化すること自体で単純に捗ると思う。位置がわからなかったら速度感わからないし、位置がわかれば速度や加速度がわかって、いろんな予想が付きやすくなりそう。何より、これだけやったみたいなモチベーションが湧いて良い。

simplecov

これまでカバレッジ測定とか個人でしたことなくて、Rubyカバレッジ測定するやつを聞いたら@aerealさんがSimpleCovというのを教えてくれて、調べて導入してみたら、かなり簡単にカバレッジを取ることができた。まとめると、こういう感じで導入できる。

$ echo 'gem "simplecov", :require => false' >> Gemfile
$ bundle install
$ vim spec/spec_helper.rb
$ cat spec/spec_helper.rb

$LOAD_PATH.unshift File.expand_path("../", __FILE__)
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
require "simplecov"
require "weather_hacker"

$ echo "SimpleCov.start" >> .simplecov
$ echo ".simplecov" >> .git/info/excludes
$ bundle exec rspec
$ open coverage/index.html

simplecov-vim

simplecov-vimを使うと、カバレッジの有無をVimのマーカーで表示してくれて便利。

$ echo 'gem "simplecov-vim", :require => false' >> Gemfile
$ bundle install
$ vim .simplecov
$ cat .simplecov

require "simplecov-vim/formatter"
class SimpleCov::Formatter::MergedFormatter
  def format(result)
    SimpleCov::Formatter::HTMLFormatter.new.format(result)
    SimpleCov::Formatter::VimFormatter.new.format(result)
  end
end
SimpleCov.start do
  formatter SimpleCov::Formatter::MergedFormatter
end

$ bundle exec rspec
$ echo "coverage.vim" >> .git/info/excludes
$ vim lib/weather_hacker.rb
  :so /path/to/coverage.vim でマーカーが表示されれば成功

こうしたいとか

検証する(カバレッジを見る) => 考える => 変更する => 検証する(カバレッジを見る)、の回転をもっと速くしたいので、カバレッジはリアルタイムで更新されてほしい。@makimotoさんが寿司じゃないブログでGuardを紹介されていたので、Guard導入してみたいと思う。iPhoneとかにリアルタイム更新されるように可愛く表示して、カバレッジ60..70..80%..!?とかやりたい。

Coverage 100%, Do it.