원문: Ruff v0.16.0 — Simon Willison's Weblog (2026-07-25) 번역일: 2026-07-26
Astral이 며칠 전인 7월 23일, Python 린팅 도구 Ruff의 중요한 신버전을 출시했다. 사이먼은 자신의 여러 CI 잡이 새로운 기본 Ruff 규칙과 버전 고정을 안 해둔 "ruff" 개발 의존성 때문에 갑자기 실패하기 시작하면서 오늘에서야 이를 알아챘다고 전한다.
발표를 쓴 Brent Westbrook에 따르면, Ruff는 이제 기본적으로 413개 규칙을 활성화한다 — 이전 버전의 59개에서 대폭 늘어난 수치다. Ruff의 기본 규칙셋이 마지막으로 바뀐 v0.1.0 이후로 전체 규칙 수 자체도 708개에서 968개로 늘었다. 이 중 상당수는 문법 오류나 즉각적인 런타임 오류처럼 심각한 문제를 잡아내지만 그동안은 기본값으로 켜져 있지 않았다. 새 규칙셋 덕분에 이제 별도 설정 없이도 Ruff가 이런 문제들을 자동으로 알려준다.
한 줄 명령으로 아무 Python 프로젝트에나 시험해볼 수 있다: uvx ruff@latest check .
사이먼은 자신의 가장 큰 프로젝트 3개 — Datasette, sqlite-utils, LLM — 에 최신 Ruff를 돌려본 결과, 새 기본 규칙에 걸리는 사소한 문제가 수백 건씩 발견됐다고 한다. 세 프로젝트 모두 Python 3.10부터 3.14까지 CI로 매우 꼼꼼하게 테스트되고 있어서 이런 업그레이드는 비교적 안전한 편이다. 대부분의 수정은 다음 명령 한 줄로 처리됐다: uvx ruff@latest check . --fix --unsafe-fixes
sqlite-utils의 경우 이 명령이 "1618개 오류 발견(1538개 자동 수정, 80개 남음)"이라고 보고했다. 남은 이슈 예시로는 tz 인자 없는 datetime.now() 호출(DTZ005), except Exception:처럼 지나치게 광범위한 예외 처리(BLE001), 사용하지 않고 버려지는 속성 접근(B018) 등이 있었다.
Astral이 최근 OpenAI에 인수된 것을 고려하면 당연한 얘기지만, 이런 출력 결과는 코딩 에이전트가 문제를 고치는 데 필요한 정보를 그대로 제공한다. 실제로 사이먼은 Codex(GPT-5.6 Sol high)에게 LLM과 sqlite-utils 업그레이드를 맡겼고, Claude Code(Opus 5 사용)에게는 Datasette 업그레이드를 맡겼다.
핵심 요약 (12줄)
- Astral이 Ruff v0.16.0을 7월 23일 출시했다.
- 기본 활성 규칙이 59개에서 413개로 대폭 늘었다.
- v0.1.0 이후 전체 규칙 수도 708개에서 968개로 증가했다.
- 새로 켜진 규칙 다수가 문법 오류·즉각적 런타임 오류 등 심각한 문제를 잡아낸다.
uvx ruff@latest check .한 줄로 아무 프로젝트에나 바로 시험 가능.- 사이먼은 Datasette, sqlite-utils, LLM 3개 프로젝트에 돌려 수백 건의 이슈를 발견했다.
- 세 프로젝트 모두 Python 3.10~3.14 CI 테스트가 탄탄해 업그레이드가 비교적 안전했다.
--fix --unsafe-fixes옵션으로 대부분 자동 수정됐다.- sqlite-utils 기준 1618개 오류 중 1538개 자동 수정, 80개 수동 대응 필요.
- 남은 이슈 예시: tz 없는 datetime.now(), 광범위한 except Exception, 버려지는 속성 접근 등.
- Astral이 OpenAI에 인수된 것과 맞물려, 출력 결과가 코딩 에이전트가 바로 고치기 좋은 형태라는 점을 지적.
- 실제로 Codex(GPT-5.6 Sol)로 LLM·sqlite-utils를, Claude Code(Opus 5)로 Datasette를 업그레이드했다.