
rbcop은 RuboCop 1.92.2를 Rust로 다시 구현한 대체 도구다. 제작자는 같은 설정과 명령줄에서 결과를 바이트 단위로 동일하게 내도록 설계했으며, CI 실행에서 rubocop --parallel보다 평균 약 14배 빠르다고 밝혔다.
프로젝트의 Gemfile에 gem "rbcop", require: false를 추가한 뒤 bundle exec rubocop을 실행하던 자리에 bundle exec rbcop을 쓰면 된다. 사전 빌드 바이너리를 포함한 gem을 제공하므로 Rust 개발 도구는 필요하지 않다. GitHub Actions와 Homebrew를 통한 설치도 지원한다.
rbcop은 RuboCop의 config/default.yml에 있는 613개 코프(cop)를 구현했다. rubocop-performance, rubocop-rails, rubocop-minitest, rubocop-rspec, rubocop-rspec_rails, rubocop-factory_bot, rubocop-capybara의 코프도 자체 실행한다. 그 밖의 플러그인과 사용자 정의 코프는 RuboCop이 설치돼 있으면 해당 코프만 RuboCop에 넘겨 실행하고, 없으면 실행하지 못한 코프를 stderr에 알린다. 이 대체 실행을 끄려면 RBCOP_FALLBACK=0을 설정한다.
제작자가 제시한 벤치마크는 Linux 컨테이너, 4 vCPU, 각 프로젝트의 설정, RuboCop의 빈 결과 캐시 조건에서 세 차례 측정한 중앙값이다. 프로젝트별 속도 향상은 10~19배였으며, 변경 없는 트리에서 rbcop의 결과 캐시를 사용하면 캐시가 없는 실행보다 CPU 시간이 약 3%라고 설명했다. 구현된 코프의 결과는 9개 코드베이스에서 RuboCop과 비교해 0건의 차이가 났다고 보고했다. 이는 프로젝트가 제시한 측정과 비교 결과다.
--changed와 MCP 모드는 지원하지 않는다. --lsp, 서버 옵션, 편집기 모드, --stdin에서는 기본 설정으로 대체 실행을 하지 않으며, 필요하면 RBCOP_FALLBACK=1로 켤 수 있다. -r/--require, --plugin, 사용자 정의 포매터 클래스는 전체 실행을 RuboCop에 넘기므로 속도 향상이 없다. 심볼릭 링크를 따라 작업 디렉터리 밖을 가리키는 파일은 -a/-A로 수정하지 않고 경고와 함께 미수정 상태로 둔다. 알려진 차이와 제한은 문서에 정리돼 있다.
설치와 설정 변경 방법은 저장소와 마이그레이션 안내에서 확인할 수 있다. 속도 측정 방법과 원자료는 벤치마크 문서에 공개돼 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요