Atom + ruby-testでchrubyを使う
環境
bashの場合
chruby/share/chruby/chruby.sh
と chruby/share/chruby/auto.sh
を .bashrc
などで読み込んでいれば特に設定はいらない。
zshの場合
chruby/share/chruby/chruby.sh
と chruby/share/chruby/auto.sh
を .zshrc
などで読み込んだだけではダメで、各テストコマンドの前に chruby_auto &&
をつける必要がある。
RSpec について設定した config.cson
はこんな感じ。
"ruby-test": rspecAllCommand: "chruby_auto && rspec --tty spec" rspecFileCommand: "chruby_auto && rspec --tty {relative_path}" rspecSingleCommand: "chruby_auto && rspec --tty {relative_path}:{line_number}" shell: "zsh" specFramework: "rspec"
なぜ chruby_auto &&
が必要なのか
chruby_auto
は chruby/share/chruby/auto.sh
で定義されている関数で、ディレクトリを親方向にたどって .ruby-version
が見つかったら、chruby
でそのバージョンのrubyを使うようにする。
zshの場合は定義するとともに $preexec_functions
にも登録するので、各コマンドの実行前に自動で実行される*1。
ruby-test はテストコマンドをシェルを立ち上げて実行しているが、本来ならば実行されてほしい chruby_auto
が実行されていない。
$preexec_functions
に chruby_auto
が登録されていることは確認できたのだが、どうやら肝心の $preexec_functions
自体が実行されていないっぽい。
というところまでわかったのだが、これ以上はzsh力が足りなくて調べるのを断念した。