rrubocop について
rrubocopは、RuboCopの設定やワークフローを使うチーム向けのRust製Rubyリンターです。RuboCop風の出力と自動修正に対応し、MCPによる検査・修正ツールも提供します。
主な機能
- 01RuboCop互換の設定
- 02RuboCop風のテキスト・JSON出力
- 03安全および全件の自動修正
- 04Rubyプロジェクト向け内蔵ルール
- 05コンテンツアドレス方式のキャッシュ
- 06MCP検査・自動修正ツール
活用シーン
- 01既存のRubyプロジェクトを検査
- 02プロジェクトの`.rubocop.yml`を再利用
- 03コマンドラインで違反を自動修正
- 04コーディングエージェントでRubyコードを検査・修正
MCP 対応
`rrubocop --mcp`を実行すると、stdio経由で`rubocop_inspection`と`rubocop_autocorrection`を公開します。MCPクライアントはパスまたはインラインソースを検査し、ファイルシステム上の対象を修正できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
rrubocop
RuboCop の10倍高速なドロップイン置き換え — RuboCop gem を保守することなく、同じ CLI、.rubocop.yml、違反出力を利用できます。Lint とシンプルな設定には Ruby は不要ですが、複雑な ERB では必要です。既存のプロジェクトを指定すれば、RuboCop と同じように使えます。
単一のバイナリで動作するため、rbenv、rvm、システムの Ruby、Docker のいずれを使っていても同じように実行できます。tree-sitter を使用しており、Lint やシンプルな ERB に Ruby ランタイムは不要 です。未対応の ERB は ruby / bundle exec ruby にフォールバックします。
ドロップイン互換性を実現しています。既存の .rubocop.yml を読み込み、RuboCop 風のテキスト/JSON を出力し、-a/-A による自動修正に対応しています。Cop の対応範囲も継続的に拡大しています。
ベースライン(--help / --version に表示):rubocop 1.91.0、rubocop-rails 2.37.0、rubocop-performance 1.27.0、rubocop-rspec 3.9.0、rubocop-rspec_rails 2.32.0、rubocop-factory_bot 2.28.0 — src/resources/baseline.json に固定されています。
インストール済み Ruby gem プロジェクト 600件以上 で、同じツリーに対する RuboCop と rrubocop のパリティ実行を検証済みです。
インストール
brew install adrianov/rrubocop/rrubocop
cargo install rrubocop
macOS(GitHub Releases の .tar.gz。バイナリと man を含む):
# Apple Silicon — use the *-x86_64-apple-darwin.tar.gz asset on Intel Macs
curl -LO https://github.com/adrianov/rrubocop/releases/download/v0.8.16/rrubocop-0.8.16-aarch64-apple-darwin.tar.gz
tar -xzf rrubocop-0.8.16-aarch64-apple-darwin.tar.gz
sudo cp rrubocop-0.8.16-aarch64-apple-darwin/rrubocop /usr/local/bin/
sudo mkdir -p /usr/local/share/man/man1
sudo cp rrubocop-0.8.16-aarch64-apple-darwin/rrubocop.1 /usr/local/share/man/man1/
Ubuntu / Debian(GitHub Releases の .deb。amd64、Ubuntu 22.04+ / Debian bookworm+):
# example for v0.8.16 — use the asset name from the release page
curl -LO https://github.com/adrianov/rrubocop/releases/download/v0.8.16/rrubocop_0.8.16-1_amd64.deb
sudo dpkg -i rrubocop_0.8.16-1_amd64.deb
man rrubocop
rrubocop [OPTIONS] [PATH]...
機能
- 設定 — RuboCop と互換性のある解決方法に対応:親ディレクトリをたどる探索、
inherit_from/inherit_gem/require/plugins、inherit_mode(merge/override)、入れ子の.rubocop.ymlによる上書き、DisabledByDefault、NewCops/Enabled: pending、Cop ごとのEnabled/Exclude/Include/ オプション。公開 gem のデフォルト設定/inherit_gemYAML はバージョンごとに同梱され(Gemfile.lockから取得し、YAML が同一の場合はsame_asエイリアスを使用)、メモリ上で解析されます。非公開または一覧にない gem はbundle info --pathにフォールバックします。YAML 内のシンプルな ERB はネイティブに展開し、未対応のタグに限り Ruby を使用します - 自動修正 —
-a(安全)/-A(すべて) - 出力 —
progress(ファイルの処理完了に応じてストリームに表示)、text、json、github、quiet、files、…(RuboCop と同様の TTY カラー。--color/--no-color) - ディレクティブ —
# rubocop:disable/enable - パーサー — tree-sitter-ruby(Prism / CRuby 不要)
- キャッシュ —
$RRUBOCOP_CACHE_DIRまたは$XDG_CACHE_HOME/rrubocop/~/.cache/rrubocopの下に、コンテンツアドレス方式のcache.redbを保存(abcop と同様の形式)。--cache falseは読み込みをスキップしますが、書き込みは行います - LLM では MCP の利用を推奨します。
rrubocop --mcpは、エージェントから rrubocop を使う最適な方法です。モデルはコードを書いた直後に違反を受け取るため、同じターン内で修正や自動修正を行い、後続の CLI / CI の実行を待たずに、すぐに実用的なコードを仕上げられます。公式の RustrmcpSDK を使用しています。RuboCop 1.85+ と同じツール、rubocop_inspectionとrubocop_autocorrectionに対応しています
参考実装:nitrocop(アーキテクチャとフィクスチャ)、上流の RuboCop。
組み込み Cop
各部門は、一般的な RuboCop プラグインのセット(nitrocop / gem のソース)から幅優先で対応範囲を拡大しています。主な対応状況:
| 部門 | 備考 |
|---|---|
Layout/* | レイアウト Cop 90種(配置、スペース、空行、インデント。すべて自動修正に対応) |
Lint/*、Style/*、Naming/*、Security/* | 69 / 143 / 9 / 4 |
Metrics/* | AbcSize、BlockNesting、ClassLength、CollectionLiteralLength、ModuleLength、ParameterLists |
Rails/* | Rails Cop 63種 |
Performance/* | パフォーマンス Cop 24種 |
RSpec/* | RSpec Cop 104種 |
RSpecRails/* | 2種(HttpStatus、InferredSpecType) |
FactoryBot/* | 4種(AssociationStyle、AttributeDefinedStatically、CreateList、FactoryClassName) |
Bundler/*、Gemspec/*、Rake/* | 4 / 4 / 5 |
GraphQL/* | rubocop-graphql Cop 26種 |
登録済み Cop の全一覧は rrubocop --list-cops、-a/-A に対応する Cop の一覧は rrubocop --list-autocorrectable-cops で確認できます(自動修正対応は現在181種。Layout は完了済みで、Style/Lint/Rails/RSpec は拡大中です)。
使い方
rrubocop # lint .
rrubocop app lib # paths
rrubocop -f json . # JSON offenses
rrubocop -a . # safe autocorrect
rrubocop -A . # all autocorrect
rrubocop --only Metrics/AbcSize lib
rrubocop --rubocop-version 1.79.2 . # emulate a project's pinned RuboCop (matches CI's bundled gem)
rrubocop --list-cops
rrubocop -L # list target files
rrubocop -F 10 # stop after 10 offenses (off by default; `-F` = 1)
# with `-a`/`-A`, N is non-autocorrectable offenses only
rrubocop --mcp # MCP server on stdio (for AI clients)
終了コード:0 は問題なし、1 は --fail-level 以上の違反あり、2 はエラーです。
MCP(Model Context Protocol)
LLM/エージェントのワークフローに推奨します。 rrubocop を MCP サーバーとして接続すると、モデルは編集中に rubocop_inspection/rubocop_autocorrection を呼び出せます。同じターン内にフィードバックを受け取れるため、エージェントはすぐに修正でき、CI で初めて違反を見つけるのではなく、最初の段階でクリーンなコードを書けます。
rrubocop --mcp は、stdio 上で長時間稼働する MCP サーバーを起動します。RuboCop の MCP と同じ考え方ですが、Ruby の mcp gem は不要です。ツール:
| ツール | 用途 |
|---|---|
rubocop_inspection | path/paths(文字列または配列。ファイルシステムの検査には必須)および/またはインラインの source_code を使って lint を実行し、LSP 形式の違反 JSON を返します |
rubocop_autocorrection | 検査と同じ対象を指定します。safety: true は安全な修正のみを行います。ファイルシステムの path が設定されている場合、ファイルに書き込みます |
必ず path または paths を渡してください(絶対パスのファイルまたはディレクトリを推奨します。path は文字列または配列を指定できます)。サーバーは最初の対象から上位ディレクトリをたどり、.rubocop.yml を探します。ファイルシステム操作で対象を省略するとエラーになります(MCP の cwd の設定ミスによって $HOME がスキャンされるのを防ぎます)。認識される Ruby の拡張子、ファイル名、または shebang がないファイル(YAML/JSON の設定ファイルなど)は、上流の MCP と同様に暗黙的にスキップされます。上流の MCP では TargetFinder が :only_recognized_file_types モードで動作します。そのため、パスが混在していても Lint/Syntax のノイズは発生せず、summary.target_file_count には検査対象のファイルのみが反映されます。$HOME から起動した長時間稼働のグローバル MCP は、通常 ~/.rubocop.yml(AllCops: Enabled: false が一般的です)を引き継ぐため、RSpec/ExampleLength などのプロジェクトの cops が適用されないことがあります。
- MCP Registry 名:
mcp-name: io.github.adrianov/rrubocop
メタデータは server.json(crates.io の Cargo パッケージ)にあります。各 v* タグは、そのリストを MCP Registry に公開します。
クライアント設定の例(Cursor/VS Code/Windsurf):
{
"mcpServers": {
"rrubocop": {
"type": "stdio",
"command": "rrubocop",
"args": ["--mcp"],
"cwd": "/path/to/your/project"
}
}
}
Claude Code:
claude mcp add rrubocop -- rrubocop --mcp
対話的な使用ではなく、MCP クライアント向けです。
キャッシュ
$RRUBOCOP_CACHE_DIR(または $XDG_CACHE_HOME/rrubocop/~/.cache/rrubocop)の下にコンテンツアドレス指定キャッシュを保存します。キーには、コンテンツ、バージョン、ルールのリビジョン、--only/--except、--rubocop-version、設定のフィンガープリント、パスが含まれます。最大 20 000 件まで自動的に整理されます。--cache false を指定すると読み込みをスキップしますが、書き込みは行います。自動修正の実行時はキャッシュを使用しません。プロジェクト内には何も書き込みません。
ベンチマーク
大規模な Rails コードベース(Ruby ファイル約 3.8k 個)でのコールドリント(キャッシュ無効)、同じホスト:
| ツール | 実時間 | 結果 | 備考 |
|---|---|---|---|
bundle exec rubocop --cache false | 2m 37s (2:36.64) | 違反 0 件 | CPU 約 99%(主にシングルコア) |
rrubocop --cache false | 7.0s (7.005) | 違反 0 件 | CPU 約 1040%(並列処理) |
nitrocop --no-cache | 8.9s (8.906) | 違反約 21k 件 | CPU 約 1000%。公平な同条件での実行ではありません(以下を参照) |
同じクリーンな結果で、rrubocop は実時間で RuboCop より約 22 倍高速です(156.6s / 7.0s)。RuboCop のユーザー時間は 155s でした。rrubocop は複数コアで合計 71s の CPU 時間を使用しました。
nitrocop に関する注意: 初期状態では、bundle exec rubocop と同じ無効化された cop、カスタムルール、gem 設定が適用されませんでした(例:inherit_gem の読み込みに失敗、cop のスキップまたは未実装)。そのため、RuboCop/rrubocop のクリーンな実行に対して、誤検出が約 21k 件報告されました。このベースラインに合わせるには、追加の設定(--migrate、プラグイン/設定の接続)が必要です。8.9s という数値は生の処理速度として扱い、すぐに置き換え可能な同等性を示すものではありません。
rails/rails(main、bundle exec 経由の RuboCop 1.79.2)でのコールドリント(キャッシュ無効)、同じホスト(4 コア)、どちらもクリーン(違反 0 件)。2 回の実行の平均:
| ツール | 実時間 | 備考 |
|---|---|---|
bundle exec rubocop --cache false | 1m 7s (67.254) | CPU 約 99%(主にシングルコア)、3543 ファイル |
rrubocop --cache false | 5.7s (5.668) | CPU 約 357%(並列処理)、3446 ファイル |
実時間で約 12 倍高速です(67.254s / 5.668s)。RuboCop のユーザー時間は 66.9s でした。rrubocop は複数コアで合計 20.2s の CPU 時間を使用しました。
同じホストで、コールド状態の --cache false による、Active Support と Active Record の違反セットの同等性(共通の .rb ファイルで fp=0、fn=0):
| 対象 | RuboCop | rrubocop | 高速化 |
|---|---|---|---|
activesupport(rails main) | 11.566s(531 ファイル) | 1.872s | 約 6.2 倍 |
activerecord(rails main) | 29.611s(1162 ファイル) | 2.780s | 約 10.7 倍 |
activesupport(v8.1.3.1) | 10.729s(506 ファイル) | 1.795s | 約 6.0 倍 |
activerecord(v8.1.3.1) | 27.847s(1126 ファイル) | 2.656s | 約 10.5 倍 |
新規の rails new アプリ(Rails 8.1.3.1、inherit_gem 経由のデフォルト rubocop-rails-omakase、bundle exec 経由の RuboCop 1.90.0)でのコールドリントに、scaffold/model/mailer/job ジェネレーター(同一の対象ファイル 41 個)を追加。違反セットは同等(fp=0、fn=0、どちらもクリーン)。2 回の実行の平均:
| ツール | 実時間 |
|---|---|
bundle exec rubocop --cache false | 0.722s |
rrubocop --cache false | 0.593s |
nitrocop とのクロステスト
ローカルでビルドした nitrocop を使用:
testdata/cross_test_nitrocop.py /path/to/fixture_dir
違反セットを (path, line, cop_name) で比較します。
ライセンス
GPL-3.0-or-later。nitrocop 由来の設計/ロジックに関する MIT 帰属表示については、NOTICE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。