4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RuboCopの設定ファイルを見る

Posted at

はじめに

[Rails] RuboCopの導入の記事では、設定に関する記述を省略したのでこちらにまとめる。

構成ファイル

RuboCopの動作は.rubocop.yml構成ファイルを介して制御を行う。
つまりはこのファイルでRuboCopの動作を決めるみたい。

構成ファイルの場所は「検査されたファイルがあるディレクトリで構成ファイルの検索を行い、ルートディレクトリまで進む」とドキュメントある。

つまり、実行時にその都度プロジェクトにある構成ファイルの場所を参照するようだ。

構成ファイルの場所

# 最初に参照される設定ファイル
- ~/.rubocop.yml

# ルートディレクトリに設定ファイルが見つからない場合の参照先
- $XDG_CONFIG_HOME/rubocop/config.yml
~/.config/rubocop/config.yml)

両方のファイルが存在する場合は、ドットファイルが優先される。

デフォルトの構成

RuboCopはRubocopホームディレクトリ下のconfig/default.ymlファイルに、全ての構成が継承するようにデフォルト設定が含まれているらしい。

プロジェクトの.rubocop.yml構成ファイルは全て、このデフォルトの設定を継承するため、プロジェクト固有の設定は.rubocop.ymlに記述するだけで済むとのことだ。

設定ファイルの見方

.rubocop.yml
AllCops:
  Include:
    - foo.unusual_extension
    - '**/*.rb'
    - '**/*.gemfile'
    - '**/*.gemspec'
    - '**/*.rake'
    - '**/*.ru'
    - '**/Gemfile'
    - '**/Rakefile'
  Exclude:
    - 'db/**/*'
    - 'config/**/*'
    - 'script/**/*'
    - 'bin/{rails,rake}'
    - !ruby/regexp /old_and_unused\.rb$/

AllCops: とは、リストされる任意のパターンに一致するファイルの宣言を行う。
Include: とは、リストされる任意のパターンに一致するファイルを検査する。
Exclude: とは、リストされる任意のパターンに一致するファイルを検査対象から除外する。

構成ファイルは、デフォルトの設定を継承すると同時に子はInclude:でオーバーライドするものであることに注意。

注意事項

Rubocopをコマンドライン引数として特定のディレクトリ(ファイル)を指定して検査する場合、AllCops/にリストされるExcludeも検査を行うことができてしまう。

そのためExcludeのルールを適用するには--force-exclusionを追加する必要がある。

# Excludeのルールを無視する
bundle exec rubocop foo.rb

# Excludeのルールを適用する
bundle exec rubocop --force-exclusion foo.rb

デフォルトで含まれていないファイルをRunocopで検査する場合、コマンドラインでファイルを渡すか、AllCops/にリストを追加する必要がある。

有効/無効の切り替え

特定の検査の設定をEnabled: falseを指定することで、特定の検査の無効化ができる。ほとんどはデフォルトで有効になっているが、有効/無効/保留の3つ状態がある。

.rubocop.yml
Layout/LineLength:
  Enabled: false

検査の有効化プロセスではDisabledByDefault またはEnabledByDefault trueに設定することで変更が可能。
検査の状態に関係なく、全ての検査のデフォルトを無効/有効に切り替える。

config/default.yml
AllCops:
  DisabledByDefault: true

上記で全体の検査がデフォルトで無効になった。

そこからユーザーの構成ファイルにEnabled: trueされる検査のみが有効になるように設定できる。

.rubocop.yml
Style:
  Enabled: true

上記だとStyle:の範囲が全て有効化されたことになる。
また無効を指定した範囲から、さらに個別に有効化することも可能である。

.rubocop.yml
inherit_from: config_that_disables_the_metrics_department.yml

Metrics/MethodLength:
  Enabled: true

Style:
  Enabled: false

Style/Alias:
  Enabled: true

inherit_from:は、プロジェクト内の別の構成ファイルから継承を行うものである。つまりは、共通の設定なんかをファイルを別にして読み込むのに使われるもの。

inherit_from:の参照先ファイルは、絶対パスでも相対パスでも指定が可能である。

また参照先が複数ある場合、最初のファイルが最も優先順位が低く、最後のファイルが最も優先順位が高いとある。

.rubocop.yml
inherit_from:
  - ../.rubocop.yml
  - ../conf/.rubocop.yml

検査部門

Rubocop用語では、コードに対して実行される様々なチェックを「cops」と呼ぶらしい。

「cops」は特定の違反を検出する責任があり、その違反の部門ごとに「cops」はグループ化されている。

下記の表は簡単な部門の説明である。

部門 検査内容
Style コードのスタイルの一貫性を検査する。
Layout インデント、配置、余白を一貫して使用しているか検査する。
Lint コードの曖昧さや、考えられるエラーを検査する。rubocop -lでLintだけを走らせることも可能。
Metrics クラス・メソッドの長さなど、測定可能なソースコードのプロパティを処理する。
Naming メソッド名、定数名、ファイル名など、コードの名付けの問題を検査する。
Security 潜在的なセキュリティ問題に関連していることがわかっているメソッド呼び出しと構造を検査する。
Bundler bundlerファイル(Gemfile)のスタイルと悪い習慣をチェックする。
Gemspec gemspecファイル(rubocop.gemspec)のスタイルと悪い習慣を検査する。

詳細はこちらから。

参照元

RuboCop/ドキュメント

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?