いづいづブログ

アジャイルコーチになりたい札幌在住SEです。アジャイル札幌スタッフ&ScrumFestSapporo実行委員。Like:パクチー/激辛/牡蠣/猫/初期仏教

RuboCopを使う

f:id:izumii-19:20190503080015p:plain

RuboCopなるものを始めて使ってみました。

このエントリーではRubocopをインストールしてから使うまでの手順と、RubocopをVSCodeで使うための手順について説明します。

RuboCop

Rubyで書かれたコードが、コーディング規約にそって書かれているかをチェックする解析ツール。

こういったツールを使うことでコードの可読性を高めたり、チーム内のコーディングルールを簡単に適用することができる。

私は使っていないけど、auto-correct という機能を使えば、チェックだけではなくRuboCopが認識してくれる範囲で自動で修正してもらうこともできてさらに便利。

github.com

インストール

以下のコマンドを実行するだけ。

$ gem install rubocop

実行

さっそくRuboCopを実行してみる。 チェックしたい.rbファイルがあるプロジェクトに移動して、以下のコマンドを実行。

$ rubocop

f:id:izumii-19:20190503081556p:plain
RuboCopの実行結果。たくさんエラーが検出されている。

設定ファイル(.rubocop.yml)について

コーディング規約は「.rubocop.yml」というファイルに書かれており、インストール時に一緒に配置される*1

Rubocopにデフォルトで設定されているコーディング規約はけっこう厳しいらしく、そのまま使う人は少ないということ。

コーディング規約を自分で変更したい場合は以下のいずれかの方法で変更できる。

  1. 既にある.rubocop.ymlを開いて設定を変更する。
  2. .rubocop.ymlを新しく作成しプロジェクトルートに配置する。*2

設定ファイルを変更する

設定ファイルの変更を実際に行う。

いくつかのブログを見てみたところ、「.rubocop.ymlを新しく作ってプロジェクトルートに配置する」というやり方が多いようなのでこの方法で変更してみる。*3

  1. 適用したい.rubocop.ymlをwgetコマンドなどを使用して持ってくる。今回はRailsGitHubから持ってきた。
$ wget https://raw.githubusercontent.com/rails/rails/master/.rubocop.yml

wgetの引数にはGitHubの画面の「Raw」ボタンを押して表示されるURLを使う。

f:id:izumii-19:20190503085055p:plain
「Raw」ボタンをクリックするとURLが取得できる

  1. 取得した.rubocop.ymlをプロジェクトルートに配置。今回の例では~/RubyTutorial/に配置。

f:id:izumii-19:20190503085637p:plain
プロジェクトルートに配置

これでOK。のはずなんだけどプロジェクトルートに配置したら、こっちの.rubocop.ymlのチェックが適用されているということはどうやって確認するのだろう。

今回は実行してみてチェックの方法が変わっているかどうかで確認したが、もっと簡単にわかるのだろうか?

RuboCopをVSCodeで使う

私はRubyのコードをVSCodeで書いているので、VSCodeでも使えるようにする。

インストール

拡張機能からruby-rubocop 0.8.0をインストールして有効にする。

f:id:izumii-19:20190503090632p:plain
拡張機能からインストール

設定

[基本設定] - [設定] - [拡張機能]を開いて、以下の画面のように設定。

f:id:izumii-19:20190503091858p:plain
VSCodeでRuboCopを使うための設定

④の「Execute Path」は以下のコマンドで確認できるので、出力結果のパスをそのまま(…shims/まで)貼ればよい。

$ which rubocop
/Users/izumi/.rbenv/shims/rubocop

実行

インストールと設定が完了すると、保存時にチェックが実行されるようになる。

f:id:izumii-19:20190503092706p:plain
保存時にRuboCopのチェックが走る

おまけ

RuboCopを導入したら、Missing frozen string literal comment.の警告が必ず出てしまうようになってしまった…。

結果として# frozen_string_literal: trueというマジックコメントを先頭に入れることで解決できた。

これは Ruby 3.0 では文字列リテラルがデフォルトで freezeになる予定であり、これに先駆けて今から文字列リテラルをfreezeにしておく(=このマジックコメントを入れる)ようにしようということで、RuboCopの設定でチェックが有効になっていることが多いのだとか。

参考

  • インストール

  Rubocop使ってみる - 電波ビーチ

  • .rubocop.ymlの内容

  RuboCopの設定アレコレ - Qiita

  [Mac]VScode で ruby-rubocop が動かなくなったら executePath を設定してみよう - Qiita

  • Missing frozen string literal comment.

  【Ruby】RuboCopのFrozenStringLiteralCommentについて - TASK NOTES

*1:ただし、このファイルがどこに保存されているのかは探してみたけどわからなかった。

*2:実際にはゼロから作ることはなさそうで、GitHubから持ってきたり既存の.ymlファイルに変更を加えたものをプロジェクトルートに置くことが多い。

*3:あと、既存の.rubocop.ymlがどこにあるのかを私が見つけられなかったというのも理由のひとつ。