RuboCopの設定アレコレ

  • 66
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

RuboCop 設定に関するアレコレです。

  • 設定ファイルってどこに何を置くんだろう?
  • 設定項目一覧ってどこにあるんだろう?
  • デフォルトの設定ってどこにあるんだろう?

ということが気になったので、それについてまとめています。

RuboCop とは

(Omitted)

以下の資料が非常にわかりやすかったため、RuboCop に関する説明は省略します。

設定ファイル (.rubocop.yml)

RuboCop の挙動は.rubocop.ymlで設定可能です。

ホームディレクトリとかプロジェクトディレクトリに配置できるとのことですが、基本はプロジェクトのルートディレクトリに配置しておくと良いと思います。

The behavior of RuboCop can be controlled via the .rubocop.yml configuration file. It makes it possible to enable/disable certain cops (checks) and to alter their behavior if they accept any parameters. The file can be placed either in your home directory or in some project directory.

Rubocop#Configuration

設定項目一覧

Cop (Check項目) 一覧は RuboCop のデフォルト設定ファイル を見るのが一番良さそうでした。

次に良さそうだった方法としては、RubyDoc を直接見ると内容がわかりそうでした。
検索窓に気になる単語を入れて、頑張ってお目当ての設定を探しましょう!

基本となる Cop は以下の4種類があるそうです。

  • Style (スタイルについてのCop)
  • Lint (誤りである可能性が高い部分やbad practiceを指摘するCop)
  • Metrics (クラスの行数や1行の文字数などに関してのCop)
  • Rails (Rails特有のCop)

RuboCopをRailsオプションやLintオプションで使ってみよう

Lint ってなんやねんって思って調べてみると、通信用語の基礎知識が出てきました。

通常、単にlintと言うとUNIXコマンドのC用構文チェッカの意だが、C以外の言語にも同種のプログラムがいくつか作られている。例えばHTML用のHTML-lintとして、Another HTML-lintが有名である。

なお、lintとは元々「リント」という布(リンネルの片面を起毛して柔らかくした布で昔の包帯などに用いられた)または「糸くず」の意で、乾燥機の糸くず取り(lint trap)から余計なゴミを取り除く様をプログラム名として流用したものである。

lint - 通信用語の基礎知識

な、なるほど?

デフォルト設定

デフォルト設定の確認は YAML ファイルを確認すれば行えます。

それぞれ、

  • default.yml (デフォルトで設定されている値)
  • disabled.yml (デフォルトでオフになっている Cop)
  • enabled.yml (デフォルトでオンになっている Cop)

に記載されています。

Ruby バージョン

Ruby バージョンを以下のとおり指定できます。

.rubocop.yml
AllCops:
  TargetRubyVersion: 2.2

Rails モード

Rails 用に最適化されたモードは以下を.rubocop.ymlに追記しておけば使用可能です。
ファイルパスからからどのチェックをするのが良いかを自動的に判断してくれるそうなので、Rails プロジェクトなら基本trueにしておけば良いと思います。

.rubocop.yml
Rails:
  Enabled: true

該当ソース

対象ファイル

RuboCop は開始したディレクトリから再帰的に全てのファイルをチェックしますが、基本は Ruby ファイルのみをチェックします。

チェック対象の追加や削除はIncludeExcludeで行えるそうです。

AllCops:
  Include:
    - '**/Rakefile'
    - '**/config.ru'
  Exclude:
    - 'db/**/*'
    - 'config/**/*'
    - 'script/**/*'
    - !ruby/regexp /old_and_unused\.rb$/

Including/Excluding files

まとめ

PullRequest 作成時に CI ツールが自動で RuboCop してくれるようにするとめっちゃ便利(*´ェ`*)