更新情報

初めまして。トランスネットの友村です。
今月から、泉さんと二人で「Dig Ruby!」「enjoy Railsway」を担当することになりました。
よろしくお願い致します。

気軽に楽しく記述出来るRubyですが、コーディング規約が存在することについてはご存知でしょうか?
コーディング規約とはプログラムを書いていく上での決まりごとの様な物であり、
それを、会社、プロジェクト、チーム全体で遵守していくことが大切になります。

ただし、プロジェクト、チーム内の意識合わせのみでコーディング規約を遵守していくのは非常に難しく、
いずれ形骸化していまい、数ヶ月後には「そんなものあったね」なんてことになりかねません。

そのため、コーディング規約を遵守するためにツールに支援してもらいましょう。
今回は、Rubyの静的コード解析ツールである「RuboCop」をご紹介します。

RuboCopとは?

「RuboCop」はRubyの静的コード解析ツールです。
Ruby Style Guideのガイドラインに沿い、私たちの書いたプログラムをチェックしてくれます。
また、コーディング規約のルールをYAMLでカスタマイズすることも出来るので、環境に合ったルールを定義することも出来ます。

RuboCopのインストール

「RuboCop」はおなじみのRuby Gemsからインストールできます。

$ gem install rubocop

 

RuboCopの実行

それでは実際に「RucoCop」にコーディング規約に違反しているコードを指摘してもらいましょう。
まずは、コーディング規約に違反しているコードを書いていきます。

def this_name
if any
this is name
end
this is another name
end
view rawgistfile1.rb hosted with ❤ by GitHub

極端な例ではありますが、これでRuboCopを実行してみたいと思います。
実行にはrubocopコマンドを使用します。

$ rubocop

1
無事結果が表示されましたでしょうか?
まずは一番下の、3 offenses detected に注目してみましょう。
3つのコーディング規約違反を発見したという出力です。
一つずつ見ていきましょう。

 

Use snake_case for method names.

2
「メソッド名には、「スネークケース」を使用して下さい」ということです。
Ruby Style Guideを見てみるとメソッド名、変数名のネーミングには、スネークケースを利用するように記述されています。
そのため、今回キャメルケースでネーミングされている「thisName」というメソッド名はコーディング規約に違反していることになります。

Favor modifier if usage when having a single-line body. Another good alternative is the usage of control flow &&/||.
3

「if分の中身が一行の場合は【後置if文】を使用するか、【&& or ||】リテラルを使用し、処理をコントロールして下さい」ということですね。
今回書いたif分の中身は一行のため、今回の様な指摘を受けています。
Ruby Style Guidの記述でも同じ記述を発見することが出来ます。

end at 4, 4 is not aligned with if at 2, 2
4

「if文の最初と、endのインデントがずれていますよ」ということですね。
最近ではどんなエディタにも、endを補完する様な機能が付いていたり、プラグインで用意されていることが多いので、
インデントがずれるということは中々ないと思いますが、インデントはコードを読みやすくするための基本に当たる部分なので、常に気を配っておくと良いと思います。

それでは、今回「RuboCop」から受けた指摘を元に、コーディング規約に沿ったコードに修正していきます。

def this_name # use snake case
this is nameif any # or any && ‘this is name’
this is another name
end
view rawgistfile2.rb hosted with ❤ by GitHub

5

コーディング規約に違反している箇所は無いという出力を確認することが出来ました。
結果、コードの記述量自体も少なくなりました。

最後に
「RuboCop」を用いたコーディング規約チェックはいかかがでしたでしょうか?
Ruby Style Guideには沢山の情報量があり、十分な説得力があります。
しかし、色々な環境、人がいる中ですべての状況に合っているとは限りません。
コーディング規約もまた、会社や人にあったベストプラクティスがあるはずです。
まずは、Ruby Style Guideをベースに、環境に適しているコーディング規約を考えて見ることから始めてみてはいかかでしょうか。