Hack #172: RSpecをquickrunする (1/2):
Posted at 2010/09/07ツイート
問題
Rubyでプログラムを書くときは必ずRSpecでその仕様を記述することが推奨されています。VimからRSpecを呼び出す方法は多々あり、一般に使われている方法は以下のいずれかでしょう。
- Vim Rspecを使う
- Specky!を使う
:!rspec %
するRakefile
にテストスイートを記述し、:!rake
あるいは:make
でrake
コマンドを走らせる:shell
またはvimshellからrspec
コマンドを直接走らせる- Vimの外から自動でRSpecを走らせる (一定時間間隔なり、ファイルが変更された時点なり)
しかしながら、いずれの方法も問題を抱えています。
- Vim Rspecを使う
- 依存ライブラリが多い。特にHpricotなど、今では誰も使用していないライブラリに依存してしまっている
- 実行結果を見るときにVimで他の処理ができない
- Rspecなど存在しない。RSpecが正しい
- Specky!を使う
- RSpecしたいだけの者には無駄な機能が多すぎる。特にsnippet
- RSpecの結果の失敗をquickfixとして使っているという設計上のミス (*1)
:!rspec %
する- 実行結果を見るときにVimで他の処理ができない
Rakefile
にテストスイートを記述し、:!rake
あるいは:make
でrake
コマンドを走らせる- 実行結果を見るときにVimで他の処理ができない
:shell
またはvimshellからrspec
コマンドを直接走らせる:shell
の場合、実行結果を見るときにVimで他の処理ができない- 汎用的すぎる
:shell
に入る/抜ける処理が必要
- Vimの外から自動でRSpecを走らせる (一定時間間隔なり、ファイルが変更された時点なり)
- 実行結果をVimから閲覧するのが容易でない
(*1): RSpecにおけるFailureと、一般的なプログラミングにおけるコンパイルエラーは全く別もの。コンパイルエラーは望まない結果だが、RSpecではまずFailureが出力されるよう開発するもので、例外的なものではない。異なる概念を同一視している。(←あくまで著者の個人的意見です)
解決法
常日頃使っている汎用プラグインquickrunを使います。~/.vimrc
に以下の設定を記述します。
let g:quickrun_config['ruby.rspec'] = {'command': 'spec'}
ただし、_spec.rb
なファイルをruby.rspec
という複合ファイルタイプにするために以下の設定も~/.vimrc
に記述します。
augroup UjihisaRSpec
autocmd!
autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
augroup END
また、他のquickrunの設定をお持ちでない場合、以下の行を先ほどの行よりも手前に記述しておきます。
let g:quickrun_config = {}
補足
quickrunとvimshellを組み合わせると、環境変数$PATH
を容易に変更できるため、どのspec
コマンドを用いるか容易に変更することができます。
また一般にspec
コマンドの実行には時間がかかりますが、quickrunは非同期で実行できるため、気になりません。
参考
ujihisaもどる
blog comments powered by Disqus