본문으로 건너뛰기

© 2026 Molayo

GH Trending릴리즈2026. 06. 15. 13:44

astral-sh/ruff

요약

Rust로 작성된 초고속 Python linter 및 code formatter인 Ruff를 소개합니다. 기존의 Flake8, Black, isort 등을 대체할 수 있으며, 기존 도구보다 10~100배 이상 빠른 성능을 자랑합니다.

핵심 포인트

  • Rust 기반으로 구현되어 기존 도구 대비 압도적인 실행 속도 제공
  • Flake8, Black, isort 등 다양한 Python 도구의 기능을 통합 지원
  • 900개 이상의 내장 규칙과 자동 오류 수정(Fix) 기능 탑재
  • VS Code 통합 및 Monorepo 환경에 최적화된 구조

Rust로 작성된 매우 빠른 Python linter 및 code formatter입니다.

CPython 코드베이스를 처음부터 linting 합니다.

  • ⚡️ 기존 linter (Flake8 등) 및 formatter (Black 등)보다 10-100배 빠름

  • 🐍 pip를 통해 설치 가능

  • 🛠️ pyproject.toml 지원

  • 🤝 Python 3.14 호환성

  • ⚖️ Flake8, isort, Black과 동일한 기능 제공 (Drop-in parity)

  • 📦 변경되지 않은 파일을 다시 분석하지 않도록 내장된 caching 지원

  • 🔧 자동 오류 수정을 위한 Fix 지원 (예: 사용하지 않는 import 자동 제거)

  • 📏 flake8-bugbear와 같은 인기 있는 Flake8 플러그인들을 네이티브로 재구현하여 900개 이상의 내장 규칙 제공

  • ⌨️ VS Code 등을 위한 퍼스트 파티 에디터 통합 지원

  • 🌎 계층적 및 폭포수형 설정을 지원하는 Monorepo 친화적 구조

Ruff는 단일하고 공통된 인터페이스 뒤에 더 많은 기능을 통합하는 동시에, 대안 도구들보다 수십 배 더 빠른 것을 목표로 합니다.

Ruff는 Flake8 (및 수십 개의 플러그인), Black, isort, pydocstyle, pyupgrade, autoflake 등을 대체하는 데 사용할 수 있으며, 이 모든 과정에서 개별 도구보다 수십 또는 수백 배 더 빠르게 실행됩니다.

Ruff는 매우 활발하게 개발되고 있으며 다음과 같은 주요 오픈 소스 프로젝트에서 사용되고 있습니다:

...그리고 훨씬 더 많은 프로젝트들.

Ruff는 uv 및 ty의 제작자인 Astral의 지원을 받습니다.

런칭 포스트를 읽거나, 원래의 프로젝트 발표를 확인하세요.

Sebastián Ramírez, FastAPI의 제작자:

"Ruff는 너무 빨라서 가끔은 실제로 실행되고 코드를 체크하는지 확인하기 위해 코드에 의도적으로 버그를 추가하기도 합니다."

Nick Schrock, Elementl의 설립자이자 GraphQL의 공동 제작자:

"왜 Ruff가 게임 체인저인가요? 주로 거의 1000배 더 빠르기 때문입니다. 말 그대로요. 오타가 아닙니다. 우리의 가장 큰 모듈(dagster 자체, 25만 줄의 코드)에서 pylint는 내 M1의 4개 코어에서 병렬로 실행해도 약 2.5분이 걸립니다. 전체 코드베이스에 ruff를 실행하면 0.4초가 걸립니다."

Bryan Van de Ven, Bokeh의 공동 제작자이자 Conda의 원작자:

내 머신에서 Ruff는 flake8보다 약 150~200배 빠르며, 전체 리포지토리(repo)를 스캔하는 데 약 20초 대신 약 0.2초가 걸립니다. 이는 로컬 개발(local dev) 환경에서 엄청난 삶의 질(quality of life) 향상을 가져다줍니다. 충분히 빠르기 때문에 실제 커밋 훅(commit hook)으로 추가했는데, 정말 환상적입니다.

