Quantcast
Viewing all articles
Browse latest Browse all 155

【Rails】Rubocopを使ってコーディング規約に準拠させる方法

Image may be NSFW.
Clik here to view.

こんにちは、okutani(@okutani_t)です。Ruby on Railsでは『Rubocop』というgemを利用することで、プロジェクト全体のコーディング規約を強制的に合わせることができます。

Rubocopさえあれば、わざわざ社内のコーディング規約マニュアル的なものを用意しなくてすみますね。

とはいえ、Rubocopは設定がすこしややこしかったり、かなり細かいところまで規約に従わないといけない、かなり進んだプロジェクトだと修正に追いつかないなど、いくつか問題があるので注意が必要です。

導入するかどうかはプロジェクトのチームメンバーで話し合ってからおこなうことをオススメします。

本記事では、執筆現在の最新版であるRuby2.4.1、Ruby on Rails5.1.2での動作を確認しています。Rubocopのバージョンは0.49.1です。

それでは、Rubocopを導入する方法についてみていきましょう。

スポンサーリンク

Rubocopの導入方法

さっそくRubocopを導入していきます。Gemfileに以下を追記。

group :development do
  ...省略...
  gem 'rubocop', require: false
end

上記のように、developmentの環境でのみ動作させればOKですね。

bundle installを実行しましょう。今回はプロジェクト直下に配置します。

$ bundle install --path vendor/bundle

導入を確認。

$ bundle exec rubocop -v
0.49.1

きちんとRubocopが導入できていることが確認できました。

Rubocopの実行方法

それでは、Rubocopを実行して、コーディングルールに従っているかどうか確認してみましょう。

プロジェクトのディレクトリ以下で次を実行します(なお、今回はrails new直後に実行しています)。

$ bundle exec rubocop

Rubocopの設定をなにもおこなっていないと、次のようにいろいろとメッセージが出るかと思います。

Image may be NSFW.
Clik here to view.

上記のCとなっている箇所は、Conventionという意味で、修正が必要な箇所です。

その他に、W(Warning)、E(Error)、F(Fatal)があり、C→W→E→Fの順で深刻度が上がっていきます。

基本的にはすべての警告を消すことが望ましいですが、W以上の警告は必ず対応するように心がけましょう。

自分で書いたコードについて怒られるのならいいのですが、Ruby on Rails導入時にデフォルトで配置されているファイルについても怒られています。

Ruby on Railsではじめから設置されているファイルについては、Rubocopのルールの範囲から除外してあげましょう。

プロジェクト直下に「.rubocop.yml」ファイルを作成して、Rubocopのルールの範囲や、コーディング規約をカスタマイズしていきます。

.rubocop.ymlの設置

それでは、Rubocopのルールをカスタマイズできるようにするため「.rubocop.yml」をプロジェクト直下に配置します。

今回は以下のように設置してみました。

$ vi .rubocop.yml
# 標準の規約 + Railsの規約
Rails:
  Enabled: true

AllCops:
  # Rubyのバージョンを指定
  TargetRubyVersion: 2.4.1
  # 除外するファイル
  Exclude:
    - vendor/bundle/**/*
    - bin/*
    - db/**/*
    - config/**/*
    - Gemfile

# Missing magic comment # frozen_string_literal: true. を無視
Style/FrozenStringLiteralComment:
  Enabled: false

# Missing top-level class documentation comment. を無視
Style/Documentation:
  Enabled: false

# Line is too long を無視
Metrics/LineLength:
  Enabled: false

# Use nested module/class definitions instead of compact style. を無視
Style/ClassAndModuleChildren:
  Enabled: false

こうすることで、一箇所を除いて警告が出ないように修正できました。

Image may be NSFW.
Clik here to view.

今回は、.rubocop.ymlに警告を無視するルールを付け足しましたが、手動で警告箇所を直していってもOKです。今回は細かいルールについては無視するように設定しました。

上記の「refer single-quoted strings when you don’t need string interpolation or special symbols.」を修正するには、ダブルクォーテーションをシングルクォーテーションに書き換えればOKです。

ここで、手動で修正をおこなってもOKですが、せっかくなのでRubocopを使って自動修正をおこなってみます。以下のコマンドを実行してみましょう。

$ bundle exec rubocop -a

-a」をつけることで、Rubocopが自動で修正できる箇所については、よしなにコードを直してくれます。

もう一度、Rubocopを実行してみます。

Image may be NSFW.
Clik here to view.

上記のように、警告箇所が自動で修正されていることが確認できます。

これで、すべてのファイルでRubocopの警告が消えました!

おわりに

本記事ではRubocopの導入方法、.rubocop.ymlの設置について解説しました。

今後は、git commit前にRubocopを走らせて、コーディング規約に沿ったコードをコミットするように心がけるといいですね。

Rubocopのルールが厳しすぎる、チームの方針に沿ったルールに合わせたい場合は、適宜.rubocop.ymlにルールを追加していけばOKです。

Rubocopをこれから導入する方の参考になれば幸いです。


Viewing all articles
Browse latest Browse all 155

Trending Articles