【Rails5】はじめてのプロジェクトでRubocopから指摘されたエラーのまとめ


# はじめに
はじめてのRailsプロジェクトで作成したプルリクエストで、Rubocopから指摘された事項をまとめます。

# Rubocopの実行コマンド
```bash
$ bundle exec rubocop
```

# 指摘事項

## Use %i or %I for an array of symbols.
### 指摘例
```irb
app/controllers/hoge1s_controller.rb:4:36: C: Use %i or %I for an array of symbols.
  before_action :new_hoge1, only: [:index, :new]
                                   ^^^^^^^^^^^^^^
```

### 詳細
配列を指定する際に、`%i`または`%I`がない。

[【参考】Ruby 2.4.0 リファレンスマニュアル > リテラル %記法](https://docs.ruby-lang.org/ja/latest/doc/spec=2fliteral.html#percent)

- %i
    - 要素がシンボルの配列(空白区切り)
- %I
    - 要素がシンボルの配列(空白区切り)。式展開、バックスラッシュ記法が有効


### 修正内容
配列を指定するときに、`%i`または`%I`をつける。
```rb
  before_action :new_hoge1, only: %i[:index, :new]
```

## ':' and ',' are unnecessary and may be unwanted in the resulting symbols.
### 指摘例
```rb
app/controllers/hoge1s_controller.rb:4:36: W: Within %i/%I, ':' and ',' are unnecessary and may be unwanted in the resulting symbols.
  before_action :new_hoge1, only: %i[:index, :new]
```

### 詳細
'：'と '、'は不要であり、結果として生じるシンボルで望ましくないかもしれません。

### 修正内容
配列内から`:`および、`,`を削除。

```rb
  before_action :new_hoge1, only: %i[index new]
```


## Put empty method definitions on a single line.
### 指摘例
```rb
  def index
  end
```

### 詳細
空のメソッドは1行で定義する。

### 修正内容
空のメソッドは1行で定義する。
また、アクションの後ろにセミコロンを付与する。

```rb
  def index; end
```

## Keep a blank line before and after private.
### 指摘例
```irb
app/controllers/hoge1s_controller.rb:47:3: C: Keep a blank line before and after private.
  private
  ^^^^^^^
  ```
  
### 詳細
`private`キーワードの前後には空白行を入れる。

### 修正内容
詳細の通り。

## Inconsistent indentation detected.
### 指摘例
```bash
app/controllers/hoge1s_controller.rb:48:5: C: Inconsistent indentation detected.
    def new_hoge1 ...
    ^^^^^^^^^^^^^^
```

### 詳細
インテンドの不一致。

今回は、`private`メソッドのインテンドが不一致だと指摘されていました。
Railsチュートリアルの記載方法に習いましたが、Rubocop的にはダメなんですね。
（privateメソッドの下は1段下げておいた方が見やすくないか？？？）

```rb
  private

    def new_hoge1
      @hoge1 = hoge1.new
    end
```

### 修正内容
インテンドを半角スペース4つから、半角スペース2つに修正。
また、`private`キーワード以下がprivateメソッドであることが分かるように記号を追加。
（先輩からのアドバイスに習いましたが、世の中的にどうなんだろう？）

```rb
  private ###################################################################################################

  def new_hoge1
    @hoge1 = hoge1.new
  end
```
  
## Indent ) the same as the start of the line where ( is.
### 指摘例
```bash
app/controllers/hoge1s_controller.rb:57:9: C: Indent ) the same as the start of the line where ( is.
        )
        ^
```

### 詳細
)のインテンドは、先頭の(と同じにする。

```rb
    params.require(:hoge1).permit(
      :hoge1_code,
      :hoge1_name_ja,
      :hoge1_name_en
      )
```

### 修正内容
)のインテンド位置を、先頭の(と同じになるように修正。

```rb
    params.require(:hoge1).permit(
      :hoge1_code,
      :hoge1_name_ja,
      :hoge1_name_en
    )
```

## Extra empty line detected at class body end.
### 指摘例
```rb
app/controllers/hoge1s_controller.rb:75:1: C: Extra empty line detected at class body end.
app/models/hoge1.rb:8:62: C: Space inside } missing.
                          uniqueness: { case_sensitive: false}
                                                             ^
```

### 詳細
クラス本体の最後で余計な空行が検出された。

```rb
  def set_order_move
    self.move_order_item = hoge1
  end

end
```

### 修正内容
最後のendの前にある余計な空行を削除する。

```rb
  def set_order_move
    self.move_order_item = hoge1
  end
end
```

## Align the elements of a hash literal if they span more than one line.
### 指摘例
```rb
app/models/hoge1.rb:10:25: C: Align the elements of a hash literal if they span more than one line.
                        presence: true
                        ^^^^^^^^^^^^^^
```

### 詳細
ハッシュリテラルの要素が複数の行にまたがっている場合は、それらの要素をそろえる。

```rb
  validates :hoge1_name_ja, length: { maximum: 50 },
                        presence: true
```

### 修正内容
EnforcedColonStyle key(デフォルト) でチェックしているため、キーを左揃えにする。

```rb
  validates :hoge1_name_ja, length: { maximum: 50 },
                             presence: true
```

## Final newline missing.
### 指摘例
```rb
app/decorators/hoge1_decorator.rb:4:4: C: Final newline missing.
end
```

### 詳細
最終行に改行がない。

### 修正内容
最終行に改行を追加する。

##  Space inside } missing.
### 指摘例
```rb
app/models/hoge1.rb:8:62: C: Space inside } missing.
                          uniqueness: { case_sensitive: false}
                                                             ^
```

### 詳細
内側のスペースがない。

### 修正内容
falseの後ろにスペースを追加。

```rb
  validates :hoge1_code, length: { maximum: 15 },
                          presence: true,
                          uniqueness: { case_sensitive: false }
```