Начните с правил, которые дают понятную пользу
Статический анализ может находить неиспользуемые импорты, недостижимый код, подозрительные конструкции и нарушения выбранного стиля. Если проект существующий, включение слишком большого набора проверок сразу создаёт огромный долг и провоцирует команду просто отключить инструмент. Практичнее начать с очевидных ошибок и постепенно расширять конфигурацию. Каждое новое правило должно отвечать на вопрос, какую проблему оно предотвращает и насколько часто создаёт ложный шум.
Автоисправления экономят ручную работу
Часть замечаний Ruff может исправлять автоматически. Это особенно удобно для импорта, форматирования и простых стилистических проблем. Автоматизация полезна там, где исправление однозначно. Более сложные изменения лучше оставлять разработчику, потому что линтер не знает бизнес-контекста. Перед массовым запуском автофикса на старом проекте стоит сделать отдельную ветку и просмотреть diff, чтобы не смешивать техническую чистку с функциональными изменениями.
Конфигурация должна жить рядом с проектом
Настройки правил, исключений и целевой версии Python лучше хранить в репозитории. Тогда локальный запуск и CI используют одну конфигурацию. Игнорирование правила имеет смысл документировать, особенно если исключение необычное. Персональные настройки разработчиков не должны менять результат обязательной проверки. Чем ближе локальная команда к тому, что запускается на сервере, тем меньше сюрпризов после push.
CI должен падать только по согласованным критериям
Проверка в CI нужна как общий контракт качества. Она должна запускаться быстро и выдавать понятный лог. Если команда постепенно внедряет Ruff в большой кодовой базе, можно сначала проверять новые изменения или зафиксировать существующие нарушения и не увеличивать их число. Такой переход обычно устойчивее требования исправить весь исторический проект за один день.
Попробуйте на практике
Подключить Ruff к небольшому Python-проекту и сделать одинаковую проверку локально и в CI.
- Добавьте конфигурацию с базовым набором правил и целевой версией Python.
- Запустите проверку локально и исправьте однозначные нарушения, часть через безопасный автофикс.
- Добавьте команду проверки в сценарий CI без отличающейся конфигурации.
- Создайте намеренную ошибку, убедитесь, что локальная проверка и CI реагируют одинаково, затем удалите её.
Как проверить результат. Настройка готова, если разработчик получает тот же результат локально, что и в CI, правила понятны команде, а автоматические исправления не меняют поведение программы.
Частые вопросы
Нужно ли включать все правила Ruff?
Нет. Лучше выбрать набор, который соответствует проекту и даёт полезный сигнал без лишнего шума.
Можно ли заменить Ruff все остальные инструменты?
Он закрывает много задач линтинга и форматирования, но тесты, типизацию и специализированные анализаторы может не заменять.
Стоит ли запускать Ruff перед каждым коммитом?
Это удобно, если проверка быстрая. Можно использовать ручную команду, pre-commit или редактор, главное чтобы CI оставался окончательной общей проверкой.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.