これはなに
- RuboCop には Inheritance というオプションがあり、設定を複数ファイルに記述またはリモートのファイルを参照し、読み込むことができる
- Inheritance の設定をしても、ルールが重複している場合、意図したルールが適用されなかったため対応した際のメモを記事にしました
Inheritance とは
RuboCop のルールは rubocop.yml
に設定を記載することが多いが、共通の設定を読み込む場合 remote URL を指定したり、 Gemfile 等に定義している gem の中から定義を参照できます
rubocop --auto-gen-config
のコマンドを実行して生成する .rubocop_todo.yml
も inherit_from
で読み込むため、自然に利用している人も多いはずです
inherit_from
の詳細については、以下 URL の「Inheriting configuration from a remote URL」を確認してください
inherit_mode
を指定する
Inheritance で複数設定を参照しつつ、定義が重複したときにどのように振る舞うか設定を inherit_mode
で定義することができます
inherit_mode
は override
と merge
を設定することができデフォルトは override
になっています
以下は .rubocop.yml
と .rubocop_todo.yml
の各ルールで定義されている Exclude 条件を merge する場合に利用します
inherit_from:
- .rubocop_todo.yml
inherit_mode:
merge:
- Exclude
最後に
なるべくルールや設定の重複は避け上書きしていくべきと考えていますが、
プロジェクトの方針や状況に応じて柔軟な適用を必要とされるケースもあることを実感しました。
Reference