- 2010-09-07 (火) 0:00
- Vim Hacks
問題
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は非同期で実行できるため、気になりません。
参考
Hack #176: RSpecをquickrunする (2/2)
ujihisa
- Newer: Hack #173: Vimでタイマー機能を模倣する
- Older: Hack #171: 編集している関数名を表示する
Comments:2
- kakkyz 10-10-26 (火) 16:53
-
自明かもしれませんが、vimrcに let g:quickrun_config['ruby.rspec'] = {‘command’: ‘spec’} の行を追加する前に let g:quickrun_config = {} の行を追加してからでないとエラーが出てしまいました(windows版)。
- ujihisa 10-10-27 (水) 6:49
-
ありがとうございます! いま、こっそり加筆しておきました。
Trackbacks:0
- Trackback URL for this entry
- http://vim-users.jp/2010/09/hack172/trackback/
- Listed below are links to weblogs that reference
- Hack #172: RSpecをquickrunする (1/2): from Vim-users.jp

