Rubocopという便利な監視人
今回は、Rubocopを使用したので、Rubocopについて書きたいと思います。
Rubocopとは
ソースコードを解析を実装してくれるツールで、このコードに空白がないよ。とか、ここのコードが長いね。とか、ここのインデントがおかしいね。とかをチェックしてターミナルで教えてくれます。
Rubocopの指摘に従い、コードを修正することにより、クリーンなコードにすることができます。
導入方法
インストール
今回複数のrubocop関連のgemを導入を行いました。
# 中略
group :development do
gem 'rubocop', require: false
gem 'rubocop-performance', require: false
gem 'rubocop-rails', require: false
gem 'rubocop-rspec'
end
上記の4つのgemをインストールしました。
Rubocopは、開発環境でのみ使用するので、development
グループ内に入れています。
今回導入したrubocop
がRubocop本体で、他の3つは追加のルールを設定するために入れます。
特に、rubocop-rails
はRailsに対するルール設定を追加できるので入れています。
bundle install
コマンドを実行してgemをインストールします。
初期設定
現在のRubocopは厳しすぎるとのことで、設定を行います。
.rubocop.yml
ファイルを作成して設定を書いていきます。
参考
私の場合、設定ファイルを作成して、設定を書いていたのですが、調べるとコマンド1つで初期設定を行ってくれるみたいです。
$ bundle exec rubocop --auto-gen-config
このコマンドで2つのファイルが作成されます。
- .rubocop.yml
- .rubocop_todo.yml
.rubocop_todo.yml
ソースコードの解析結果のルール違反を無視したい内容を保存するファイルです。この中にある項目は、次回からコードチェック時にチェックの対象外になります。
bundle exec rubocop --auto-gen-config
コマンドを実行することで、現在起こっているルール違反の内容がすべてこのファイルに書き込まれます。
このファイルに書き込まれたルール違反を少しずつ修正していくこともできるみたいです。
Rubocop実行
設定まで完了したら、Rubocopを実行してソースコードがルール違反していないか、解析してもらいます。
$ bundle exec rubucop
問題があれば下記のように表示されます。
Inspecting 13 files
CC.....C.CCCC
Offenses:
Gemfile:1:8: C: [Correctable] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.
source "https://rubygems.org"
^^^^^^^^^^^^^^^^^^^^^^
# 中略
13 files inspected, 37 offenses detected, 37 offenses autocorrectable
このようにルール違反内容とその数が表示されます。
違反内容を解説します。
-
Gemfile:1:8:
修正が望ましいファイル名とその行 -
C:
違反レベルを表示
重要なものから順にF
Fatal・E
Error・W
Warning・C
Convention・R
Refactorとなっています。
F
~W
は修正しないとバグに繋がる危険性が高いものになるので早めに修正しましょう。 -
[Correctable]
自動修正が可能かどうか -
Style/StringLiterals:
指摘の種類 : 今回の指摘は、コードスタイルに関する指摘 -
Prefer single-quoted strings when you don't need string interpolation or special symbols.
指摘対象となった理由と改善内容 : 今回の指摘では、文字列を囲うには"
よりも'
を使うべきという指摘 -
37 offenses detected
指摘の数 : 今回の場合は、37箇所の指摘を受けてます。 -
37 offenses autocorrectable
指摘のうち自動修正が可能な数 : 今回の場合は、37箇所の自動修正が可能
今回の場合、すべて自動修正を行ってくれるルール違反だったので、下記コマンドを実行して修正を行ってもらいます。
$ bundle exec rubocop -a
オプションに-a
をつけることで、自動修正してくれます。結果は下記のようになりました。
Inspecting 13 files
CC.....C.CCCC
Offenses:
Gemfile:1:8: C: [Corrected] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.
source "https://rubygems.org"
^^^^^^^^^^^^^^^^^^^^^^
# 中略
13 files inspected, 40 offenses detected, 40 offenses corrected
最後の40 offenses detected, 40 offenses corrected
ですべて修正されたことがわかります。
数字が37から40に増えているのは、修正途中に他のルール違反があり、それも一緒に修正したので増えています。
その後、もう1度bundle exec rubocop
で確認してみると
Inspecting 13 files
.............
13 files inspected, no offenses detected
無事、完了しました。
最後に
今回Rubocopについて学んだことを自分のアウトプットとして初心者なりに書いてみました。
Rubocopを使用してクリーンなコードを書けるように頑張りたいです。
Discussion