0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

コードの自動整形ツール【Rubocop】を導入方法と使い方( Rails gem)

Last updated at Posted at 2022-05-20

今回はコードの自動整形ツール【Rubocop】を導入方法・使い方をご紹介いたします。

Rubocop(ルボコップ)とは?

Rubyの静的コード解析ツールです。「インデントが揃っていない」「余分な改行・スペースがある」などの指摘をRubyStyleGuideに基づいて行ってくれます。

Rubocopを導入することにより、コードの品質を担保できるようになります。

 ● Rubocop の公式GitHub

Rubocopの導入方法

①Gemfile の group :development do〜end内に記述

group :development do

  gem 'rubocop', require: false #こちらの1行を記述

end

※最後尾に記述するのではないので、記述場所にご注意ください。

②ターミナルで以下を1つずつ実行

・Gemfile.lockを更新する

bundle install

・rubocopの設定を記述するファイルを作成する

touch .rubocop.yml

→アプリケーション内に「rubocop.yml」ファイルが作成されているので所在を確認してみましょう!

③rubocop.yml に設定を記述

※デフォルトの設定内容の詳細は、RubocopのGitHubにあるdefault.ymlのファイルの中身から確認することができます。

rubocop.yml 

AllCops:
# 除外するディレクトリ(自動生成されたファイル)
# デフォルト設定にある"vendor/**/*"が無効化されないように記述
 Exclude:
   - "vendor/**/*" # rubocop config/default.yml
   - "db/**/*"
   - "config/**/*"
   - "bin/*"
   - "node_modules/**/*"
   - "Gemfile"


# 1行あたりの文字数をチェックする
Layout/LineLength:
 Max: 130
# 下記ファイルはチェックの対象から外す
 Exclude:
   - "Rakefile"
   - "spec/rails_helper.rb"
   - "spec/spec_helper.rb"

# RSpecは1つのブロックあたりの行数が多くなるため、チェックの除外から外す
# ブロック内の行数をチェックする
Metrics/BlockLength:
 Exclude:
   - "spec/**/*"

# Assignment: 変数への代入
# Branch: メソッド呼び出し
# Condition: 条件文
# 上記項目をRubocopが計算して基準値を超えると警告を出す(上記頭文字をとって'Abc')
Metrics/AbcSize:
 Max: 50

# メソッドの中身が複雑になっていないか、Rubocopが計算して基準値を超えると警告を出す
Metrics/PerceivedComplexity:
 Max: 8

# 循環的複雑度が高すぎないかをチェック(ifやforなどを1メソッド内で使いすぎている)
Metrics/CyclomaticComplexity:
 Max: 10

# メソッドの行数が多すぎないかをチェック
Metrics/MethodLength:
 Max: 30

# ネストが深すぎないかをチェック(if文のネストもチェック)
Metrics/BlockNesting:
 Max: 5

# クラスの行数をチェック(無効)
Metrics/ClassLength:
 Enabled: false

# 空メソッドの場合に、1行のスタイルにしない NG例:def style1; end
Style/EmptyMethod:
 EnforcedStyle: expanded

# クラス内にクラスが定義されていないかチェック(無効)
Style/ClassAndModuleChildren:
 Enabled: false

# 日本語でのコメントを許可
Style/AsciiComments:
 Enabled: false

# クラスやモジュール定義前に、それらの説明書きがあるかをチェック(無効)
Style/Documentation:
 Enabled: false

# %i()構文を使用していないシンボルで構成される配列リテラルをチェック(無効)
Style/SymbolArray:
 Enabled: false

# 文字列に値が代入されて変わっていないかチェック(無効)
Style/FrozenStringLiteralComment:
 Enabled: false

# メソッドパラメータ名の最小文字数を設定
Naming/MethodParameterName:
 MinNameLength: 1

これで導入は完了しました!

Rubocopでコードの自動整形を実行する方法

実際の使用方法も併せてご紹介します。
2種類の方法がありますので、自分の使いやすいコードで実行してください。

はじめに

Rubocopを使用したいアプリのディレクトリに移動しておきましょう。
(移動しないと、どこのアプリで自動整形すれば良いかRubocopがわからないため、ディレクトリに移動します)

ターミナル

cd 自分のアプリケーション

実行コード①

rubocopを実行

ターミナル

bundle exec rubocop

結果 ターミナル

spec/models/user_spec.rb:69:10: C: [Correctable] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.
      it "passwordが英数字混合でない場合は登録できない" do
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

↑このようにターミナルで修正箇所について教えてくれます。
ただ、修正点を1つ1つ手動で直していくと、人的ミスが起きたり、修正漏れの可能性が出てきます。
そこで以下のような便利な方法もあります。

実行コード②

「-a」というコマンドを足すと、修正箇所を探し出し、自動で修正までしてくれるようになります。

ターミナル

bundle exec rubocop -a

結果 ターミナル

spec/models/user_spec.rb:69:10: C: [Correctable] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.
      it "passwordが英数字混合でない場合は登録できない" do
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

結果 GitHub Desktop
スクリーンショット 2022-05-20 14.40.47.png

今回の修正箇所は「""」→「''」に修正してくださいというものでした。

まとめ

今回はrubocopの導入から使い方までのご紹介をいたしました。
修正箇所を振り返ることで、より可視性の高いコードを書くことができると感じますので、
次からの記述に活かして行きたいと思います!

目指すは修正箇所0のコード!

こちらの記事が皆様のお役に立てれば幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?