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


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


## Rubocop（ルボコップ）とは？

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

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

#### 　● Rubocop の公式GitHub
https://github.com/rubocop/rubocop


## Rubocopの導入方法

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

```
group :development do

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

end
```

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

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

・Gemfile.lockを更新する
```
bundle install
```

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

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

③rubocop.yml　に設定を記述

※デフォルトの設定内容の詳細は、RubocopのGitHubにある<a href="https://github.com/rubocop/rubocop/blob/master/config/default.yml">default.yml</a>のファイルの中身から確認することができます。


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でコードの自動整形を実行する方法

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

#### はじめに

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
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

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

#### 実行コード②

「-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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/b5848036-2c80-21a6-246c-146b4a14f67f.png)

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



## まとめ

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

目指すは修正箇所０のコード！


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