概要
gitで管理されているプロジェクトで、変更したファイルのみをrubocopでチェックする git rubocop
コマンドを作成したので、その作業手順を記載します。
やること
- 変更ファイルのみをrubocopするスクリプトを作成する。
- gitのサブコマンドでスクリプトを呼ぶ。
作業
rubocopのスクリプトを用意
{ git diff --name-only --diff-filter=AMRC
git diff --name-only --diff-filter=AMRC --cached
} | sort -u \
| grep ".*\.rb$" \
| xargs rubocop
実際gitのサブコマンドにしなくてもこちらを直接実行すれば解決します。
ただそれだけではつまらないので、もうワンメイク!
スクリプトをgitのサブコマンドで呼べるようにする
その前にgitのサブコマンドを軽く説明
パスが通っているディレクトリにgit-hoge
というファイルを作成し、その中にスクリプトを記述すると、git hoge
でスクリプトを実行できるようになります。
なので、今回はパスを通した~/my_bin
ディレクトリ配下にgit-rubocop
というファイルを作成していきます。
git-rubocopを作成
#!/bin/bash
{ git diff --name-only --diff-filter=AMRC
git diff --name-only --diff-filter=AMRC --cached
} | sort -u \
| grep ".*\.rb$" \
| xargs rubocop
git-rubocopに実行権限を付与
ファイルに権限を付与する必要があるので、下記を実行します。
$ chmod 755 ~/my_bin/git-rubocop
my_binディレクトリにパスを通す
my_binディレクトリにパスを通します。お使いのshellの設定ファイル(~/.bashrc, ~/.zshrc)に下記を追加して下さい。
export PATH=$PATH:$HOME/my_bin
追加後はsource
コマンドを忘れずに。(下記は.zshrcの場合)
$ source ~/.zshrc
テスト
以上で作業は終了です。実際に動作するか確認してみましょう。
$ git rubocop
おまけ
rspecも同じような流れで作成できます。
#!/bin/bash
{ git diff --name-only --diff-filter=AMRC
git diff --name-only --diff-filter=AMRC --cached
} | sort -u \
| grep ".*_spec\.rb$" \
| xargs rspec
最後に
エディタでlintの設定をしていても見逃してしまうことがあるし、だからと言ってプロジェクト内すべてをチェックするのも時間が勿体無いので意外と便利なコマンドかと思います。
もしコミット時にチェックしたい場合はpre-commitのgemを利用した方法もあるみたいです。
pre-commit gemでgit commitに連動してRubocopを実施する
参考
ありがとうございます!