Ruff 2026: один линтер вместо трех инструментов
400 000+ органических переходов за 3 месяца. Со-основатель GoBanana (231K пользователей, 12+ млн ₽ без рекламы) и NeuroScribe (65K пользователей). SEO/GEO-стратегии для AI-поисковиков, 1 700+ единиц контента, 17+ реализованных стратегий.
Об авторе →Claude Code: новый CLI-агент от Anthropic
Anthropic выпустила Claude Code — терминальный AI-агент для разработчиков. Инструмент работает прямо в командной строке и умеет писать, редактировать и запускать код.
Zcode AI: Полный гид по визуальному интерфейсу для Claude Code и AI-агентов
Узнайте, как использовать Zcode для управления Claude Code, Gemini и Codex в едином GUI. Настройка провайдеров, MCP-серверов и визуальный вайбкодинг.
YouTube-канал с монетизацией из любой точки мира: Пошаговый гайд 2026
Инструкция по созданию YouTube-канала: обход блокировок SMS, настройка расширенных функций через виртуальные номера и правила безопасности для монетизации.
Windsurf Code Maps: Как глубоко понимать архитектуру проекта перед написанием кода
Полный гайд по Windsurf Code Maps, модели Sway 1.5 и Sway Grep. Узнайте, как визуализировать архитектуру кода и ускорить разработку в 13 раз.
Vk Fast Cash Strategy
Аудитория ВКонтакте — это те же люди, что и в Instagram, но 'социальный контракт' площадки другой. Если Instagram — это 'дорогой ресторан' с демонстрацией успеха, то VK — это 'душевная шашлычная'. Здесь не работает глянцевый 'успешный успех
Ruff 2026: один линтер вместо трех инструментов
Ruff python это линтер и форматтер, написанный на Rust, который проверяет и приводит код к единому стилю за доли секунды. По данным разработчиков Astral, ruff работает в 10-100 раз быстрее классических инструментов вроде Flake8 и Black, а по факту заменяет их вместе с isort одной конфигурацией. Ниже разберем, откуда берется такая скорость, как ruff установить, настроить через pyproject.toml и безболезненно перевести на него существующий проект.
Ruff написан на Rust и объединяет в одном инструменте линтинг (проверку кода), форматирование (приведение к единому стилю) и сортировку импортов. За три года из нишевого стартап-проекта он стал стандартом де-факто во многих python-командах, включая крупные open-source библиотеки.
Ruff — это единый инструмент для линтинга и форматирования python-кода, который заменяет Flake8, Black, isort, pyupgrade и еще десяток плагинов. Его сделала компания Astral, авторы пакетного менеджера uv.
Ruff проверяет свыше 900 правил качества кода и одновременно форматирует файлы по стандарту, совместимому с Black. Разработан он на Rust, поэтому не упирается в ограничения Python-интерпретатора при обходе AST дерева. Именно это дает многократный прирост скорости на больших кодовых базах.
Для новичков поясним на пальцах. Линтер это инструмент, который читает код и находит ошибки стиля, неиспользуемые переменные, потенциальные баги, но сам код не меняет и не запускает. Форматтер работает иначе: он не ищет ошибки логики, а просто переставляет пробелы, кавычки и отступы по единому стандарту. До ruff в python-проекте обычно стояли отдельно Flake8 (линтер), Black (форматтер) и isort (сортировка импортов) — три разных зависимости, три конфига, три момента, когда что-то может разъехаться.
Ruff родился в 2022 году как побочный проект Шарли Марша, а сейчас им управляет компания Astral. Та же команда делает uv, менеджер python-пакетов, и ty, типчекер. У Astral сложилась целая экосистема быстрых инструментов на Rust для python-разработки, и ruff в ней — самая зрелая часть.

Ruff покрывает функциональность всех трех инструментов одним бинарником: линтинг как у Flake8, форматирование как у Black, сортировку импортов как у isort. Конфиг живет в одном файле вместо трех.
Три отдельных инструмента означают три отдельных набора зависимостей, три места для настройки и три момента, где конфиги могут начать противоречить друг другу. Ruff убирает эту фрагментацию: один пакет, одна секция в pyproject.toml, одна команда для проверки и одна для форматирования.

