Glide Note

glidenote's blog

rubocop+syntasticでRubyのコーディングルールへの準拠チェックを自動化する

sensuのプラグイン書いてて、sensu/sensu-community-pluginsを見ていたら rubocopでlintかけろ的な事が書いて、導入して使ってみたら便利だったのでメモ。

rubocopとは

rubocopとは、Rubyのコードがruby-style-guide(日本語訳)に 沿って書かれているか解析してくれるツール

rubocopのインストールと使い方

1
gem install rubocop

でコマンドラインから利用する場合は下記みたいな感じ。

単一ファイルに対して実行する場合

1
rubocop hoge.rb

配下のファイルに一斉に実行する場合

1
2
cd /path/to/ruby-project/
rubocop

bbatsov/ruby-style-guideに準拠してない、 記載方法がある場合は指摘される。 自分で.rubocop.ymlとかを用意することで、自分たち用のコーディングルールに変更も出来る。

既存プロジェクトへの適用

新規に使い始めるときは楽なんですが、既存のプロジェクトやコードにrubocopを走らせると恐らく大量に違反が検出されて それを直していくのは結構ツラい。 なのでとりあえずは下記みたいな感じで現段階での違反をとりあえず無視する。

1
2
3
4
cd /path/to/ruby-project/
rubocop --auto-gen-config
echo 'inherit_from: rubocop-todo.yml' >> .rubocop.yml
rubocop

それで、チェックしたいルールを1個ずつ下記のように.rubocop.ymlに追加

1
2
LineLength:
  Max: 80

再度rubocopを実行すると、追加したルールに違反しているものだけ表示されるので、 少しずつ直していける。

また一部ルールは-aもしくは--auto-correctを利用することで自動的に変換も出来る。

1
rubocop -a

Vimからの利用

Vimから使えると便利そうと思っていたら、syntasticが rubocopをサポートしているので下記のように設定するだけで、簡単に利用出来た。

私はneobundle.vimを使っているので下記のような感じで記載して:NeoBundleInstall

1
2
NeoBundle 'scrooloose/syntastic'
let g:syntastic_ruby_checkers = ['rubocop']

ファイルを保存したタイミングでsyntastic経由でrubocopが実行され、自動でチェックが走ってくれる。 指摘内容は:Errorsとか実行すると確認が出来る。

vimだけじゃなくzshからも利用出来ると便利そうなので、zsh-completionsにPRを出しておいた。

今まで、ruby-style-guide(日本語訳)に沿った書き方を してなかったので、使ってるとイライラさせられる部分もあるけど、矯正されていく感があってなかなか良い。

参考

Comments