##目次
- Rubocopとは
- 使い方
- エラーメッセージの読み方
- 便利な設定
- 代表的なエラーへの対処法
- Rubocopに学んだrails way
Rubocopとは
Rubyのコーディング規約に準拠してるかをチェックするgem
使い方
- gemなので、
$ gem i rubocop
とやるか、Gemfileに書いて$bundle install
- インストールしたら、
$ rubocop
で実行(ディレクトリ以下全て読み込む) - エラーを指摘されるので、1つずつ対処
##エラーメッセージの読み方
以下の例について説明
aaa@localhost:(abc*) $ rubocop [/Users/aaa/rails_workspace/board_plus]
Inspecting 62 files
.CC..CCCCCC.CCCCC....C.C..CCC.CC.C...C.CC..CCCCCCCCCCCCCC....C
Offenses:
Gemfile:4:69: C: Prefer single-quoted strings when you don't need string interpolation or special symbols.
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
^^^
Gemfile:8:1: C: Extra blank line detected.
Gemfile:41:1: C: Extra blank line detected.
###説明
1, 2行目は、62個のファイルを読んで、そのうち何番目でどんなエラーが出たかを示している。
上の例だと'.'はエラーなし(clean)、'C'はconfigurarion(規約)違反。他には'W'(warning)や'E'(error)、'F'(fatal)がある。
Offences以降は、具体的なエラーの指摘。
##便利な設定(一部)
####1. 自動でやってもらう
いくつかのエラー、例えば
Prefer single-quoted strings when you don't need string interpolation or special symbols.
は自動で直してもらえる。この場合は""を''に直せば良いが、めんどくさいので、
$ rubocop
する時に
$ rubocop -a
あるいは
$ rubocop --auto-correct
とすれば、直してもらえる。これだけでエラーは半分以下になることも。
####2. .rubocop.yml
例えば以下の(1)(2)のようなことをしたければ、アプリのディレクトリ直下に.rubocop.ymlを作ってそこに設定を記述する。具体的な設定は以下を参照。
http://wonderwall.hatenablog.com/entry/2015/08/17/213718
(1)自動生成されたコードは無視
rails new しただけでもかなりエラー(上のsingle quotationのエラーや、Line is too long.)を拾ってくる。
けれど、これらは自動生成されたものだし、rubocopにチェックしてもらう必要はないというときもある。
(2) 特定のエラーを無視
自動生成したコードでなくても、rubocopの基準だと引っかかるけどこれくらいは許容したいというエラーもある。Line is too long.は無視したいとか。
##代表的なエラーへの対処法
1. Line is too long.
1行80文字以上だとはじかれるので、設定を変える(例えば120字以上をはじくようにする)か、なんとかして短くする。
#####2. Prefer single-quoted strings when you don't need string interpolation or special symbols.
" "を''にかえる。string interpolationは、" "の中に変数などを入れてそこにデータを入れること。special symbolsは、" "の中であれば例えば"こんにちは\n私の名前は~"と書けば \n のところで改行してくれる。けど、' 'だとそのまま バックスラッシュ+n が出力される
3. Missing top-level class documentation comment.
一行目にいきなり class ~~ と書き始めると怒られる。その前にどういうクラスなのかcommentしろということ。これに関してはdisableするのも手。
4. Space inside square brackets detected. あるいは Space inside { missing.
[ ]の中は、文字列の前後にスペース不要。{ }の中は、文字列の前後にスペース入れる。つまり[:id]とか{ maximum: 50 }が推奨。
5. Method has too many lines.
5行以内で書くことが推奨されていて、10行を超えると警告が出る。if文を三項演算子使って簡略化するなど。
6. Extra blank line detected.
空行が2行続いてたりするので、消す。
7. Inconsistent indentation detected.
インデントがおかしいので、見直す。例えば、コントローラーのprivate以降のメソッドがインデントされてるとか(インデント必要ない)。
Rubocopに学んだrails-way
1. 可読性を上げる
コードが長いと読みにくいしミスを見逃しやすくなるので、行数は少ない方が良い。
他には、無駄な行は消す、メソッドをなるべく簡略化、インデントを揃える、などすべき。
2. コーディング規約に従う
Convention over Configuration と言われるように、規約に従う。そうすれば可読性も上がるしバグも減る。