RuboCopとは?Rubyの静的コード解析ツールの使い方・設定・自動修正を実務目線で解説
RuboCopとは、Rubyのソースコードを実行せずに解析し、コーディング規約(Rubyスタイルガイド)への違反や書き方の問題を指摘・自動修正する静的コード解析ツールです。読み方は「ルボコップ」で、名前はRuby+Cop(警官)に由来します。gem一つで導入でき、rubocopコマンドで規約違反を検出し、-a/-Aで機械的な修正を一括適用できます。この記事では、インストールから.rubocop.ymlの設定、自動修正、rubocop-railsやCI連携、他ツールとの使い分けまでを2026年時点の仕様でまとめます。静的解析そのものの位置づけは静的解析とは何か(ソースコードを実行せずに品質を確保する手法)も参照してください。
まとめ:RuboCopの要点
- 正体:Ruby専用の静的コード解析ツール兼フォーマッタ。読み方は「ルボコップ」。
- 導入:
gem "rubocop", require: falseを追加してbundle install、rubocop --initで.rubocop.ymlを生成。 - 自動修正:
-aは安全な修正のみ、-Aは挙動が変わりうる修正も含めて適用。旧--auto-correctはv1.30以降非推奨。 - 設定:行長の上限は
Layout/LineLength(旧Metrics/LineLength)など、.rubocop.ymlでcop単位に調整。 - 既存プロジェクト:
rubocop --auto-gen-configで既存の指摘を.rubocop_todo.ymlに退避し、段階的に潰す。
RuboCopとは何か:読み方・役割・検出できるもの
RuboCopはRubyコードを静的解析(=プログラムを実行せずソースを解析)し、コミュニティのRubyスタイルガイドに基づいて「命名」「レイアウト」「複雑さ」「安全でない書き方」などの問題を指摘します。役割は大きく二つで、規約違反を検出するLinterとしての面と、崩れた書式を整えるフォーマッタとしての面を併せ持ちます。個々の検査ルールは「cop(コップ)」と呼ばれ、Layout(レイアウト)、Style(書き方)、Lint(バグの芽)、Metrics(複雑さ)などの部門(department)に分類されています。Rubyに特化しているぶん、多言語対応ツールより規約の粒度が細かく、対象Rubyを指定すればRuby 4系を含む新しい構文にも追従します(Rubyのバージョン動向はRuby 4.0.1のリリース内容を参照)。
RuboCopのインストールと初期設定
Bundlerを使うプロジェクトでは、Gemfileの開発・テスト向けグループにrubocopを追加します。require: falseを付けるのは、アプリ起動時にrubocop本体を読み込む必要がないためです。
# Gemfile
group :development, :test do
gem "rubocop", require: false
end
追加したらbundle installを実行し、以降はbundle exec rubocopで起動します。プロジェクト直下でrubocop --initを実行すると、雛形の.rubocop.ymlが生成され、ここにルールを書き足していきます。グローバルに入れる場合はgem install rubocopも可能ですが、チーム開発ではバージョンをGemfileとGemfile.lockで固定するほうが解析結果のブレを防げます。
基本コマンドと自動修正:-aと-Aの違い
解析はプロジェクト直下でbundle exec rubocopを実行するだけです。特定のファイルやディレクトリだけを対象にしたいときはパスを渡します。自動修正には安全度で二段階があり、ここは古い記事が--auto-correctで説明していることが多いので注意してください。
| コマンド | 動作 |
|---|---|
rubocop |
解析のみ。違反箇所と該当copを表示 |
rubocop -a |
安全な自動修正のみ適用(挙動は変えない) |
rubocop -A |
安全でない修正も含めて全て適用(要レビュー) |
rubocop --auto-gen-config |
既存の指摘を.rubocop_todo.ymlへ書き出す |
-aは--autocorrect、-Aは--autocorrect-allの短縮形です。旧来の--auto-correct/--auto-correct-allはv1.30で非推奨となり、現在はこの新表記が正式です。-Aは変数の削除など挙動が変わる修正も走るため、必ず差分をレビューしてからコミットしてください。
.rubocop.ymlによるルール設定
ルールのカスタマイズは.rubocop.ymlで行います。全体設定はAllCops、個別ルールはcop名をキーに書きます。よく触るのは対象Rubyバージョン、除外パス、行長の上限です。行長のcopは以前Metrics/LineLengthでしたが、現在はLayout/LineLengthに移動しているため、古い設定例をそのまま貼ると警告が出ます。
# .rubocop.yml
AllCops:
TargetRubyVersion: 3.4
NewCops: enable
Exclude:
- "db/**/*"
- "vendor/**/*"
Layout/LineLength:
Max: 120
Style/Documentation:
Enabled: false
TargetRubyVersionにはプロジェクトが使うRubyを指定します(例は3.4。Ruby 4系なら4.0)。NewCops: enableを入れると、更新で追加された新しいcopを既定で有効化できます。特定ルールを止めたいときはEnabled: false、自動生成コードなどを解析から外したいときはExcludeに相対パスを指定します。
既存プロジェクトへの後付け:.rubocop_todo.ymlで段階導入
すでに規模のあるコードにRuboCopを入れると、初回に数百〜数千件の指摘が出て手が付けられなくなりがちです。ここで一気に直そうとして挫折するのが典型的な失敗パターンです。現実的な解は、初回にbundle exec rubocop --auto-gen-configを実行し、既存の違反をいったん.rubocop_todo.ymlへ退避することです。これにより.rubocop.ymlの先頭にinherit_from: .rubocop_todo.ymlが追記され、既存コードは黙認しつつ、新しく書くコードには規約を効かせられます。
bundle exec rubocop --auto-gen-config
あとは.rubocop_todo.ymlに列挙されたcopを一つずつ有効化し、該当箇所を-aで機械修正→レビューして消し込んでいきます。CIでは「新規の違反はゼロ」を必須条件にし、todoの件数は別途モニタリングすると、既存コードを止めずに規約を浸透させられます。全ルールをいきなり最厳格で回すのは、レビュー負荷が跳ね上がるだけで定着しません。
rubocop-railsとプラグインによるRails対応
RuboCop本体はRuby全般が対象で、Rails特有の規約は別gemrubocop-railsが担います。ほかにもrubocop-rspec(RSpec向け)、rubocop-performance(速度観点)などのプラグインがあり、必要なものを足していきます。
# Gemfile
gem "rubocop-rails", require: false
# .rubocop.yml
plugins:
- rubocop-rails
plugins:キーはプラグイン機構(RuboCop 1.72以降)に対応した書き方で、古いバージョンや一部gemではrequire:を使います。Railsの開発環境そのものの整備はRuby on RailsをVSCodeで開発する環境構築にまとめています。
CI/CDへの組み込み(GitHub Actions)
プッシュやプルリクエストのたびにRuboCopを自動実行すれば、レビュー前に規約違反を弾けます。GitHub Actionsならruby/setup-rubyでRubyとgemを用意し、bundle exec rubocopを走らせるのが最短です。古い記事にあるapt-get install ruby方式は不要で、bundler-cache: trueを使うほうが速く安定します。
# .github/workflows/rubocop.yml
name: RuboCop
on: [push, pull_request]
jobs:
rubocop:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- run: bundle exec rubocop
違反があるとステップが失敗しCIが赤くなるため、規約を満たさないコードのマージを機械的に防げます。ローカルとCIでRuboCopのバージョンがずれると結果が食い違うので、Gemfile.lockでの固定を徹底してください。
他の静的解析ツールとの比較と使い分け
RuboCopは「Rubyのスタイル・書き方」を整える道具で、目的が違うツールとは競合せず併用するのが基本です。セキュリティ観点はBrakeman、多言語・技術的負債の一元管理はSonarQube、JavaScript側はESLintと、守備範囲で選び分けます。
| ツール | 対象 | 主目的 |
|---|---|---|
| RuboCop | Ruby | スタイル・規約・軽微なバグ |
| Brakeman | Ruby on Rails | 脆弱性(SQLi・XSS等)の検出 |
| SonarQube | 多言語 | 品質・技術的負債の一元管理 |
| ESLint | JavaScript | JS/TSのスタイル・バグ |
RailsアプリならRuboCop+Brakemanの二本立てが定番です。ツール選定の考え方は静的コード解析と他のコード品質管理手法との違い、そもそも静的解析と動的テストの役割分担は静的解析と動的テストの違いで整理しています。
よくある質問
RuboCopの読み方は?
「ルボコップ」です。Ruby+Cop(警官)を合わせた名前で、コードの規約を取り締まる役割を表しています。
rubocop -a と -A の違いは?
-aは挙動を変えない安全な自動修正だけを適用します。-Aはそれに加えて安全でない修正(削除や書き換えで挙動が変わりうるもの)も適用するため、実行後は必ず差分をレビューしてください。
–auto-correct はもう使えない?
動きますが非推奨です。v1.30で--auto-correct/--auto-correct-allは非推奨となり、現在は--autocorrect(-a)/--autocorrect-all(-A)が正式表記です。
rubocop-rails は本体と別に必要?
はい。RuboCop本体はRuby全般が対象で、Rails固有の規約はプラグインgemrubocop-railsを追加して有効化します。
RuboCopは無料で使える?
無料です。MITライセンスのオープンソースで、商用プロジェクトでも制限なく利用できます。