こんにちは。Takitaです。
途中から参画したプロジェクトにrubocopを導入しました。出した提案は前向きに取り入れてくれるチームだったのでやりやすかった部分もありますが、工夫した点もいくつかあるので手順を簡単にまとめてみようと思います。
.rubocop.yml
を調整していく上記のステップを簡単に解説します。
rubocopを使ったことがない人がチームにいる場合は、導入 = コスト(面倒なこと) という認識があるケースがあるので、ここは特に大切な部分だと思います。
書き出すと長くなりそうなので、具体的にどう進めたかはTODOにしておきます。
.rubocop.yml
を調整していく導入した後にrubocopのチェックにたくさんかかると「めんどくさい」などの感情を抱きやすいので、プロジェクトのコードの雰囲気を見ながらあらかじめ .rubocop.yml
を調整しておくことは結構重要なことだと考えています。
チーム内にRubyやRailsに慣れていてきちんとコーディングできる人がいる場合は、その人と一緒に .rubocop.yml
を調整していくのが良いと思います。
rubocopの機能で既存のrubocop offencesはtodoとしてチェックにかからないようにできます。
まず .rubocop_todo.yml
を作成して .rubocop.yml
にリネームします。
$ rubocop --auto-gen-config
$ mv .rubocop_todo.yml .rubocop.yml
すでに .rubocop.yml
で設定を調整していた場合は、既存の .rubocop.yml
を .rubocop_todo.yml
をマージしないといけないので、ちょっと面倒です。
チーム内で全員同じエディタだといいのですが、今のチームの場合は僕以外 RubyMine を利用しているため、RubyMineのプラグインの入れ方を調べてエラーが出たら一緒に解決したりしました。
RubyMineのrubocopプラグインはちょいちょい問題があったりするようでこの設定が結構大変でした。
vimの場合はこちらを参考に設定できます。
シンタックスをチェックしてくれるvim-syntasticをvimに導入する
今のチームにCircleCIを導入したので、CircleCIでrubocopのチェックを行うようにしています。
circle.yml
はこんな感じです。テストも書きたいんだけどな・・・
machine:
timezone:
Asia/Tokyo
ruby:
version: 2.3.4
test:
override:
- bundle exec rubocop
deployment:
production:
branch: master
commands:
- bundle exec cap production deploy:
timeout: 1800
timeoutの設定はCircleCIでtimeout: if a command runs this many seconds without output, kill it (default:600s) にならないようにcircle.ymlを調教するで解説しています。