どうもこんにちは。
RSpecテストのことをメモしてたら、RuboCopのことも書きたくなったのでメモします。
RuboCopとは?
RuboCopとは、Rubyのコードをチェックして、そのコードがRubyの良い書き方かどうかを確認するツールです。簡単に言うと、Rubyの「 文法チェッカー&アドバイザー 」のようなものです。
RuboCopを導入するメリット
- 導入が簡単
- 開発チーム全体でコードスタイルを統一することができる
- バグを防ぐことができる
- 良いコードスタイルを学ぶことができる
デメリット
特にない。。。
RoboCopとRSpec何が違うの?
一言で言うと、「 静的チェックか動的チェックか 」です。
RuboCopはコードの外見を見ます。(スタイルなど)
それに対して、RSpecはコードの内面を見ます。(動作、行動)
導入方法
ここでは、最低限のRailsアプリケーションが構築されている前提で説明を進めます。
1. Gemを追加
Gemfileに以下のコードを記述します。
group :development do
gem 'rubocop', require: false
gem 'rubocop-performance', require: false
gem 'rubocop-rails', require: false
gem 'rubocop-rspec', require: false
end
- rubocop・・・コードチェックに最低限必要なgemです。
- rubocop-performance・・・コードのパフォーマンスに関係する問題を指摘してくれます。
- rubocop-rails・・・Rails用のコーディング規約に沿ってコードチェックをしてくれます。
- rubocop-rspec・・・RSpecテストコードについてチェックをしてくれます。
RSpecテストを導入していない場合には、rubocop-rspec
を導入する必要はありません。
2. bundle installの実行
ターミナルでbundle install
を実行します。
3. 設定ファイルの追加
ターミナルでrubocop --init
を実行します。
これによって、.rubocop.yml
という設定用ファイルが自動生成されます。
4. 拡張Gemの設定追加
.rubocop.yml
に以下のコードを記述します。
require:
- rubocop-rails
- rubocop-performance
- rubocop-rspec
5. テスト実行
ターミナルで以下のコマンドを実行します。
# 修正箇所の洗い出し
bundle exec rubocop
# 修正箇所を自動修正(弱)
bundle exec rubocop -a
# 修正箇所を自動修正(強)
bundle exec rubocop -A
自分が最低限使用するのは上記3つです。
しかし、この設定のままだと、かなりルールが厳しいです。なので個別にルールを設定します。
自分が設定しているルールです。参考までに。。。
require:
- rubocop-performance
- rubocop-rails
- rubocop-rspec
AllCops:
Exclude:
- 'bin/**/*'
- 'config/**/*'
- 'coverage/**/*'
- 'db/**/*'
- 'docker/**/*'
- 'log/**/*'
- 'node_modules/**/*'
- 'public/**/*'
- 'storage/**/*'
- 'test/**/*'
- 'tmp/**/*'
- 'vendor/**/*'
TargetRubyVersion: 3.0.6
Layout/LineLength:
Max: 150
Metrics/MethodLength:
Max: 200
Metrics/AbcSize:
Enabled: false
Metrics/PerceivedComplexity:
Enabled: false
Metrics/CyclomaticComplexity:
Enabled: false
Metrics/BlockLength:
Enabled: 150
Metrics/BlockNesting:
Max: 5
Metrics/ClassLength:
Enabled: false
Naming/VariableNumber:
Enabled: false
Style/Documentation:
Enabled: false
Naming/AccessorMethodName:
Enabled: false
Style/AsciiComments:
Enabled: false
Style/Documentation:
Enabled: false
Style/FrozenStringLiteralComment:
Enabled: false
Style/RescueModifier:
Enabled: false
Style/SymbolProc:
Enabled: false
Style/ClassAndModuleChildren:
Enabled: false
# 以下、Rails用
Rails/InverseOf:
Enabled: false
# 以下、RSpec用
RSpec/MultipleMemoizedHelpers:
Enabled: false
RSpec/LetSetup:
Enabled: false
RSpec/ContextWording:
Enabled: false
RSpec/NamedSubject:
Enabled: false
RSpec/AnyInstance:
Enabled: false
RSpec/NestedGroups:
Max: 4
RSpec/RepeatedExampleGroupBody:
Enabled: false
ちょいめも
自分の感想ですが、bundle exec rubocop
を実行した時に、結果が見づらいなぁという印象を受けました。
なので、自分の場合は実行結果をHTML形式で表示するようにしています。
設定方法
1. 結果出力ファイルを作成する
code_check/rubocop_output.html
というディレクトリとファイルを作成します。
2. HTMLを指定してRuboCopを実行
ターミナルでbundle exec rubocop -f html -o code_check/rubocop_output.html
を実行します。
これだけで以下のような結果画面が閲覧できるようになります。
まとめ
今回はRuboCopについてメモしてみました。
書いている最中に見つけましたが、以下の記事でもかなりわかりやすく説明がされていましたので御紹介させていただきます。
RuboCopは導入難易度がかなり低いと思いますので、初学者の方にはぜひ導入してほしいライブラリです。
以上