Railsプロジェクトが肥大化するにつれてRubocopの所要時間も増大し、コミット前の待ち時間でカップ麺が作れそうなレベルになってしまいました。
そろそろどうにかしたいなと思い、Rubocopを高速化する策を講じてみたので、今回はそれを共有したいと思います。
スクリプト
スクリプトをコンテナの外で実行し、RubocopはRailsのDockerコンテナ内で走らせる想定です。
#!/bin/sh
# 削除されたファイルをRubocopの検査対象に含めるとエラーになるので除く
files=`git diff origin/develop --name-only --diff-filter=d | grep -e .rb -e .rake`
# 確認用にファイル一覧を出力する
echo ${files}
docker exec rails-container rubocop -a ${files}
まずdevelopブランチとのdiffを取り、変更のあったファイル名を取得しています。
削除されたファイルはRubocopにかけるとエラーになるので除外しています。
その中からgrepでRubyとRakeファイルだけを抽出し、Rubocopの引数として渡す流れです。
よければ必要に応じてアレンジするなどして使ってください。