Help us understand the problem. What is going on with this article?

Rubocopについて

More than 1 year has passed since last update.

目次

  • Rubocopとは
  • 使い方
  • エラーメッセージの読み方
  • 便利な設定
  • 代表的なエラーへの対処法
  • Rubocopに学んだrails way

Rubocopとは

Rubyのコーディング規約に準拠してるかをチェックするgem

使い方

  1. gemなので、 $ gem i rubocop とやるか、Gemfileに書いて $bundle install
  2. インストールしたら、 $ rubocop で実行(ディレクトリ以下全て読み込む)
  3. エラーを指摘されるので、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 と言われるように、規約に従う。そうすれば可読性も上がるしバグも減る。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away