RubyRuboCop

RuboCop で inheritance を利用しルールや設定が重複してしまった際に設定を統合する方法

これはなに

  • RuboCop には Inheritance というオプションがあり、設定を複数ファイルに記述またはリモートのファイルを参照し、読み込むことができる
  • Inheritance の設定をしても、ルールが重複している場合、意図したルールが適用されなかったため対応した際のメモを記事にしました

Inheritance とは

RuboCop のルールは rubocop.yml に設定を記載することが多いが、共通の設定を読み込む場合 remote URL を指定したり、 Gemfile 等に定義している gem の中から定義を参照できます rubocop --auto-gen-config のコマンドを実行して生成する .rubocop_todo.ymlinherit_from で読み込むため、自然に利用している人も多いはずです

inherit_from の詳細については、以下 URL の「Inheriting configuration from a remote URL」を確認してください

inherit_mode を指定する

Inheritance で複数設定を参照しつつ、定義が重複したときにどのように振る舞うか設定を inherit_mode で定義することができます inherit_modeoverridemerge を設定することができデフォルトは override になっています

以下は .rubocop.yml.rubocop_todo.yml の各ルールで定義されている Exclude 条件を merge する場合に利用します

inherit_from:
  - .rubocop_todo.yml

inherit_mode:
  merge:
    - Exclude

最後に

なるべくルールや設定の重複は避け上書きしていくべきと考えていますが、 プロジェクトの方針や状況に応じて柔軟な適用を必要とされるケースもあることを実感しました。

Reference