74
89

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について

Last updated at Posted at 2017-08-20

##目次

  • 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 と言われるように、規約に従う。そうすれば可読性も上がるしバグも減る。

74
89
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
74
89

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?