vdeep

*

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

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

   

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をこれから導入する方の参考になれば幸いです。

この記事が気に入ったら
いいね ! しよう

Twitter で
LINEで送る
Pocket

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

 - Ruby on Rails

スポンサーリンク

PC用AdSense

PC用AdSense

Share
  • このエントリーをはてなブックマークに追加

  こちらの関連記事もどうぞ

【Rails】『dotenv』で環境変数を管理する方法

こんにちは、okutani(@okutani_t)です。本記事では、Ruby o …

MacにRubyとRuby on Railsを導入する方法

こんにちは、okutani(@okutani_t)です。本記事では「MacにRu …

CentOS7にRuby on Railsを導入する方法

こんにちは、okutani(@okutani_t)です。本記事ではCentOS7 …

New Relicの登録&Ruby on Railsへの導入方法

こんにちは、okutani(@okutani_t)です。本記事では、パフォーマン …

【Rails】『Webpacker + React』を導入する手順まとめ

こんにちは、okutani(@okutani_t)です。本記事では、Ruby o …

CentOS7+nginxでRuby on Railsを利用する(Unicorn)

こんにちは、okutaniです。前回、「CentOS7にnginxを導入&初期設 …

【Rails】「config」gemを使って定数管理をおこなう方法

こんにちは、okutani(@okutani_t)です。「config」gemを …

【Rails】S3へ『CarrierWave+fog』を使って画像アップロードする方法

こんにちは、okutani(@okutani_t)です。本記事ではAWS(Ama …

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