5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

変更ファイルのみをrubocopするgit rubocopコマンドを作ってみた

Last updated at Posted at 2019-09-24

概要

gitで管理されているプロジェクトで、変更したファイルのみをrubocopでチェックする git rubocop コマンドを作成したので、その作業手順を記載します。

やること

  1. 変更ファイルのみをrubocopするスクリプトを作成する。
  2. 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を作成

~/my_bin/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も同じような流れで作成できます。

~/my_bin/git-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を実施する

参考

ありがとうございます!

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?