2018年4月15日日曜日

【Rails】きれいなRubyコードは好きですか? Rubocop. Clean Code

  • 公開日:2018年04月15日
  • 最終更新日:2018年04月21日

記事概要

プロジェクトへRubocopを導入する記事です。

環境

  • centos6.5
  • Rails5.2
  • ruby2.5.1
  • rbenv

Rubocop

Rubocopはコード解析ツールです。
デフォルトでは Ruby Style Guideで示されているガイドラインが適用されます。

実績

Ruby on RailsでもRubocopでコードチェックを実行しています。

Gemfile修正

Gemfileにrubocopを追記します。

{project_folder}/Gemfile

group :development do
  gem 'rubocop', require: false
end

インストールします。

terminal

cd {project_root}
bundle install

Fetching rainbow 3.0.0
Installing rainbow 3.0.0
Fetching parallel 1.12.1
Installing parallel 1.12.1
Fetching parser 2.5.1.0
Installing parser 2.5.1.0
Fetching powerpack 0.1.1
Installing powerpack 0.1.1
Fetching ruby-progressbar 1.9.0
Installing ruby-progressbar 1.9.0
Fetching unicode-display_width 1.3.0
Installing unicode-display_width 1.3.0
Fetching rubocop 0.54.0
Installing rubocop 0.54.0

.rubocop.yml

プロジェクト直下に.rubocop.ymlファイルを作成します。 .rubocop.ymlはRuboCopの挙動をコントロールできます。

terminal

cd ${project_root}

$ touch .rubocop.yml

作成した.rubocop.ymlは空なので、railsの.rubocop.ymlの内容をコピーして貼り付けます。
特別な理由がない限り、基本はRailsと同じ設定にすると良いでしょう。

.rubocop.ymlはRuby2.5.1とRails5.2の環境に合わせます。

{project_folder}/.rubocop.yml

// .ruby-version ファイルからRubyのバージョンは読み込む。
#TargetRubyVersion: 2.5 → 削除

Layout/** → Style/**に置換

Style/SpaceBeforeFirstArg: → Lint/SpaceBeforeFirstArg:

// コメントアウト
#CustomCops/RefuteNot 

// コメントアウト
#Style/EmptyLineAfterMagicComment:
#  Enabled: true

// コメントアウト
#Style/SpaceAroundKeyword
#  Enabled: true

// コメントアウト
#Style/FrozenStringLiteralComment

// コメントアウト
// http://www.rubydoc.info/github/bbatsov/RuboCop/RuboCop/Cop/Lint/BlockAlignment
#EnforcedStyleAlignWith

rubocopコマンドの実行で出力されたエラーを修正します。
シングルクォーテーションをダブルクォーテーションへ変換する必要があるので、以下のコマンドを実行します。

terminal

$ rubocop -a

上記のコマンドを実行すると他のエラーも修正されるので、実行前にgitで状態を保存しておきましょう。

速度改善

上記で設定したrailsの.rubocop.ymlの設定だと、rubocopコマンドの実行に時間がかかるので改善します。
.rubocop.ymlのExcludeの設定を変更します。

{project_folder}/.rubocop.yml

  DisabledByDefault: true
  Exclude:
    - 'tmp/**/*'
    - 'public/**/*'
    - 'vendor/**/*'
    - 'log/**/*'
    - 'actionpack/lib/action_dispatch/journey/parser.rb'

rubocopで検査非対象フォルダの配下を/**/*と設定するのがポイントです。
実行して確認します。

{project_folder}/.rubocop.yml

$ rubocop
warning: parser/current is loading parser/ruby21, which recognizes
warning: 2.1.7-compliant syntax, but you are running 2.1.6.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
Inspecting 48 files
................................................

48 files inspected, no offenses detected

完了です。

まとめ

Railsは開発速度に優れたフレームワークですが、ソースコードがカオスになりやすい欠点があります。プロジェクト立ち上げ時は良いのですが、プロジェクトが長くなればなるほどコードを読むのがきつくなります。Rubocopを導入して、ソースコードの可読性を保つようにしましょう。
長い目で見ると、Rubocopを使った方が開発速度は上がるはずです。

以上です。

PICK UP オススメ書籍

運営サイト


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...