Just do IT

思うは招く

Rubocopをインストールして、Rails本家の設定を使う方法

記事の内容

  • Rubocopのインストール方法
  • Rails本家が採用している設定を自分にも設定する(要するにパクる)

Rubocopとは、Rubyのコードを自動修正してくれるフォーマッター

f:id:K_Koh:20191118230912j:plain
Rubocop:Rubyのコードを自動修正してくれるフォーマッター

Rubocopとは、自分が書いたRubyコードを「おい、ここアカンのちゃうか?」「はいー、ここダメダメやん、直してや」といってくれるようなgem(ライブラリ)のこと。ちなみにヤングなジェネレーションは知らないかもしれないが、これは映画「ロボコップ」をインスピレーションにしている。絶対。

なお本家サイトにはこう書いてある。

RuboCop is a Ruby static code analyzer (a.k.a. linter) and code formatter. Out of the box it will enforce many of the guidelines outlined in the community Ruby Style Guide.

rubocop.readthedocs.io

大阪弁に意訳すると、

「RubocopはRubyの静的コードを解析したり、修正してくれるスグレモンや。linterともいうで。Rubyコミュニティで規約されてるRubyスタイルガイドに沿ってるねんで。」

Rubyスタイルガイド:Rubyコミュニティ界隈で採用されてるコーディングの決まりごと。

インストール方法

環境

gem install する場合

次のコマンドでrubocopをインストール。

gem install rubocop
gem install rubocop-performance
gem install rubocop-rails

基本的にはgem install rubocopだけでも使えるが、Rails本家の設定を使うためにrubocop-performancerubocop-railsもインストールしている。

あとはこれで、

rubocop

を実行すれば、ディレクトリに存在するrubyファイル(.rbで終わるファイル)はすべて解析してくれて、次のような指摘をしてくれる。

11 files inspected, 42 offenses detected

→ 「11個のファイルを覗かせてもらったで。42個の指摘があるねんけど」

42個も・・・!?

bundlerでインストールする場合

bundlerでインストールする場合。 適当にディレクトリを作成し、

bundle init

でGemfileを作成。 Gemfileに以下を追記。

gem 'rubocop'
gem 'rubocop-performance'
gem 'rubocop-rails'

Railsプロジェクトで使うなら

group :development do
  gem 'rubocop', require: false
  gem 'rubocop-performance'
  gem 'rubocop-rails'
end

そしてインストール

bundle install

bundle install --path=vendor/bundleにするかは各自のお好みで。

なお、bundlerでインストールしたgemを実行するとき、文頭にbundle execをつけないと実行されないので注意。

bundle exec rubocop

これでrubocopが動き、ファイルをチェックしてくれる。

Rails本家が採用している設定を自分にも設定する

まず、vimtouchなどで.rubocop.ymlを作成する。 ファイルはルートディレクトリに作成すればOK。

touch .rubocop.yml

次に、以下リンクからありがたく設定ファイルをコピらせていただく。

github.com

自分で作成した.rubocop.ymlに、上記ページからコピったものを貼り付ける。

これでRails本家の設定でrubocopを使うことができる。

試しに自動修正してもらう

試しにrubocopに自動で修正してもらう。

bundle exec rubocop --auto-correct

失敗したやり方

自分が失敗した方法もシェアしておく。

問題

rubocop

を実行してもエラーになり、rubocopが実行されなかった。 次のようなエラーメッセージが出た。

cannot load such file -- rubocop-performance

cannot load such file -- rubocop-rails

など。

これは、

  • rubocop-performanceなんてファイルないよ!
  • rubocop-railsなんてファイルないぞコノヤロー

と指摘されている。

原因

原因は、rubocop-performancerubocop-railsをインストールしていなかったから。 本家ファイルの上部を見るとこんな記載がある。

require:
  - rubocop-performance
  - rubocop-rails

解決

必要なgemをインストールする。

gem installを使うなら。

gem install rubocop-performance
gem install rubocop-rails

bundlerならGemfileに以下を追記。

gem 'rubocop-performance'
gem 'rubocop-rails'

これで解決し、rubocopが動いた。

rubocopの基本的な使い方

ディレクトリにあるすべてのRubyファイルを解析する。

# 引数を指定しない場合
rubocop
bundle exec rubocop

ファイル指定をしてrubocopを通す。

# 引数にファイル名を指定する場合
rubocop <ファイル名>
bundle exec rubocop <ファイル名>

自動である程度修正してもらう。

rubocop --auto-correct
bundle exec rubocop --auto-correct

なんて便利な!

関連記事

k-koh.hatenablog.com

k-koh.hatenablog.com

参照