RuboCop
한 줄 정의
RuboCop은 Ruby 생태계에서 널리 쓰이는 정적 코드 분석기 겸 포매터로, 여러 Cop으로 스타일·레이아웃·잠재적 버그·보안 취약점·복잡도를 검사하고 자동 수정한다.
핵심 요지
- 정적 분석 대상을 실행하지 않고 AST 기반으로 검사하며, 안전한 수정(
-a)과 전체 수정(-A)을 구분한다. .rubocop.yml로 거의 모든 Cop의 동작을 세밀하게 제어할 수 있으며, 계층적 설정 병합을 지원한다.--auto-gen-config로 기존 코드베이스에도 점진적 도입이 가능해 CI 통합이 용이하다.
상세
RuboCop의 모든 검사 단위는 Cop이라고 부른다. Ruby 파서로 AST를 생성한 뒤 등록된 Cop들이 순회하며 위반(offense)을 감지한다. Cop은 8개 부서(Style, Layout, Lint, Metrics, Naming, Security, Bundler, Gemspec)로 분류된다.
설치와 기본 실행:
gem install rubocop
rubocop -a # 안전한 자동 수정만
rubocop -A # 모든 자동 수정(비안전 포함)
rubocop --auto-gen-config # 현재 offenses 기반 TODO 설정 생성
rubocop -P # 병렬 실행설정의 핵심 요소:
inherit_from: 다른.yml파일 상속AllCops: 전역 설정(TargetRubyVersion, Exclude, NewCops 등)plugins: 공식 확장(rubocop-performance, rubocop-rails, rubocop-rspec 등) 로드- Safe vs Unsafe Autocorrect:
-a는 동작을 절대 바꾸지 않으며,-A는 동작 변경 가능성이 있는 수정도 포함
점진적 도입 워크플로우:
rubocop --auto-gen-config로 현재 offenses를 TODO 파일로 생성.rubocop.yml에inherit_from: .rubocop_todo.yml추가- CI에서 새 코드만 검사하고 주기적으로 TODO 갱신
예시
Rails 프로젝트의 .rubocop.yml 구성:
plugins:
- rubocop-performance
- rubocop-rails
- rubocop-rspec
AllCops:
TargetRubyVersion: 3.2
NewCops: enable
Metrics/MethodLength:
Max: 15
Exclude:
- 'db/migrate/**/*'GitHub Actions 통합:
- name: RuboCop
run: bundle exec rubocop --parallel충돌
현재 확인된 충돌 없음.