rails_best_practice Gem은 Ruby on Rails 코드의 품질을 향상시키기 위한 다양한 기능을 제공하며, 사용법 또한 매우 직관적입니다.
1. 사용법 및 결과 시각화
-
설치 및 실행:
gem install rails_best_practice명령으로 쉽게 설치할 수 있으며, Rails 프로젝트 디렉토리에서rails_best_practice명령을 실행하면 즉시 코드 분석을 시작합니다. -
터미널 출력: 분석 결과는 터미널에 문제 파일, 위반 라인 번호, 그리고 해당 코드 스멜에 대한 설명을 명확하게 표시합니다.
-
HTML 시각화:
--format html옵션을 통해 HTML 형식의 보고서를 생성할 수 있습니다. 이 시각화 페이지는 파일명을 클릭하면 TextMate나 Vim과 같은 에디터에서 해당 파일의 문제 라인으로 바로 이동하는 기능을 제공하며, 코드 스멜 설명을 클릭하면rails_bestpractice.com웹사이트로 연결되어 상세한 리팩토링 가이드를 얻을 수 있습니다.
2. Gem의 개발 배경 및 특징
-
탄생 배경: 개발자가 수동으로 코드 스멜을 찾아 리팩토링하는 과정의 비효율성을 해소하고자 자동화된 도구의 필요성에서 출발했습니다.
-
커뮤니티 기반: 웹사이트를 통해 전 세계 Rails 개발자들의 베스트 프랙티스를 공유하고, Gem은 기본적으로 28개의 코드 체커를 내장하고 있습니다.
-
Rails 특화: Sakuro, flog, fleek, rudy와 같은 일반적인 Ruby 코드 분석 도구들과 달리,
rails_best_practiceGem은 Rails 프로젝트의 특성과 관용적인 코드 패턴에 최적화된 검사 규칙을 제공하여 Rails 전용 코드 품질 관리를 지원합니다.
3. 사용자 정의 및 확장성
-
체커 활성화/비활성화:
rails_best_practice -g명령을 통해config/rails_best_practice.yml설정 파일을 생성할 수 있으며, 이 파일에서 기본 제공되는 체커 중 팀의 필요에 따라 특정 체커를 선택적으로 활성화/비활성화할 수 있습니다. -
플러그인 개발: Gem은 플러그인 방식을 통해 확장성을 제공하며, 개발자는 팀의 고유한 코드 컨벤션이나 특정 요구사항에 맞는 새로운 코드 검사 규칙(체커)을 직접 작성하여 추가할 수 있습니다.
- 내부 동작: Gem은 소스 코드를 읽어
SCXP(Abstract Syntax Tree, 추상 구문 트리)로 변환한 후, 이를 기반으로 어휘 분석, 준비 단계(모델 이름, 속성, 연관 관계 분석), 그리고 최종 리뷰 단계를 거쳐 코드 스멜을 감지합니다. 플러그인 개발 시SCXP의 구조를 이해하는 것이 중요하며,debug모드를 통해SCXP출력을 확인하며 체커를 구현할 수 있습니다. - 예시:
RAILS_ROOT대신Rails.root사용을 권장하는 규칙을 플러그인으로 구현하는 과정을 시연했으며, 특정 노드(예:const노드)를 찾아 이름이RAILS_ROOT인 경우 오류를 추가하는 방식으로 체커를 작성할 수 있습니다.
- 내부 동작: Gem은 소스 코드를 읽어
4. Ruby 버전 호환성
- Ruby 1.9.2 환경에서 프로젝트가 시연되었으며,
ruby_parserGem을 사용하여 Ruby 코드의 문법 변화에 대응합니다. 향후ruby_parser의 한계가 발생할 경우 Ruby 1.9 이상에 내장된Ripper파서를 활용할 계획도 언급되었습니다.