| Ruff |
| <colbgcolor=#fff,#1f2023><colcolor=#3EB049> 종류 | 코드 포맷터/린터 |
| 개발 | Astral Software Inc. |
| 출시일 | 2022년 08월 28일[1] |
| 최신 버전 | v0.14.10 |
| 사용 언어 | Rust |
| 공식 웹사이트 | |
1. 개요
#!syntax sh
# Ruff 설치 (pip)
pip install ruff
# 현재 디렉토리의 모든 파이썬 파일에 대해 린팅 실행 (자동 수정 포함)
ruff check . --fix
# 현재 디렉토리의 모든 파이썬 파일에 대해 포맷팅 실행
ruff format .
Ruff는 Rust로 작성된 극도로 빠른 Python 코드 린터(linter) 및 코드 포맷터(formatter)이다. 기존의 파편화된 Python 린팅 및 포맷팅 도구들[2]을 하나로 통합하고 훨씬 빠른 속도로 대체하는 것을 목표로 한다.
Ruff는 단일 바이너리로 제공되며, 수많은 린트 규칙을 기본적으로 지원하고, pyproject.toml[3][4] 파일을 통해 간편하게 설정을 관리할 수 있다. 매우 빠른 속도 덕분에 대규모 프로젝트에서도 실시간에 가까운 피드백을 제공하며, 개발 생산성을 크게 향상시킨다.
2. 특성
- 속도: Rust로 구현되어 기존 Python 기반 도구들보다 수십 배에서 수백 배[5] 빠른 성능을 제공한다. 린터의 경우 성능 차이가 크게 체감되고, 포맷터의 경우 특성상 코드베이스 전체 포맷이 아닌 이상 black 등 기존 툴들과 속도 체감이 크게 나는 것은 아니다. 다만 로컬에서 개발할 때 그렇다는 것이지 대부분 코드베이스 단위 포맷이 필요한 CI 환경에서는 수만 밀리세컨드만 줄일 수 있어도 체감적으로도 큰 향상이다.
- 통합된 기능: 린터와 포맷터 기능을 모두 포함하고 있어, 여러 도구를 별도로 설치하고 설정할 필요가 없다. Flake8, isort, pyupgrade, pydocstyle, Black 등 다양한 도구의 기능을 포괄적으로 지원한다.
- IDE 통합: VS Code, PyCharm 등 주요 코드 편집기 및 IDE에서 확장 기능을 통해 연동되어, 실시간 피드백을 받을 수 있다.
3. 여담
- Ruff의 등장으로 인해 Python 커뮤니티의 린팅 및 포맷팅 도구 사용 환경에 큰 변화가 일고 있다. 기존에 여러 도구를 조합해서 사용하던 복잡함이 Ruff 하나로 상당 부분 해소되었기 때문이다.
- Ruff는 린터 기능이 먼저 개발되었고, 이후 포맷터 기능이 추가되었다. 초기에는 린터로서의 강력함과 속도로 주목받았으며, 포맷터 기능 추가 이후 완전한 올인원 도구로 자리매김하고 있다.
- 동일 개발사에서 내놓은 Python 프로젝트 매니저인 uv의 출시와 메타에서 진행중인 Pyrefly 프로젝트로 인해 Python 개발환경을 Rust 기반으로만 구성하는 것이 가능해졌다. 포맷터 + 린터는 Ruff, 타입 체커는 Pyrefly, 패키지 + 가상환경 관리는 uv로 구성하는 식으로.