🔖
Rails7.13 サクッとrubocopを導入し静的解析をする方法
はじめに
「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エディタ
環境構築が済んでいない方はこちらを参考に環境構築を行なってください。
RSpecの導入 ※こちらは導入しなくてもOKです。
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の拡張機能を追加
.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