| Задача | Классический стек | Ruff |
|---|---|---|
| Линтинг | Flake8 + плагины (flake8-bugbear и другие) | ruff check |
| Форматирование | Black | ruff format |
| Сортировка импортов | isort | встроено в линтер |
| Модернизация синтаксиса | pyupgrade | встроено |
| Автоудаление неиспользуемого кода | autoflake | встроено |
| Число зависимостей | 4-6 пакетов | 1 пакет |
| Язык реализации | Python | Rust |
Правила ruff почти полностью повторяют Flake8: те же коды ошибок E, W, F, только реализованы заново на Rust. Это значит, что переход не требует переучивать команду с нуля, коды ошибок и их смысл остаются знакомыми.
На кодовой базе TensorFlow в 1,1 млн строк ruff проверяет код в разы быстрее Flake8 и Pylint даже без кэша, а форматирует примерно в 130 раз быстрее Black. В CI/CD эта разница напрямую превращается в сэкономленные минуты и деньги.
Разница в скорости не маркетинговый трюк, а следствие архитектуры. Python-инструменты вроде Flake8 и Pylint сами написаны на Python и упираются в интерпретатор при обходе дерева синтаксиса. Ruff обходит то же дерево на Rust, без накладных расходов интерпретируемого языка.
Независимые тесты на кодовой базе TensorFlow (свыше 1,1 миллиона строк) показали: без кэша ruff обгоняет и Flake8, и Pylint в разы, причем Pylint не спасает даже параллелизация по ядрам. С включенным кэшированием разрыв немного сокращается, но ruff все равно остается заметно впереди. В CI/CD, где кэш часто отсутствует между запусками, разница ощущается сильнее всего.
Форматтер ruff показывает похожую картину. На тесте с той же кодовой базой TensorFlow ruff format отработал примерно в 130 раз быстрее Black. Основатель FastAPI Себастьян Рамирес шутит, что ruff настолько быстрый, что иногда специально вносит баг в код, просто чтобы убедиться — инструмент действительно запустился и проверил файлы, а не просто мгновенно завершился.

Ruff теперь по умолчанию включает 413 правил вместо прежних 59, а всего в инструменте насчитывается 968 правил по состоянию на середину 2026 года. Для сравнения, в 2023 году правил было втрое меньше — проект развивается очень быстро.
| Инструмент | Что делает | Примерная разница в скорости |
|---|---|---|
| Ruff vs Flake8 | линтинг | в разы быстрее без кэша, на порядок в CI без кэша |
| Ruff vs Pylint | линтинг | быстрее даже с параллелизацией Pylint по ядрам |
| Ruff format vs Black | форматирование | около 130x на большой кодовой базе |
Ruff устанавливается одной командой через pip, pipx или uv. Для локального проекта достаточно pip install ruff, для глобального доступа лучше подойдет uv tool install ruff.
Есть три рабочих способа. Если ruff нужен только в виртуальном окружении одного проекта:
pip install ruffЕсли хочется иметь ruff глобально во всех проектах, но в изолированном окружении:
pipx install ruffЕсли в стеке уже используется uv (а команда VibeCoderz рекомендует именно uv для python-проектов), команда простейшая:
uv tool install ruffПосле установки версия проверяется командой ruff --version. Дальше нужны буквально две команды на каждый день: ruff check запускает линтинг текущей папки и подпапок, а ruff check --fix сразу исправляет то, что можно исправить безопасно — например, удаляет неиспользуемые импорты. Для реального времени есть ruff check --watch, который следит за файлами и подсвечивает ошибки по мере изменений.
Форматирование делается отдельной командой:
ruff formatОна не трогает логику кода, только расставляет пробелы, кавычки и переносы строк по единому стандарту, совместимому с Black.

