mcpField
R
rrubocop

rrubocop

ローカル
github.com開発ツール2今日更新

rrubocop について

rrubocopは、RuboCopの設定やワークフローを使うチーム向けのRust製Rubyリンターです。RuboCop風の出力と自動修正に対応し、MCPによる検査・修正ツールも提供します。

主な機能

  1. 01RuboCop互換の設定
  2. 02RuboCop風のテキスト・JSON出力
  3. 03安全および全件の自動修正
  4. 04Rubyプロジェクト向け内蔵ルール
  5. 05コンテンツアドレス方式のキャッシュ
  6. 06MCP検査・自動修正ツール

活用シーン

  1. 01既存のRubyプロジェクトを検査
  2. 02プロジェクトの`.rubocop.yml`を再利用
  3. 03コマンドラインで違反を自動修正
  4. 04コーディングエージェントでRubyコードを検査・修正

MCP 対応

`rrubocop --mcp`を実行すると、stdio経由で`rubocop_inspection`と`rubocop_autocorrection`を公開します。MCPクライアントはパスまたはインラインソースを検査し、ファイルシステム上の対象を修正できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
cargorrubocop0.8.17

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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_gem YAML はバージョンごとに同梱され(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 の実行を待たずに、すぐに実用的なコードを仕上げられます。公式の Rust rmcp SDK を使用しています。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_inspectionpath/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 false2m 37s (2:36.64)違反 0 件CPU 約 99%(主にシングルコア)
rrubocop --cache false7.0s (7.005)違反 0 件CPU 約 1040%(並列処理)
nitrocop --no-cache8.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 false1m 7s (67.254)CPU 約 99%(主にシングルコア)、3543 ファイル
rrubocop --cache false5.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):

対象RuboCoprrubocop高速化
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 false0.722s
rrubocop --cache false0.593s

nitrocop とのクロステスト

ローカルでビルドした nitrocop を使用:

testdata/cross_test_nitrocop.py /path/to/fixture_dir

違反セットを (path, line, cop_name) で比較します。

ライセンス

GPL-3.0-or-later。nitrocop 由来の設計/ロジックに関する MIT 帰属表示については、NOTICE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。