初めに
今回、初めてRubocopを触りました。 当初は、これは一体何の意味があるのか・・・?と思いつつも、 Rubocopの良さがすこーーしだけわかったような気がします。 ①では、大量の警告を受けつつも、なんとか警告対応(???)し15件まで減らした流れを記載しています。注意
ちなみに②の記事ではRubocop-airbnbを導入してます。
この記事で記載しているrubocopを入れるより、こちらを入れた方がやりやすいかと思いますので、
初心者の方は、①は読まずに②をおすすめします。。
Rubocopとは?
コードを見て、ここはこうした方が良いよ〜。
長すぎだよ・・・なんかを教えてくれます。
ただ、Rubocopを入れて、チェックをかけるだけだと物凄く大量に指摘されます(多分・・・)
厳しすぎるルールもあるので、そこは除外したり...
Rubocopの小言を聞きつつ、聞き流しつつ、うまくやっていくのが重要なんじゃないかと
感じています。初学者的には。
Rubocop導入
group :development, :test do
gem 'rubocop', require: false
end
bundle installで導入します。
ターミナルで以下のコマンドを入力するとチェックが始まります。
rubocop
1164件の違反が見つかる
結構な違反が見つかりましたが、大部分はschema.rbの指摘でした。
シングルコーテーションでいいんじゃない??みたいな。
schema.rbは私が生成してるわけではないし、、そんなこと言われても・・・と思いました。
ので、rubocopの検査対象から外すのが正解だったかもしれません。
db/schema.rb:55:14: C: [Correctable] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.
t.string "action_name"
^^^^^^^^^^^^^
自動修正をしてみる
自分が記述したわけでもないファイルを自動修正なんかして欲しくない!!!方は次へ
違反の指摘でCorrectable
となっているところは、自動修正できるよ〜という箇所です。
ターミナルで、以下のコマンドで自動修正できます。
rubocop --auto-correct
そもそも自動修正って大丈夫??
rubocop --auto-correct
で自動修正されるものは、
safeマークが付いているもの=挙動に影響は無いと判断されてるもの だそうです。
rubocop --auto-correct
を実施すると、
rubocop -A
をするように言われますが、rubocop -A
は、
unsafeのもの=挙動に影響あるかも...まで修正されてしまいますので要注意です。
131 files inspected, 1361 offenses detected, 1047 offenses corrected,
149 more offenses can be corrected with `rubocop -A`
rubocop --auto-correct
の後、サーバー起動してみましたが、
特に挙動に影響はありませんでした。
.rubocop_todo.yml/.rubocop.ymlの作成
rubocopを実行してバーーっと出てくる警告をファイルへ移動することができます。
ターミナルで以下のコマンド実行すると、
.rubocop_todo.yml/.rubocop.yml の2つが作成され、
警告内容は、todoに入ります!
rubocop --auto-gen-config
チェックして欲しくないファイルを指定する
自分が書いたわけでもないファイルを自動で修正されるのって嫌だなぁと思う場合は、
.rubocop.ymlに以下の通り記載します。
以下のファイルはチェックを受けなくなります。
私は、safeな自動修正を行なった後にこのファイルを作成しましたが、
最初からこうすればよかった...と思いました。
inherit_from: .rubocop_todo.yml
AllCops:
TargetRubyVersion: 2.7.1
TargetRailsVersion: 6.0.3.4
Exclude:
- "vendor/**/*" # rubocop config/default.yml
- "db/schema*.rb"
- "node_modules/**/*"
- "db/migrate/**/*"
- "app/channels/**/*"
- "config/**/*"
- "config.ru"
- "bin/**/*"
- "public/**/*"
- "tmp/**/*"
- "log/**/*"
- "test/**/*"
お好みで追加すれば良いかと思います。個人的には、
- "Gemfile"
- "Rakefile"
- "helpers/**/*"
- "db/seeds.rb" も追加してしまいました。
一番上のinherit_from: .rubocop_todo.yml
を残していると、
.rubocop_todo.ymlに逃した警告は表示されなくなります!!!
ターミナルに出力させたい場合には、コメントアウトしてください。
(正直、.rubocop_todo.ymlで警告の内容みるよりも、ターミナルでみた方が
わかりやすいと思います。)
もう一度rubocopしてみる!
```inherit_from: .rubocop_todo.yml```をコメントアウトし、 もう一度ターミナルで、```rubocop```してみます。コメントアウトも指摘されてますね。。日本語はNGみたいです。
こういうところも、別に検査しなくて良いということを、あらかじめファイルに書いておくと良いですね。。
あらかじめ除外すべき!?警告対応集〜細かい警告編〜
以下のような細かい警告は、事前にでないようにしておくとよかったのかもしれません。
①コメントアウトが引っかかる
日本語でコメントアウトしてると全部!警告に引っかかってきます。
.rubocop.ymlに以下の通り記載します。
Style/AsciiComments:
Enabled: false
②Missing top-level
一行目にいきなり class ~~ と書いてあるとこうなるようです。
app/controllers/application_controller.rb:1:1: C: Style/Documentation: Missing top-level class documentation comment.
class ApplicationController < ActionController::Base
^^^^^
.rubocop.ymlに以下の通り記載します。
Style/Documentation:
Enabled: false
参考サイト
https://zenn.dev/masa20210102/articles/ac80e973523a96
③Missing frozen string literal comment.
app/controllers/application_controller.rb:1:1: C: [Correctable] Style/FrozenStringLiteralComment: Missing frozen string literal comment.
class ApplicationController < ActionController::Base
^
.rubocop.ymlに以下の通り記載します。
Style/FrozenStringLiteralComment:
Enabled: false
参考サイト
https://www.task-notes.com/entry/20160831/1472572735
④Use nested module/class definitions instead of compact style.
Style/ClassAndModuleChildren: Use nested module/class definitions instead of compact style.
module Posts::SearchesHelper
^^^^^^^^^^^^^^^^^^^^^
.rubocop.ymlに以下の通り記載します。
Style/ClassAndModuleChildren:
Enabled: false
⑤Naming/AsciiIdentifiers
Naming/AsciiIdentifiers: Use only ascii symbols in identifiers.
tags.delete Tag.find_by(name: old)
Naming/AsciiIdentifiers: Use only ascii symbols in identifiers.
json.id group.id
.rubocop.ymlに以下の通り記載します。
Naming/AsciiIdentifiers:
Enabled: false
⑥Layout/LineLength:
1行80文字以上だとこうなってしまうようです。
以下のように除外するか、設定を変えるか・・、短くするか。。
.rubocop.ymlに以下の通り記載します。
Layout/LineLength:
Enabled: false
ここまでやって、残り15件の警告!
ようやく15件まで、減らせました。 (もちろん、減らすことが目的ではなく、ちゃんとRubocopの指摘を聞き、(聞き流しつつ)、修正し、 理解してあげることが大事だと思います。)力つきたので、警告には追って対応していきます。。
参考にした記事