今回はRuby on Railsを使う機会があったので、そこでRuboCopというフォーマッターのライブラリを入れることにしました!
なのでそこでやった導入手順とか、簡単な流れを残していきます!
Table of Contents
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: false
Code language: PHP (php)
- rubocop-performanceは性能低下につながるコードを指摘し修正を促してくれる
- rubocop-railsはrailsのベスプラに合わせてやってくれる
- rubocop-rspecはrspecの書き方教えてくれる
rubocopの初期設定
bundle exec rubocop --auto-gen-config
↑を実行することで以下2つのファイルが生成されます。
- .rubocop.yml
- .rubocop_todo.yml
.rubocop_todo.yml
.rubocop_todo.yml
はRuboCopの暫定対応をする際に利用する設定ファイルです。たとえば、プロジェクトの途中からRuboCopを導入すると既存のソースコードに大量の指摘事項が見つかる場合があります。
https://nishinatoshiharu.com/insatall-rubocop/#rubocop_todoyml
指摘事項が多い場合「いつかは直す必要があるけどいったん無視して、とりあえずRuboCopから指摘されないようにだけしたい」に使って後回しにします。
.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: false
Code 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に導入できるので、チーム内でのコーディングルールを固めるには良いですね!