🤖

rubocop コード字数制限について

2025/03/04に公開

内容

以前テストコードを追記した際にrubocopで設定されているコード行数制限に引っかかってしまい、CIでコケるという事象が発生した。
この際指定ファイルのみ行数上限を引き上げたくなったため、rubocopの設定緩和について記します。

rubocop:ファイル行数制限設定

各ファイルに対して802行までという制約をつける場合

Metrics/BlockLength:
  Max: 802

この記述がある場合、各ファイルは802行までという制約がかかり、publishするとCIでコケるようになる

rubocopの設定でファイル行数制限を緩和する方法

各ファイルに対して行数制限を引き上げる

  1. 指定ファイルの制限を無視する
Metrics/BlockLength:
  Exclude:
    - "spec/models/users/user_spec.rb"
  1. 指定ファイルのみ設定を変更する
Metrics/BlockLength:
  Include:
    - "spec/models/users/user_spec.rb"
  Max: 900  # 例: 900行まで許容
  1. テストコード内で一部を行数にカウントしない
# rubocop:disable Metrics/BlockLength

describe 'User', seeded_db: false do
  # テストコード...
end

# rubocop:enable Metrics/BlockLength

それぞれのメリデメ


  1. 指定ファイルの制限を無視する
    メリット : コード量が不明な場合、今後も増えていくことが考えられる場合に一旦引き上げておくことができる
    デメリット: 制限がなく書けてしまうので、ルール化されていないとも言える

  1. 指定ファイルのみ設定を変更する
    メリット : yamlファイル内の設定を書く場所に記載できるので、設定をまとめて記述できる
    デメリット: 設定するファイル数が増えるとyamlファイルが汚くなる懸念がある

  1. テストコード内で一部を行数にカウントしない
    メリット : yamlファイルを汚さずに設定をすることができる
          一旦書いているテスト、後に消すと想定されるテストコードに対して有効
    デメリット: 設定記述をテストコードに残してしまうので、テストコード自体が汚れてしまう懸念がある

その他の方法: 全体ファイルに対して行数制限を引き上げる

各ファイルに対して900行までという制約をつける場合

Metrics/BlockLength:
  Max: 900

この場合はすべてのファイルの上限が引き上がってしまう。

シロク エンジニアブログ

Discussion