差分のあるファイルのみ RuboCop や RSpec を実行する
差分のあるファイルのみ、サクッと RuboCop や RSpec を実行したい時のワンライナー。
RuboCop:
bundle exec rubocop -A $(git status -s "*.rb" | cut -c4-)
RSpec:
ファイル名に _spec.rb
が含まれる spec ファイルのみ実行する。
bin/rspec $(git status -s "*_spec.rb" | cut -c4-)
以下のように alias を割り当てると rr
とタイプするだけで実行できるので便利。
alias rr='bundle exec rubocop -A $(git status -s "*.rb" | cut -c4-) && bin/rspec $(git status -s "*_spec.rb" | cut -c4-)'
https://github.com/chocoby/dotfiles/blob/b38f29dda5c38e28fc0628da4aad98484bbccbb9/.zshrc#L99
各コマンドについて
各コマンドの役割について簡単に解説する。
git status -s
の -s
は --short
の略で、名前の通り短いフォーマットの結果を返す。
% git status -s
M app/models/foo.rb
M spec/models/foo_spec.rb
'*_spec.rb'
などのパターンを指定するとファイル名を絞ることができる。
% git status -s "*_spec.rb"
M spec/models/foo_spec.rb
cut -c4-
は git status -s
で得られた結果の 4 文字以降を返す。
app/models/foo.rb
spec/models/foo_spec.rb
これらの結果をコマンドに渡すことで、差分のあるファイルのみ実行することができる。