Ruby on Rails プロジェクト
コードレビューを行うにあたって、ブラケットの内側に半角スペースがないとか、ハッシュの記法が古いとか、そういった指摘があると、レビューする方もされる方も萎えるし時間がもったいない。この対策として、コーディング規約を設け、その準拠チェックを外部ツールに任せることにする。
そのツールが Rubocop だ。Rubocop は、The Ruby Style Guide と The Rails Style Guide のガイドラインに沿ってコーディングスタイルのチェックを行ってくれる。ここでは、Rubocop の導入と運用について、最低限の解説を行う。
development グループに追加する。
group :development do
gem 'rubocop'
end
標準では、1行あたりの文字数が80文字程度であったり、Ascii 以外のコメント(日本語等)が打てなかったり等、不便な点も多いので .rubocop.yml でカスタマイズする。プロジェクトのルートディクレクトリに、.rubocop.yml を追加する。
ターミナルから rubocop
と叩くだけでチェックを行ってくれる。また、 rubocop -a
( rubocop --auto-correct
) と叩くと自動でコードの修正まで行ってくれる。ただし、意図しない修正が行われる可能性もあるので、auto-correct 前の指摘箇所の確認と、auto-correct 後の diff の確認は行うこと。
一通りコードを書く度にターミナルを叩くのは面倒なので、Guard を使ってファイルを保存する度に Rubocop を自動実行して結果を通知する。Gemfile に guard-rubocop と terminal-notifier-guard を追加する。
group :development do
gem 'rubocop'
gem 'guard-rubocop'
gem 'terminal-notifier-guard'
end
インストール後、Guardfile を作成する。
$ guard init rubocop
Guardfile を開くと、下記のようなコードが生成されている。
guard :rubocop do
watch(%r{.+\.rb$})
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
end
自動チェックの結果を通知センターに表示するために、1行目に notification: true
オプションを付加する。
guard :rubocop, notification do
watch(%r{.+\.rb$})
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
end
Guard を実行する。制御は返ってこないので、別タブを開いて実行すると良い。
$ bundle exec guard
早速 Guardfile の正規表現のコーディングスタイルについて指摘を受けるので、 rubocop --auto-correct
で修正すると良い。最終的な Guardfile はこのようになる。
guard :rubocop, notification: true do
watch(/.+\.rb$/)
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
end
Atom を使用していて、ファイルを保存せずともコード入力時にリアルタイムでコーディングチェックを行いたい場合は linter-rubocop を導入する。
$ apm install linter
$ apm install linter-rubocop
config.cson (Atom -> Config...) に下記を追記する。rubocop のパスは witch rubocop
、rbenv を使用している場合は rbenv witch rubocop
で確認する。
"linter-rubocop":
command: "rubocop のパス"