共通.rubocop.ymlの管理
rubyを会社で利用している方なら、
複数プロジェクトにまたがるような .rubocop.yml をどう管理するか
ということを考えるのは、ごくごく自然なことです。
(私は会社でruby使ってないですけど)
rubocop のしつけ方 - onk.ninja を見ていて、 inherit_from で継承するのかと感心していたら、
onkさんに version0.35 からは inherit_gem というのがあるということを 教えていただきました。@rochefort8 ちょっとだけ状況変わっていて、rubocop v0.35.0 で gem に内蔵した config を使えるようになったので inherit_gem を使うのが良いんじゃないかと思います。
— Takafumi ONAKA (@onk) 2016年9月4日
せっかくなので 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管理できるので、これはこれで良いです。