暇人じゃない

差分のあるファイルのみ RuboCop や RSpec を実行する
GitRSpecRuboCop

差分のあるファイルのみ、サクッと 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

これらの結果をコマンドに渡すことで、差分のあるファイルのみ実行することができる。

About

chocoby (GitHub / Twitter)

個人事業主のソフトウェア開発者です。 Ruby と Rails を使った Web サービスの開発を得意としています。

CurryBu というサービスを作ったり、jp_prefecture という Gem を作っています。