RuboCopはなぜ「改行がない」だけで怒るのか

2026/01/07

github
CI

1. そもそも RuboCop とは何か

RuboCop は Ruby / Rails 向けの 静的解析ツール
コードを「実行せずに」読み取り、ルール違反を検出する。

目的は次の3つに集約される。

  • コード品質の担保
  • 可読性・一貫性の維持
  • チーム開発での摩擦低減

RuboCop は「動くかどうか」ではなく、
「どう書かれているか」 を問題にする。

2. RuboCop は何をチェックしているのか

RuboCop のチェック対象は大きく分けて3種類ある。

  • Style(書き方・見た目)
  • Layout(改行・インデント・空白)
  • Lint(バグになりやすい構文)

「改行がない」で怒られるのは、
このうち Layout / Style Cop によるもの。

3. 「改行がない」は本当にエラーなのか?

結論から言うと、

Rubyとしては正しいが、チームルールとしてはNG

という状態。

つまり、

  • Rubyインタプリタ → 問題なし
  • RuboCop → 問題あり
  • CI → RuboCopが失敗したので落ちる

という流れ。

4. 改行で怒られる代表例

よくあるのは以下。

  • 最終行に改行がない
  • メソッド定義が詰まっている
  • ブロック開始・終了の位置が揃っていない

例:最終行改行なし

# ファイルの最後は改行で終わらなければならない
Layout/EndOfLine  

5. なぜ改行までルール化するのか

RuboCopが改行を要求する理由は次の通り。

  • diff が見やすくなる
  • マージコンフリクトが減る
  • レビュー時の認知負荷が下がる
  • 機械的に揃えられる

人間の感覚に委ねると、
「人によって書き方が違う」問題が必ず起きる。

6. なぜ「最終行の改行」が重要なのか

これは UNIX 由来の仕様。

  • テキストファイルは「行の集合」
  • 行は「改行で終わる」ものとして扱われる
  • 最後に改行がないと「壊れた行」扱い

Git や diff ツール、CI ツールとの相性問題を避けるため、
RuboCop はここを強制する。

7. 改行エラーの直し方(実務)

基本は以下のどれか。

  • エディタで保存し直す
  • 自動整形を使う
  • RuboCop の auto-correct を使う
# 自動修正  
rubocop -A

8. まとめ

  • RuboCop は動作ではなく「書き方」を見る
  • 改行ルールは人間のためではなく、機械とチームのため
  • CI を落とすのは、レビューコスト削減のため
  • RuboCop は思想ではなく設定ファイル
  • ルールに納得できなければ、変更してよい

「しょうもないエラー」に見えるが、チーム開発においては重要。