Ruff конфигурируется в секции tool.ruff файла pyproject.toml или в отдельном ruff.toml. Через select и extend-select включаются категории правил, через ignore — исключения.
Свежая установка ruff уже работает из коробки с разумным набором правил по умолчанию. Но в реальном проекте почти всегда нужна тонкая настройка — включить дополнительные категории, что-то исключить для конкретных файлов.
Базовый конфиг в pyproject.toml выглядит так:
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
extend-select = ["I", "UP", "B"]
ignore = ["E501"]
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["E402"]
"tests/*" = ["E402"]
[tool.ruff.format]
quote-style = "single"Здесь extend-select добавляет к правилам по умолчанию категории I (сортировка импортов, аналог isort), UP (модернизация синтаксиса под нужную версию python) и B (bugbear, отлов частых логических ошибок). ignoreисключает конкретное правило по всему проекту, а per-file-ignores — точечно для отдельных файлов или папок, что удобно для __init__.py и тестов, где часть правил обычно мешает.

Если в проекте уже используется pyproject.toml для других инструментов и хочется не смешивать секции, ruff можно вынести в отдельный файл ruff.toml с теми же ключами, но без вложенности под tool.ruff.
Отдельная тонкость — конфликты между линтером и форматтером. Иногда правило линтинга требует, например, висячую запятую, а форматтер убирает лишний перенос строки, из-за чего файл после ruff format снова помечается линтером как проблемный. Решается это либо повторным прогоном форматтера после фикса, либо через extend-safe-fixes и extend-unsafe-fixes, которыми можно повышать или понижать статус конкретного автофикса.
Расширение Ruff для VS Code показывает ошибки прямо в редакторе и умеет форматировать код по сохранению файла. Настройка занимает пару минут через файл settings.json.
Расширение называется просто Ruff и ставится из маркетплейса VS Code. После установки редактор не начинает использовать ruff автоматически — нужно явно прописать это в настройках.
В settings.json добавляется такой блок:
{
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit"
}
}
}editor.defaultFormatter делает ruff форматтером по умолчанию для python-файлов. formatOnSave запускает форматирование при каждом сохранении. Секция codeActionsOnSave с source.fixAll автоматически применяет все безопасные автофиксы линтера, а source.organizeImports пересобирает импорты по алфавиту и группам при каждом Ctrl+S.
После этой настройки в редакторе появляется подсветка проблемных строк с кодом ошибки (например F401 для неиспользуемого импорта), а клик по коду правила открывает документацию прямо в браузере. Это удобно не только для исправления, но и для обучения — разработчик видит объяснение, почему конкретная конструкция считается проблемной.

Переход занимает обычно меньше часа: устанавливаете ruff, переносите правила из старых конфигов в секцию tool.ruff, удаляете старые зависимости и расширения из редактора.
Миграция редко требует переписывать код руками. Основная работа — перенос настроек.
Раз — устанавливаете ruff и добавляете секцию [tool.ruff] в pyproject.toml. Два — сверяете старые конфиги Flake8 (.flake8 или setup.cfg) и isort (.isort.cfg) с правилами, которые уже включены в ruff по умолчанию, и добавляете недостающие через extend-select. Три — запускаете ruff check --fix и ruff format на всем проекте и смотрите диф перед коммитом.
Дальше стоит убрать из pre-commit хуков и CI-пайплайна старые вызовы Flake8, Black и isort, заменив их двумя строками: ruff check и ruff format --check. В VS Code достаточно удалить расширения Black, isort и Pylint (если они не нужны для других языковых фич) и оставить одно расширение Ruff.

Частая ошибка при миграции — включить сразу все 900+ правил через select = ["ALL"]. На небольшом скрипте это может выдать десятки предупреждений разом, часть из которых команде не актуальна (например, запрет на print-выражения в проде). Разумнее стартовать с дефолтного набора правил, добавлять категории по одной и смотреть, что реально приносит пользу именно вашему проекту.
Максим: «Мог просто засесть до пяти ночи и просто там править одну какую-то функцию, которая не работала. Если бы не терпение, в моменте я уже испотел и мне хотелось все это закрыть. Но я понимал, что это можно решить и нужно решить, чтобы идти дальше.»

