vdeep

*

vdeepはプログラミング、IT、Web技術、ライフハックの事などなどを管理人okutaniがつぶやくブログです

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

      2017/12/10

LINEで送る
Pocket


こんにちは、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の設定をなにもおこなっていないと、次のようにいろいろとメッセージが出るかと思います。

上記の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

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

今回は、.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を実行してみます。

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

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

おわりに

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

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

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

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

LINEで送る
Pocket

okutani (okutani_t) のヒトコト
Rubocopは設定がちょっととっつきにくいですが、導入するととても便利ですね。あとはCIなどで自動的にRubocopを走らせたりするとさらに便利に使えますね!

Web開発のお仕事を募集しています

フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。

Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。

ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。

LINKお問い合わせ

LINKokutani's Portfolio


 - Ruby on Rails

スポンサーリンク

PC用AdSense

PC用AdSense

  こちらもどうぞ

vdeepのトップページへ戻る画像です。風船の形をした島を女の子が掴んでいます。