Yak shaving logs


My life is just yak shaving.

途中から参画したプロジェクトにrubocopを導入してみた

2017/07/13 #rubocop

By Yusuke Takita


こんにちは。Takitaです。

途中から参画したプロジェクトにrubocopを導入しました。出した提案は前向きに取り入れてくれるチームだったのでやりやすかった部分もありますが、工夫した点もいくつかあるので手順を簡単にまとめてみようと思います。

導入した背景

  • RubyやRailsのお作法に詳しいエンジニアがいないため、ググって出てきた書き方や慣れている書き方になっている(RubyやRailsで一般的に良いとされている書き方になっていない)
  • rubocopにチェックしてもらうことでコードレビューのコストを下げたい

導入手順

  1. rubocopを導入するメリットを納得してもらう
  2. 自分一人でrubocopを導入して、プロジェクトのコードの雰囲気を見ながら .rubocop.yml を調整していく
  3. 既存のソースはrubocopのチェックを無視する
  4. ファイル保存時にrubocopのチェックが走るようにエディタごとの設定をしてもらう
  5. CIツールなどでコミットごとにrubocopをチェックする

上記のステップを簡単に解説します。

rubocopを導入するメリットを納得してもらう

rubocopを使ったことがない人がチームにいる場合は、導入 = コスト(面倒なこと) という認識があるケースがあるので、ここは特に大切な部分だと思います。
書き出すと長くなりそうなので、具体的にどう進めたかはTODOにしておきます。

自分一人でrubocopを導入して、プロジェクトのコードの雰囲気を見ながら .rubocop.yml を調整していく

導入した後にrubocopのチェックにたくさんかかると「めんどくさい」などの感情を抱きやすいので、プロジェクトのコードの雰囲気を見ながらあらかじめ .rubocop.yml を調整しておくことは結構重要なことだと考えています。
チーム内にRubyやRailsに慣れていてきちんとコーディングできる人がいる場合は、その人と一緒に .rubocop.yml を調整していくのが良いと思います。

既存のソースはrubocopのチェックを無視する

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 をマージしないといけないので、ちょっと面倒です。

ファイル保存時にrubocopのチェックが走るようにエディタごとの設定をしてもらう

チーム内で全員同じエディタだといいのですが、今のチームの場合は僕以外 RubyMine を利用しているため、RubyMineのプラグインの入れ方を調べてエラーが出たら一緒に解決したりしました。
RubyMineのrubocopプラグインはちょいちょい問題があったりするようでこの設定が結構大変でした。

vimの場合はこちらを参考に設定できます。
シンタックスをチェックしてくれるvim-syntasticをvimに導入する

CIツールなどでコミットごとにrubocopをチェックする

今のチームに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を調教するで解説しています。

このエントリーをはてなブックマークに追加

categories


最新記事


tags