SideCI Blog

自動コードレビューサービスSideCIを提供している株式会社アクトキャットのコーポレートブログです。



RuboCopでRubyコードのスタイルガイド準拠度をチェックしましょう

皆さんはコーディング規約に沿ったコードを書いているでしょうか。そもそも自社にコーディング規約が存在しないという企業も多いかと思います。もちろん、コーディング規約を定めること・沿うことが一概に良いとは言えませんが、コーディング規約自体は企業単位でなく、コミュニティレベルでも作られているので一度見てみるのはいかがでしょうか?

Rubyのソースコード解析ツールであるRuboCopはRubyコミュニティによるRubyスタイルガイド(英語/日本語)や他のスタイルガイド(例えば当社の提供しているMeowCopなど)に準拠しているかどうかを自動チェックしてくれるソフトウェアです。

RuboCopのインストール

すでにrubyが入っていて、RubyGemsが使えるのであればインストールはとても簡単です。2017年05月の時点で0.48.1がインストールされました。

$ gem install rubocop
Fetching: rainbow-2.2.2.gem (100%)
Building native extensions.  This could take a while...
Successfully installed rainbow-2.2.2
Fetching: ast-2.3.0.gem (100%)
  :
Successfully installed rubocop-0.48.1
7 gems installed

RuboCopの使い方

使い方はチェックしたいRubyプロジェクトへ移動し、rubocopコマンドを実行します。

cd path/to/your/project
rubocop

そうすると*.rbファイルやGemfileなどを対象としてチェックが実行され結果が出力されます。

$ rubocop 
Inspecting 35 files
.CCCCC.C...CWCWWCCCCWWCCCWWW..WWCCC
 
Offenses:
 
ncmb-ruby-client.gemspec:12:24: C: Use %q only for strings that contain both single quotes and double quotes.
  spec.description   = %q(A simple Ruby client for the nifty cloud mobile backend REST API)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  :

オプションについて

RuboCopのオプションは次のようになっています。基本的にはオプション不要で実行できますが、動作を変更したい時にはこれらのオプションが利用できます。また、設定ファイルを作っていく際に、 --auto-gen-config を使って設定ファイルを生成する方法があります。 --auto-gen-config を使うとRuboCopが違反検出した設定項目をすべて無効とする設定ファイル(.rubocop_todo.yml)が生成されます。そのファイル名の通り、この設定内容をTODOとして必要に応じて徐々に設定を有効にしながらコードの改善が進められるようになります。

設定について

RuboCopによる解析時に細かく設定を行うことができます。プロジェクトルートに .rubocop.yml というファイルを作成し、その中に設定を記述します。例えばハッシュリテラルにおける半角スペースの扱いについて設定する SpaceInsideHashLiteralBraces というCopがありますが、ブレース開始直後と終了直前はスペース必須、空ブレースについては必須としない場合は次のように設定します。

Style/SpaceInsideHashLiteralBraces:
  EnforcedStyle: space
  EnforcedStyleForEmptyBraces: no_space

他、詳しい設定についてはConfiguration - RuboCop: The Ruby Linter that Serves and Protectsを参考にしてください。

互換性について

RuboCopは一般的なruby(いわゆるMRI)2.0〜2.4、JRuby 9以上、Rubinius 2以上で利用できます。Ruby1.9以下では使えませんが、現在ではほぼ使われていないのではないでしょうか。現在の一般的なRubyプロジェクトであれば問題なく使えるかと思います。

拡張について

RuboCopは通常のRubyプロジェクトだけでなく、Railsプロジェクトでも利用可能です。Railsに特有のルールは Rails Cops に分類されています。これは前述した設定ファイルやコマンドラインオプションで有効にできます。


RuboCopを使えば自分の書いたコードがコミュニティのスタイルガイドに準拠しているかどうかがすぐに判断できます。準拠していなければバグがある、という訳ではありませんが、少なくともライブラリを公開する際などはスタイルガイドに則って開発されている方が良いでしょう。そうすることで人が見ても分かりやすい、綺麗なコードに仕上げられるようになります。

RuboCopをローカルでインストールして適宜実行するのも良いですが、開発チーム全体で使う、個々人が実行・チェックするのは面倒でしょう。私たちの提供するSideCIはクラウド上で自動的にソースコードレビューを行うサービスになります。もちろんRuboCopにも対応しています。GitHubと連携していますので、Gitリポジトリにpushすれば自動的にチェックが開始されます。ぜひSideCIでRuboCopの良さを体験してください。

SideCI - CI for Build Clean Code and Culture