🔖

Rails7.13 サクッとrubocopを導入し静的解析をする方法

2024/03/01に公開

はじめに

「rubocop」は、Rubyコードの静的解析ツールです。コードの品質向上、保守性向上、統一性確保に役立ちます。
この記事では、Rails 7.1.3環境で、rubocopを導入し静的解析をする方法を紹介します。

実行環境

  • M2 mac mini
  • Rails 7.1.3
  • Ruby 3.2.3
  • Mysql 8.0
  • Docker 25.0.2
  • vscodeエディタ

環境構築が済んでいない方はこちらを参考に環境構築を行なってください。
https://zenn.dev/kei1232/articles/0fac51829570c1

RSpecの導入 ※こちらは導入しなくてもOKです。
https://zenn.dev/kei1232/articles/941b465240bc1d

rubocop関連のgemをGemfileに追加

※rspecを導入しているのでrubocop-rspecを追加します。

Gemfile
  # rubocop
  gem 'rubocop', require: false
  gem 'rubocop-performance', require: false
  gem 'rubocop-rails', require: false
  gem 'rubocop-rspec', require: false

Gemのインストール

docker-compose exec web bundle install

vscodeの拡張機能を追加

https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop

.vscode/settings.jsonの作成

mkdir .vscode && touch settings.json
settings.json
{
  "ruby.useLanguageServer": true,
  "ruby.lint": "rubocop",
  "ruby.format": "rubocop"
}

.rubocop.ymlファイルの生成

.rubocop関連のファイルはコマンドを使用して生成できますが、.rubocop.yml .rubocop_todo.ymlは使わないので、touchコマンドで生成します。

touch .rubocop.yml

.rubocop.ymlの修正

私は以下の設定をしています。

.rubocop.yml
require:
  - rubocop-performance
  - rubocop-rails
  - rubocop-rspec
  - ./config/initializers/inflections

AllCops:
  SuggestExtensions: false
  # 最新のルールを適用する
  NewCops: enable
  # 何のルールに引っかかったか表示する
  DisplayCopNames: true

  # rubocop対象外(リポジトリ毎で調節)
  Exclude:
    - "Gemfile"
    - "bin/**/*"
    - "db/**/*"
    - "log/**/*"
    - "tmp/**/*"
    - "vendor/**/*"
    - "lib/tasks/**/*"
    - "bin/*"
    - "config/environments/*"
    - "config/initializers/**/*"
    - "config/puma.rb"
    - "public/**/*"
    - "storage/**/*"

### ルールのカスタマイズ

Metrics:
  Enabled: false

# 一行あたりの文字数
Layout/LineLength:
  Enabled: false

# メソッドの改行ルール
Layout/MultilineMethodCallIndentation:
  EnforcedStyle: indented

# 日本語にコメントを許可
Style/AsciiComments:
  Enabled: false

# クラスにコメントを残さなくても良い
Style/Documentation:
  Enabled: false

# コントローラ等のモジュールをネストしての宣言
Style/ClassAndModuleChildren:
  Enabled: false

# 文字列のfreeze
Style/FrozenStringLiteralComment:
  Enabled: false

# ガード節の提案
Style/GuardClause:
  Enabled: false

# 文字列のダブルクォートチェック
Style/StringLiterals:
  Enabled: false

# シンボルによる配列の%記法のチェック
Style/SymbolArray:
  Enabled: false

# 文字列による配列の%記法のチェック
Style/WordArray:
  Enabled: false

# 変数名に数字を許可
Naming/VariableNumber:
  Enabled: false

# = と == の指摘
Lint/AssignmentInCondition:
  Enabled: false

# メソッド名等の命名の指摘
Naming/PredicateName:
  Enabled: false

# 未i18nのチェック
Rails/I18nLocaleTexts:
  Enabled: false

# before_actionの際の未定義メソッドのチェック
Rails/LexicallyScopedActionFilter:
  Enabled: false

エラーとなるコードがないか解析

docker-compose exec web bundle exec rubocop -a

上記のコマンドで確認できます。エラーが発生した場合は、以下の画像のように表示されます。

自動修正機能

rubocopは以下のコマンドで、エラーが発生している場合も自動で修正してくれます。

docker-compose exec web bundle exec rubocop -A

上記の画像のエラーでTime.now部分をTime.zone.nowに自動修正してくれます。しかし、意図しないコードに修正される可能性があるので、意図しない挙動が発生する可能性があるので慎重に使ってください。

成功した場合

docker-compose exec web bundle exec rubocop -aが成功した場合は以下の画像のように表示されます。

まとめ

「rubocop」を導入することでエラーや記述ミスを減らすことができます。
ぜひ本記事を参考に、導入し「rubocop」の設定をカスタマイズしてみてください。

Discussion