gotoshin

主に学んだ事の自分メモ用です。記事に書くまでも無いような事はhttps://scrapbox.io/study-diary/に書いてます。

RuboCopを導入してみる

RuboCopでフォーマットしてみたのでメモ。

触りだけだと、思っていたより簡単に出来た。

RuboCopとは?

rubyのコードフォーマットしてくれるgem

インストール

group :development do
  gem 'rubocop', require: false
end

設定ファイルを作成 & 編集

  • .rubocop.ymlというファイルをルートディレクトリ配下に作成
  • ここにフォーマットの設定を記載する
# 日本語でのコメントを許可
AsciiComments:
  Enabled: false

# 対象ファイル
AllCops:
  Exclude:
    - './**'
    - './bin/**'
  Include:
    - 'app/controllers/**'
    - 'app/model/**'
    - 'app/serializers/**'
    - 'test/controllers/**'
  Rails:
    Enabled: true
 
  • ためしに何も設定せずに実行したらどんでもない量のファイルがフォーマットされそうになったため、一旦全てを対象外にした後、今回キレイにしたいファイルだけを対象に。

実行

  • rubocop

    • ターミナル上にフォーマット箇所と対象のファイルが表示される
  • rubocop --auto-correct

    • 自動でフォーマットしてくれる

pre-commitでコミット時に毎回フォーマットを実行する

pre-commitファイルの作成

docker-compose run web pre-commit install
  • .git/hooks/pre-commitが生成される

シェルスクリプトの変更

今回ついでにrspecも実行されるようにしました。

#!/usr/bin/env sh

echo "rspec実行中"
# rspec実行
docker-compose run web rspec
rspec_result=$?
if [ $rspec_result -ne 0 ]; then
  echo "rspec失敗"
  exit 1
fi
echo "rspec成功"

echo "rubocop実行中"
# rubocop実行
docker-compose run web rubocop -A
rubocop_result=$?
if [ $rubocop_result -ne 0 ]; then
  echo "rubocop失敗"
  exit 1
fi
echo "rubocop成功"

exit 0
  • rubocopの-Aオプションをつける事で自動整形までやってくれます(ただし全て対応してくれるわけではない)

bashで変数の中のコマンドを実行 | Opentone Labs.

初心者向けシェルスクリプトの基本コマンドの紹介 - Qiita

参考資料

RuboCop is 何? - Qiita

.rubocop.yml設定例 - Qiita

【Ruby on Rails】rubocop と pre-commit を利用して git commit 時にコーディングチェックを行う - きゃまなかのブログ

RuboCopの設定アレコレ - Qiita