RuboCop 2.4 系の最初のリリースとなる 2.4.0 をリリースしたので、概要をざっくり記しておきます。
Rails
部署に新たに追加された cop は以下の4つ。
Rails/ApplicationController
cop
Rails/ApplicationRecord
の Controller 版。
# bad class MyController < ActionController::Base end # good class MyController < ApplicationController end
Rails/ApplicationMailer
cop
Rails/ApplicationRecord
の Mailer 版。ApplicationMailer
クラス層が導入された Rails 5.0 以上のアプリケーションが検査対象となる。
# bad class MyMailer < ActionMailer::Base end # good class MyMailer < ApplicationMailer end
Rails/RakeEnvironment
cop
Rails アプリケーションにおける Rake ファイルのタスク定義で :environment
タスクに依存しているか検査する。
# bad task :foo do end # good task foo: :environment do end
:environment
タスクへの依存を失念するというケースがなるほどの一方で、振る舞いを変える可能性があるため auto-correct はデフォルトで unsafe としている。
Rails/SafeNavigationWithBlank
cop
以下について検査する cop で少し説明が必要なので後述。
# bad do_something if foo&.blank? do_something unless foo&.blank? # good do_something if foo.blank? do_something unless foo.blank?
これは以下のようにレシーバーが nil の場合に safe navigation operator で blank?
メソッドを呼び出した結果 falsy になるので、意図に反している可能性を示唆する cop となる。
nil.blank? #=> true nil&.blank? #=> nil
そのため auto-correct はデフォルトで unsafe としている。
Rails/UnknownEnv
の拡張
Rails/UnknownEnv
について以下のケースも検知するようになった。
# bad Rails.env.proudction? +Rails.env == 'proudction' # good - Rails.env.production? + Rails.env == 'production'
Rails/FilePath
cop のデフォルトスタイル変更
このリリースでの大きな変更として Rails/FilePath
のデフォルトの EnforcedStyle
の変更がある。これまでの bad
と good
が反転してデフォルトの EnforcedStyle: slashes
では以下のようになる。
# bad Rails.root.join('app', 'models', 'goober') File.join(Rails.root, 'app/models/goober') "#{Rails.root}/app/models/goober" # good Rails.root.join('app/models/goober')
もともと Windows 環境でのファイルパスセパレータとの互換を考慮して配列引数で渡しましょうといった流れだったようだが、Rails.root
の戻り値となる Pathname
オブジェクトはファイルパスセパレータに対する環境差異を吸収してくれているので、文字列引数で問題がなかった。また、生成する文字列の数も減らせそう、かつ、引数はひとつで固定されるなどの理由からデフォルトを変更した。これは Rails/OSS パッチ会で松田さんからデフォルト変更の提案があったことがきっかけになっている。
もし従来のスタイルの方が好ましい場合は EnforcedStyle: arguments
を指定してください。
その他に Rails/ReversibleMigration
, Rails/EnumHash
, Rails/Presence
, Rails/SaveBang
といった cop へのバグ修正が含まれています。
エンジョイ!