読者です 読者をやめる 読者になる 読者になる

共通.rubocop.ymlの管理

rubyを会社で利用している方なら、 複数プロジェクトにまたがるような .rubocop.yml をどう管理するか ということを考えるのは、ごくごく自然なことです。
(私は会社でruby使ってないですけど)

rubocop のしつけ方 - onk.ninja を見ていて、 inherit_from で継承するのかと感心していたら、

onkさんに version0.35 からは inherit_gem というのがあるということを 教えていただきました。
せっかくなので inherit_from と inherit_gem について見ていきます。

まずは

rubocopのversion upをしましょう。

ヘルプ

Configuration - RuboCop: The Ruby Linter that Serves and Protects

inherit_from

こんな感じで継承先を複数指定できます。

inherit_from:
  - http://www.example.com/rubocop.yml
  - ../.rubocop.yml

下のやつが優先されます(上から順に適用される)。
remote のファイルでも指定できます。
ただし、cache ファイルを作成するようで、取得後24時間はcacheを見るようになっています。
 
試しに以下のような.rubocop.ymlを作成しrubocopを実行すると

inherit_from:
  - https://raw.githubusercontent.com/rails/rails/master/.rubocop.yml

.rubocop.yml と同じディレクトリに.rubocop-https---raw-githubusercontent-com-rails-rails-master--rubocop-yml というファイルが出来上がります。
ただ、$HOME/.rubocop.yml でremoteを指定すると、$HOME以下に上記のものが出来上がるので $HOME以下のやつにremoteを指定するのはやめました。
社内共通の .rubocop.yml をホスティングして各プロジェクトで利用する形にすれば捗りそうです。

inherit_gem

(例が現実的でないかもしれないですが)こちらもこんな感じで継承先を複数指定できます。

inherit_gem:
  my-shared-gem: .rubocop.yml
  cucumber: conf/rubocop.yml

下のやつが優先されます(上から順に適用される)。
inherit_from と併用した場合は、inherit_gem が優先されます。
当たり前ですが、gemspecにrubocop.ymlが含まれていないと利用できません。(railsはダメ)。
inherit_from の方がお手軽ですが、rubocop用のgemを作って社内配布する形だと remoteへのアクセスはなくなるし、version管理できるので、これはこれで良いです。

See Also