Быстрый линтер такие ночи не отменяет полностью, но убирает из них львиную долю механических ошибок — опечатки в именах, неиспользуемые импорты, забытые скобки. Остается разбираться только с настоящей логикой, а не с мелочами, которые за вас может проверить программа за десятые доли секунды.
Главный плюс ruff — скорость и единая конфигурация вместо трех инструментов. Главный минус — это не типчекер, и на редких проектах правила форматтера и линтера могут конфликтовать между собой.
Сильные стороны у ruff весомые. Скорость на больших кодовых базах ощущается физически: там, где Flake8 или Pylint думают секундами, ruff отрабатывает за доли секунды, и это меняет саму привычку запускать проверки. Единая конфигурация избавляет от рассинхрона между тремя разными инструментами. Более 900 правил дают гибкость — от базовых стилистических до отлова реальных логических ошибок вроде мутабельных значений по умолчанию в функциях. А активная разработка Astral означает, что новые правила и Python-фичи покрываются быстро.
Но и слабые стороны стоит проговорить честно. Ruff — это линтер и форматтер, а не типчекер. Он не найдет ошибку вроде передачи строки туда, где ожидается число — для этого по-прежнему нужен mypy или ty. Иногда, как мы разбирали выше, форматтер и линтер могут спорить друг с другом из-за висячих запятых или переносов строк, и разработчику приходится прогонять команды дважды. И последнее: раз в несколько месяцев ruff меняет набор правил по умолчанию (как это случилось летом 2026 года, когда дефолтный набор вырос с 59 до 413 правил) — команде нужно быть готовой к тому, что после обновления версии внезапно появится пачка новых предупреждений.

Ruff подходит практически любому python-проекту, от учебного скрипта до кодовой базы с миллионом строк. Единственный случай, когда переход можно отложить, — жесткая корпоративная политика, завязанная на конкретный плагин Flake8, у которого пока нет аналога в ruff.

| Кому | Стоит переходить сейчас |
|---|---|
| Новый python-проект | Да, ставить ruff с первого дня |
| Большая кодовая база с CI/CD | Да, экономия времени в пайплайне ощутима сразу |
| Проект с редким кастомным Flake8-плагином | Проверить наличие аналога в ruff перед переходом |
| Команда, которая пишет вайб-кодинг MVP на Python | Да, быстрый фидбек важнее при итеративной разработке с AI |
Для вайбкодеров, которые собирают Python-сервисы через промпты в Cursor или Windsurf, быстрый линтер особенно полезен: AI-ассистент генерирует код итерациями, и чем быстрее приходит обратная связь по стилю и очевидным ошибкам, тем меньше циклов правок. Каталог AI IDE с обзорами Cursor, Windsurf и других инструментов есть на странице каталога VibeCoderz — там же разбор, какой редактор лучше стыкуется с python-стеком.
-fix.Ruff это линтер или форматтер? И то, и другое одновременно. Команда ruff check линтует код, а ruff formatформатирует — это два разных режима одного инструмента.
Можно ли использовать ruff вместе с mypy? Да, и это стандартная связка. Ruff проверяет стиль и логические ошибки уровня синтаксиса, а mypy отдельно проверяет типы. Один инструмент не заменяет другой.
Ruff платный или бесплатный? Ruff полностью бесплатный и с открытым кодом, распространяется под лицензией MIT. Компания Astral зарабатывает на других продуктах экосистемы, а не на самом ruff.
Нужно ли удалять Flake8 и Black после перехода на ruff? Не обязательно технически, но рекомендуется, чтобы избежать путаницы в CI и конфликтующих автофиксов. В VS Code лучше отключить конкурирующие расширения-форматтеры.
Работает ли ruff с Django и FastAPI проектами? Да, ruff не завязан на конкретный фреймворк и линтует любой python-код, включая проекты на Django, FastAPI, Flask.
Что делать, если ruff после обновления версии выдал много новых ошибок? Это нормально при выходе крупных релизов, которые расширяют дефолтный набор правил. Можно временно откатиться на старую версию через pyproject.toml, либо разобрать новые предупреждения пачками через per-file-ignores, откладывая часть на потом с явным комментарием в конфиге.
Если внедряете ruff в связке с AI-инструментами для разработки, стоит заодно посмотреть обзоры Cursor и Windsurf в каталоге VibeCoderz — оба неплохо дружат с python-линтерами через встроенные терминалы и расширения. Для настройки CI/CD пайплайна с ruff пригодится и агент под задачи devops — подборка есть в каталоге AI-агентов VibeCoderz.
Если нужна помощь с настройкой пайплайна проверки кода под конкретный python-проект, можно записаться на консультацию к Максиму.
Обновлено: сентябрь 2026