Timothy Crosley,
isort의 제작자:

방금 첫 번째 프로젝트를 Ruff로 전환했습니다. 지금까지 유일한 단점은 너무 빨라서 의도적으로 몇 가지 에러를 발생시키기 전까지는 제대로 작동하고 있는지 믿기지 않았다는 점입니다.

Tim Abbott,
Zulip의 리드 개발자 (여기에도 참여):

이것은 그저 말도 안 되게 빠릅니다...

ruff

놀랍습니다.

더 자세한 내용은 문서를 참조하세요.

더 자세한 내용은 문서를 참조하세요.

Ruff는 PyPI에서 ruff로 사용할 수 있습니다.

uvx를 사용하여 Ruff를 직접 호출하세요:

uvx ruff check # 현재 디렉토리의 모든 파일을 린트(Lint)합니다.
uvx ruff format # 현재 디렉토리의 모든 파일을 포맷팅(Format)합니다.

또는 uv(권장), pip, 또는 pipx로 Ruff를 설치하세요:

# uv를 사용하는 경우.
uv tool install ruff@latest # Ruff를 전역(globally)으로 설치합니다.
uv add --dev ruff # 또는 프로젝트에 Ruff를 추가합니다.
...

버전 0.5.0부터 Ruff는 당사의 독립형 설치 프로그램(standalone installers)으로 설치할 수 있습니다:

# macOS 및 Linux에서.
curl -LsSf https://astral.sh/ruff/install.sh | sh
# Windows에서.
...

또한 Homebrew, Conda 및 다양한 기타 패키지 관리자(package managers)를 통해 Ruff를 설치할 수 있습니다.

린터(linter)로서 Ruff를 실행하려면 다음 중 하나를 시도해 보세요:

