【Ruby on Rails】RuboCopを導入する方法

今回はRuby on Railsを使う機会があったので、そこでRuboCopというフォーマッターのライブラリを入れることにしました!

なのでそこでやった導入手順とか、簡単な流れを残していきます!

RuboCopを入れる

まずはRuboCopをインストールする
gem install rubocop

Gemfileに以下を追加してbundle install
rubocopは拡張機能が色々あるので必要に応じて取り込むのが良さそうです!自分で必要な拡張機能を入れてくださいね

今回自分は以下4つを入れました!

Gemfile

gem 'rubocop', require: false
gem 'rubocop-rails', require: false
gem "rubocop-performance", require: false
gem "rubocop-rspec", require: falseCode language: PHP (php)

rubocopの初期設定


bundle exec rubocop --auto-gen-config

↑を実行することで以下2つのファイルが生成されます。

  • .rubocop.yml
  • .rubocop_todo.yml

.rubocop_todo.yml

.rubocop_todo.ymlはRuboCopの暫定対応をする際に利用する設定ファイルです。

たとえば、プロジェクトの途中からRuboCopを導入すると既存のソースコードに大量の指摘事項が見つかる場合があります。
指摘事項が多い場合「いつかは直す必要があるけどいったん無視して、とりあえずRuboCopから指摘されないようにだけしたい」に使って後回しにします。

https://nishinatoshiharu.com/insatall-rubocop/#rubocop_todoyml

.rubocop_todo.ymlは、一旦今の時点でこのファイルの修正はしない。なんて時に利用する時に使います!

.rubocop.yml

.rubocop.ymlには、チームでの独自ルールを記載するようにします!

どのファイルはRuboCopのチェック対象外にするのか、どのルールは対象外にするのか….etc


自分も初めてでわからなかったので、一旦記事を読んで、おすすめルールとやらがあるのでそれを実行してみました!


参考記事

.rubocop.yml

inherit_from: .rubocop_todo.yml

# 追加でinstallしたgemのルールを適用することができる
require:
  - rubocop-performance
  - rubocop-rails
  - rubocop-rspec
  - 

AllCops:
  SuggestExtensions: false
  # 最新のルールを適用する
  NewCops: enable
  # 何のルールに引っかかったか表示する
  DisplayCopNames: true
  # rubocop対象外(リポジトリ毎で調節)
  Exclude:
    - "Gemfile"
    - "bin/**/*"
    - "db/**/*"
    - "log/**/*"
    - "tmp/**/*"
    - "vendor/**/*"
    - "lib/tasks/auto_annotate_models.rake"
    - "config/environments/*"
    - "config/puma.rb"

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

# 設定が厳しいので一旦全てfalseにする
Metrics:
  Enabled: false

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

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

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

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

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

# 文字列のfreeze(Ruby3からは自動でfreezeされるので要らない)
Style/FrozenStringLiteralComment:
  Enabled: false

# ガード節の提案(難しいので一旦false)
Style/GuardClause:
  Enabled: false

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

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

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

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

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

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

# 未i18nのチェック(バリデーションエラーメッセージをi18nに登録するのはやや冗長?なためfalse)
Rails/I18nLocaleTexts:
  Enabled: false

# before_actionの際の未定義メソッドのチェック(deviseとの兼ね合いで一旦false)
Rails/LexicallyScopedActionFilter:
  Enabled: falseCode language: PHP (php)

特定のファイルをRuboCopのルールから除外したい場合はこんな書き方

Style/HashSyntax:
Exclude:
- 'spec/**/*'
- 'app/.../.../〇〇.rb'Code language: JavaScript (javascript)

自動整形の方法

もし面倒になった時には自動整形のコマンド叩いて修正してもらってもOK

自動で全てのファイルを整形する時↓

bundle exec rubocop --autocorrect

特定のファイルだけを整形したい時↓

bundle exec rubocop --autocorrect <ファイル名>

その他参考

RuboCopを実行

最後に↓コマンドを叩きましょう!!

bundle exec rubocop

まとめ

以上、こんな感じで導入してみました!

GitHub actionsと合わせると整形できていないとマージできないみたいなCIに導入できるので、チーム内でのコーディングルールを固めるには良いですね!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA