Conventional Commits и commitlint: новый стандарт для написания сообщений о коммитах

пятница, 10 января 2025 г.

Важность сообщений о коммитах

Когда вы занимаетесь разработкой, вам приходится по нескольку раз в день писать сообщения о коммитах. Каждый раз, как вы это делаете, возникает мысль о необходимости тщательно резюмировать изменения кода. Но, как правило, сделать это хорошо бывает непросто, и часто мы пишем расплывчатые сообщения.

На самом деле, сообщения о коммитах важны в перспективе: их основная роль раскрывается, когда нужно вернуться к коду спустя время. Когда вы перерабатываете старый код или проверяете работу коллеги, сообщение о коммите становится незаменимой подсказкой.

В конечном итоге, качественные сообщения о коммитах — это долгосрочная инвестиция в продуктивность команды и помощь в отладке. Однако без определённых ограничений тяжело писать ясные и согласованные сообщения, как будто вы пытаетесь назвать переменную без конвенции.

Conventional Commits

И вот я наткнулся на Conventional Commits. Изучив правила, я заметил, что они предполагают выбор нескольких предопределенных типов изменений, а также указание области и темы изменений.

Хотя правила довольно просты, они позволяют писать более согласованные и стандартные сообщения о коммитах. Тем более, это связано с Semantic Versioning, что делает их использование крайне полезным с точки зрения производительности.

Основные правила

  1. Формат: Следуйте формату type(scope): subject.

    • type: Тип изменения (например, feat, fix, docs, style, refactor, test и т.д.).
    • scope (опционально): Область или модуль, к которому применяются изменения.
    • subject: Краткое описание изменений.
  2. Основная часть: При необходимости добавьте дополнительное описание изменений.

  3. Примеры:

feat(auth): добавлена функция входа пользователя
fix(api): Исправлена ошибка нулевого указателя в методе fetch
docs: Обновлено руководство по установке

Эти правила связаны с Semantic Versioning следующим образом:

Если проект использует Semantic Versioning, то управление версиями может быть автоматизировано с помощью одних лишь сообщений о коммитах. Например:

  • feat(auth): добавлена функция входа пользователя → новая функция 👉 v1.1.0
  • fix(api): Исправлена ошибка нулевого указателя → багфикс 👉 v1.1.1
  • feat(payment): поддержка кредитных карт → добавлена ещё одна функция 👉 v1.2.0

Подытоживая, преимущества Conventional Commits таковы:

  • Сохранение согласованности: Согласованные сообщения облегчают понимание истории коммитов.
  • Интеграция с инструментами автоматизации: Автоматизация создания отчётов, интеграция с CI/CD и другими подобными инструментами облегчается.
  • Эффективный код-ревью: Процедура ревью проходит быстрее благодаря ясному пониманию изменений.
  • Повышение масштабируемости: Даже при увеличении проекта согласованные коммиты облегчают сопровождение.

Есть даже линтер commitlint

Основные функции commitlint:

  1. Проверка Conventional Commits: Проверка на соответствие формату type(scope): subject.
  2. Настройка: Возможность добавления и изменения правил в зависимости от нужд команды.
  3. Интеграция с CI/CD: Возможность использования commitlint для проверки коммитов в CI/CD пайплайне.
  4. Интеграция с Husky: Использование Git hook для автоматической проверки сообщений коммита.

Особых усилий для внедрения commitlint в проект не требуется, и это имеет множество плюсов. Если команда подходит к Conventional Commits с пониманием, настоятельно рекомендуется внедрение commitlint. Подробности использования можно найти на официальной странице commitlint.

Без линтера человек может и сам писать качественные сообщения о коммитах, но человеческий фактор оставляет место для ошибок. Ошибки накапливаются и превращаются в "что-то непонятное". Проще ругать компьютер за неправильный коммит, чем отправлять замечания коллегам.

Согласованные сообщения о коммитах — первый шаг к повышению производительности команды

Сообщения о коммитах — это не просто запись изменений. Они служат системой организации истории проекта и помогают обеспечить слаженное взаимодействие между членами команды. Особенно, когда над проектом работают несколько разработчиков, согласованные сообщения облегчают код-ревью и понимание изменений.

Даже на личном уровне, применение определенных правил снижает количество ненужных размышлений и помогает создавать ясные сообщения. Использование таких инструментов, как commitlint, позволяет автоматически проверять сообщения, избегая ошибок и обеспечивая беспроблемную интеграцию с CI/CD.

Почему бы не завести привычку создания согласованных сообщений? Пусть вначале это и покажется неудобным, но в результате ваш труд окупится увеличением производительности команды.