ruff check # 현재 디렉토리(및 모든 하위 디렉토리)의 모든 파일을 린트합니다.
ruff check path/to/code/ # `/path/to/code`(및 모든 하위 디렉토리)의 모든 파일을 린트합니다.
ruff check path/to/code/*.py # `/path/to/code` 내의 모든 `.py` 파일을 린트합니다.
...

또는, 포맷터(formatter)로서 Ruff를 실행하려면:

ruff format # 현재 디렉토리(및 모든 하위 디렉토리)의 모든 파일을 포맷팅합니다.
ruff format path/to/code/ # `/path/to/code`(및 모든 하위 디렉토리)의 모든 파일을 포맷팅합니다.
ruff format path/to/code/*.py # `/path/to/code` 내의 모든 `.py` 파일을 포맷팅합니다.
...

Ruff는 ruff-pre-commit을 통해 프리커밋 훅(pre-commit hook)으로도 사용할 수 있습니다:

Ruff version.

rev: v0.15.17
...

Ruff는 VS Code 확장 프로그램(extension)으로 사용하거나 다양한 다른 에디터와 함께 사용할 수도 있습니다.

Ruff는 ruff-action을 통해 GitHub Action으로도 사용할 수 있습니다:

name: Ruff
on: [ push, pull_request ]
jobs:
...

Ruff는 pyproject.toml, ruff.toml, 또는 .ruff.toml 파일을 통해 설정할 수 있습니다 (모든 설정 옵션의 전체 목록은 Configuration 또는 Settings를 참조하세요).

별도로 지정하지 않으면, Ruff의 기본 설정은 다음의 ruff.toml 파일과 동일합니다:

# 흔히 무시되는 다양한 디렉터리를 제외합니다.
exclude = [
".bzr",
...

pyproject.toml에서는 각 섹션 헤더(section header) 앞에 tool.ruff가 접두사로 붙어야 함에 유의하세요. 예를 들어, [lint][tool.ruff.lint]로 대체되어야 합니다.

일부 설정 옵션은 규칙 활성화 및 비활성화, 파일 탐색(file discovery), 로깅 레벨(logging level)과 관련된 것과 같이 전용 명령줄 인자(command-line arguments)를 통해 제공될 수 있습니다:

ruff check --select F401 --select F403 --quiet

나머지 설정 옵션은 모든 것을 수용하는 --config 인자를 통해 제공될 수 있습니다:

ruff check --config "lint.per-file-ignores = {'some_file.py' = ['F841']}"

최신 린트 규칙(lint rules), 포매터 스타일(formatter style) 변경, 인터페이스 업데이트 등에 참여하려면, 설정 파일에 preview = true를 설정하거나 명령줄에서 --preview를 전달하여 프리뷰 모드(preview mode)를 활성화하세요. 프리뷰 모드는 안정화되기 전에 변경될 수 있는 일련의 불안정한 기능들을 활성화합니다.

Ruff의 최상위 명령(top-level commands)에 대한 자세한 내용은 ruff help를, 린팅(linting) 및 포매팅(formatting) 명령에 대한 자세한 내용은 각각 ruff help checkruff help format을 참조하세요.

Ruff는 900개 이상의 린트 규칙을 지원하며, 그 중 다수는 Flake8, isort, pyupgrade 등과 같은 인기 있는 도구에서 영감을 받았습니다. 규칙의 출처와 관계없이, Ruff는 모든 규칙을 Rust로 재구현하여 자체 기능(first-party feature)으로 제공합니다.

기본적으로 Ruff는 Flake8의 F 규칙과 함께 E 규칙의 일부를 활성화합니다.

규칙들을 제공하며, ruff format이나 Black과 같은 포매터 (formatter) 사용 시 중복되는 스타일 규칙 (stylistic rules)은 제외합니다.

Ruff를 이제 막 시작하는 단계라면, 기본 규칙 세트 (default rule set)가 시작하기에 아주 좋은 지점입니다: 별도의 설정 없이도 다양한 일반적인 오류(사용되지 않는 임포트 (unused imports) 등)를 잡아냅니다.

미리보기 (preview) 단계에서 Ruff는 B, UP, RUF 카테고리의 규칙들을 포함하여 훨씬 더 확장된 기본 규칙 세트를 활성화합니다. 새로운 기본 설정들을 사용해 보시고, GitHub discussion에 자유롭게 피드백을 남겨주세요. 그곳에서 새로운 규칙 세트의 전체 목록도 확인하실 수 있습니다.

기본 규칙 외에도 Ruff는 다음과 같은 가장 인기 있는 Flake8 플러그인 및 관련 코드 품질 도구들을 재구현 (re-implements)했습니다:

  • autoflake
  • eradicate
  • flake8-2020
  • flake8-annotations
  • flake8-async
  • flake8-bandit (#1646)
  • flake8-blind-except
  • flake8-boolean-trap
  • flake8-bugbear
  • flake8-builtins
  • flake8-commas
  • flake8-comprehensions
  • flake8-copyright
  • flake8-datetimez
  • flake8-debugger
  • flake8-django
  • flake8-docstrings
  • flake8-eradicate
  • flake8-errmsg
  • flake8-executable
  • flake8-future-annotations
  • flake8-gettext
  • flake8-implicit-str-concat
  • flake8-import-conventions
  • flake8-logging
  • flake8-logging-format
  • flake8-no-pep420
  • flake8-pie
  • flake8-print
  • flake8-pyi
  • flake8-pytest-style
  • flake8-quotes
  • flake8-raise
  • flake8-return
  • flake8-self
  • flake8-simplify
  • flake8-slots
  • flake8-super
  • flake8-tidy-imports
  • flake8-todos
  • flake8-type-checking
  • flake8-use-pathlib
  • flynt (#2102)
  • isort
  • mccabe
  • pandas-vet
  • pep8-naming
  • pydocstyle
  • pygrep-hooks
  • pylint-airflow
  • pyupgrade
  • tryceratops
  • yesqa

지원되는 규칙의 전체 목록은 Rules를 참조하세요.

기여 (Contributions)는 언제나 환영하며 매우 감사하게 생각합니다. 시작하려면 **기여 가이드라인 (contributing guidelines)**을 확인해 주세요.

또한 Discord에서 저희와 함께할 수 있습니다.

문제가 발생했나요? GitHub의 기존 이슈 (issues)를 확인하거나, 자유롭게 **새로운 이슈를 생성 (open a new one)**해 주세요.

Discord에서 도움을 요청할 수도 있습니다.

Ruff의 linter (린터)는 Python 생태계의 많은 다른 도구들, 특히 Flake8, Pyflakes, pycodestyle, pydocstyle, pyupgrade, 그리고 isort의 API와 구현 세부 사항을 모두 활용합니다.

어떤 경우에는 Ruff가 해당 도구의 "직접적인" Rust 포트 (port)를 포함하기도 합니다. 우리는 이러한 도구들을 유지 관리하는 분들의 노고와, 그들이 Python 커뮤니티에 제공한 모든 가치에 감사하고 있습니다.

Ruff의 formatter (포매터)는 Rome의 rome_formatter를 포크 (fork)하여 구축되었으며, 다시 한번 Rome, Prettier, 그리고 Black의 API와 구현 세부 사항을 활용합니다.

Ruff의 import resolver (임포트 리졸버)는 Pyright의 import resolution (임포트 해석) 알고리즘을 기반으로 합니다.

Ruff는 Clippy나 ESLint와 같이 Python 생태계 외부의 여러 도구로부터도 영향을 받았습니다.

Ruff는 수많은 기여자들의 혜택을 받고 있습니다.

Ruff는 MIT 라이선스 하에 배포됩니다.

Ruff는 다음과 같은 다수의 주요 오픈 소스 프로젝트와 기업에서 사용되고 있습니다:

  • Albumentations

  • Amazon (AWS SAM)

  • Anki

  • Anthropic (Python SDK)

  • Apache Airflow

  • AstraZeneca (Magnus)

  • Babel

  • Benchling (Refac)

  • Bokeh

  • Capital One (datacompy)

  • CrowdCent (NumerBlox)

  • Cryptography (PyCA)

  • CERN (Indico)

  • DVC

  • Dagger

  • Dagster

  • Databricks (MLflow)

  • Dify

  • FastAPI

  • Godot

  • Gradio

  • Great Expectations

  • HTTPX

  • Hatch

  • Home Assistant

  • Hugging Face (Transformers, Datasets, Diffusers)

  • IBM (Qiskit)

  • ING Bank (popmon, probatus)

  • Ibis

  • ivy

  • JAX

  • Jupyter

  • Kraken Tech

  • LangChain

  • Litestar

  • LlamaIndex

  • Matrix (Synapse)

  • MegaLinter

  • Meltano (Meltano CLI, Singer SDK)

  • Microsoft (Semantic Kernel, ONNX Runtime, LightGBM)

  • Modern Treasury (Python SDK)

  • Mozilla (Firefox)

  • Mypy

  • Nautobot

  • Netflix (Dispatch)

  • Neon

  • Nokia

  • NoneBot

  • NumPyro

  • ONNX

  • OpenBB

  • Open Wine Components

  • PDM

  • PaddlePaddle

  • Pandas

  • Pillow

  • Poetry

  • Polars

  • PostHog

  • Prefect (Python SDK, Marvin)

  • PyInstaller

  • PyMC

  • PyMC-Marketing

  • pytest

  • PyTorch

  • Pydantic

  • Pylint

  • PyScripter

  • PyVista

  • Reflex

  • River

  • Rippling

  • Robyn

  • Saleor

  • Scale AI (Launch SDK)

  • SciPy

  • Snowflake (SnowCLI)

  • Sphinx

  • Stable Baselines3

  • Starlette

  • Streamlit

  • The Algorithms

  • Vega-Altair

  • Weblate

  • WordPress (Openverse)

  • ZenML

  • Zulip

  • build (PyPA)

  • cibuildwheel (PyPA)

  • delta-rs

  • featuretools

  • meson-python

  • nox

  • pip

Ruff를 사용하고 있다면, 프로젝트의 README.md에 Ruff 배지를 추가하는 것을 고려해 보세요.

:

[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

... 또는 README.rst:

.. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff

... 또는 HTML로:

`<a href=

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Trending Rust (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0