Вы когда-нибудь открывали репозиторий на GitHub и видели просто кучу файлов с кодом, но не понимали, что именно делает этот проект или как он развивался? Это частая проблема. Рекрутеры и технические лиды тратят на просмотр резюме и портфолио считанные секунды. Если ваш код выглядит сырым, а истории версий нет, вы теряете доверие еще до того, как кто-то прочитает ваше резюме.
Здесь на сцену выходит changelog. Это не просто технический файл. Это история жизни вашего продукта. Правильно оформленный журнал изменений показывает, что вы умеете не только писать код, но и думать о пользователях, соблюдать процессы и доводить задачи до конца. В этой статье мы разберем, как создать профессиональный changelog по стандартам индустрии и почему это может стать решающим фактором при найме.
Что такое changelog и зачем он нужен?
Changelog (журнал изменений) - это
файл проекта, в котором в хронологическом порядке фиксируются существенные изменения между версиями продукта: добавленные функции, исправленные ошибки, удаленный функционал.
Чаще всего это файл CHANGELOG.md в корне репозитория.
Идея стандартизировать этот файл пришла от разработчика Olivier Lacan примерно в 2014-2015 годах. Он запустил инициативу под названием «Keep a Changelog». Сейчас это де-факто стандарт в мире open source и коммерческой разработки.
Зачем он нужен?
- Для пользователей: они понимают, стоит ли обновлять приложение и что нового им предложено.
- Для разработчиков: это единый источник правды о релизах, независимый от конкретной системы контроля версий (как Git).
- Для портфолио: это демонстрация инженерной зрелости. Вы показываете, что работаете по процессу, а не «набрасываете код» хаотично.
Важно помнить: git log предназначен для машин и разработчиков, а changelog - для людей. Не копируйте сырые сообщения коммитов в журнал. Пишите понятно.
Стандарты: Keep a Changelog и SemVer
Чтобы ваш changelog выглядел профессионально, следуйте двум ключевым спецификациям.
Keep a Changelog
Этот стандарт определяет структуру файла. Основные правила версии 0.3.0 (и более новых):
- Последняя версия сверху. Новые релизы добавляются в начало файла. Это позволяет пользователям сразу видеть актуальную информацию.
- Формат даты. Используйте международный формат
YYYY-MM-DD(например,2026-05-17). Избегайте форматов вроде17.05.2026, которые могут быть неоднозначны. - Разделы изменений. Каждая версия должна содержать разделы с фиксированными названиями:
| Раздел | Описание | Пример |
|---|---|---|
| Added | Новые функции | Добавлена авторизация через Google |
| Changed | Изменения существующей функциональности | Изменен алгоритм сортировки списка |
| Deprecated | Функции, намеченные к удалению | API v1 помечен как устаревший |
| Removed | Удаленный функционал | Удалена поддержка Internet Explorer |
| Fixed | Исправления ошибок | Исправлен краш при открытии файла с UTF-8 именем |
| Security | Обновления безопасности | Обновлены библиотеки для устранения уязвимостей |
Semantic Versioning (SemVer)
Semantic Versioning - это спецификация версионирования, определяющая формат версии как MAJOR.MINOR.PATCH. Автор - Том Престон-Вернер, опубликовано в 2013 году.
Правила просты:
- MAJOR увеличивается при несовместимых изменениях (breaking changes).
- MINOR увеличивается при добавлении обратно совместимых функций.
- PATCH увеличивается при обратно совместимых исправлениях ошибок.
Пример заголовка версии: ## [1.2.0] - 2026-05-17.
Как писать хороший changelog: пошаговая инструкция
Если вы создаете пет-проект для портфолио, вам не обязательно настраивать сложную автоматизацию сразу. Начните с ручного ведения, соблюдая эти шаги.
- Создайте файл
CHANGELOG.md. В начале добавьте ссылку на стандарт Keep a Changelog и укажите, что используете SemVer. - Добавьте раздел
## [Unreleased]. Сюда вы будете вносить изменения, которые еще не выпущены в официальный релиз. Это помогает отслеживать текущую работу. - Первый релиз. Когда проект готов к первому выпуску, переименуйте
[Unreleased]в версию, например[0.1.0], добавьте дату и создайте новый пустой раздел[Unreleased]сверху. - Группируйте изменения. Разделите записи по типам (Added, Fixed и т.д.). Даже если какой-то раздел пуст, многие команды оставляют его заголовок для предсказуемости структуры, но можно и опускать пустые разделы, чтобы не перегружать файл.
- Добавляйте ссылки. Ссылайтесь на номера задач (issues) и pull request'ов. Например:
- Добавлена фильтрация по дате (#123).
Стиль и язык
Следуйте рекомендациям из руководства ALT Linux Wiki и статей на Habr:
- Единая грамматическая форма. Используйте прошедшее время (past simple) или инфинитив. Не смешивайте стили. Пример:
fixed memory leaks, а неfix memory leaks. - Заглавные буквы и точки. Либо все записи начинаются с большой буквы и заканчиваются точкой, либо с маленькой и без точки. Выберите один стиль и придерживайтесь его.
- Конкретика вместо общих фраз. Вместо
fixed bugпишитеfixed crash when opening file with UTF-8 name. Пользователь должен понять, что изменилось с точки зрения его опыта. - Единый язык. Не смешивайте русский и английский в пределах одной записи. Для международного портфолио лучше использовать английский.
Автоматизация: инструменты для генерации changelog
Когда проект растет, вручную поддерживать changelog становится сложно. Здесь помогают инструменты автоматизации.
Ключевой момент: качество автоматически сгенерированного changelog зависит от качества ваших commit-сообщений. Если вы пишете fix или work in progress, то и в журнале будет бессмыслица. Поэтому внедрите стандарт
Conventional Commits - это
формат сообщений коммитов вида feat:, fix:, docs: и т.п..
Популярные инструменты:
- git-cliff: Rust-инструмент, который генерирует changelog на основе шаблонов и Conventional Commits. Поддерживается GitHub Actions.
- standard-version: NPM-пакет, автоматизирующий повышение версии и генерацию журнала.
- semantic-release: Полностью автоматизирует процесс релиза, включая публикацию в npm и генерацию changelog.
- github-changelog-generator: Ruby-инструмент, собирающий журнал из GitHub Issues и PR.
Пример workflow для GitHub Actions с git-cliff:
name: Generate Changelog
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- run: |
curl -sL https://github.com/orhun/git-cliff/releases/download/v2.2.1/git-cliff-2.2.1-x86_64-unknown-linux-gnu.tar.gz | tar -xzf-
mv git-cliff /usr/local/bin/
- run: git-cliff --config cliff.toml --output CHANGELOG.md
- run: |
git config user.name "github-actions"
git config user.email "[email protected]"
git add CHANGELOG.md
git commit -m "Обновление CHANGELOG.md"
git push
Даже если вы не используете CI/CD, наличие такого workflow-файла в репозитории портфолио показывает знание DevOps-практик.
Changelog vs Release Notes: в чем разница?
Многие путают эти понятия. Понимание различий важно для коммуникации.
- Changelog: Технически структурированный журнал. Ориентирован на разработчиков и продвинутых пользователей. Содержит детали изменений, версии, ссылки на задачи.
- Release Notes: Финализированный текст для заказчиков или обычных пользователей. Написан на бизнес-языке, содержит скриншоты, объясняет ценность изменений, а не технические детали.
- Перечень доработок: Краткий список реализованных задач для акта выполненных работ или спринт-ревью.
В портфолио наличие чёткого changelog демонстрирует инженерную дисциплину. А наличие понятных release notes (если есть где их разместить) показывает умение коммуницировать ценность бизнеса.
Почему changelog важен для вашего портфолио?
Рекрутеры и технические лиды часто говорят: «живой» репозиторий с понятными релизами выглядит профессиональнее, чем просто набор исходников. Вот почему:
- Демонстрация жизненного цикла. Вы показываете, что понимаете, как продукт развивается во времени, а не просто написали код один раз.
- Быстрый обзор эволюции. Техлид может быстро оценить, какие крупные фичи добавлялись, как часто выходили релизы, как обрабатывались баги.
- История роста. В джун-портфолио видно, как сначала появляются базовые фичи, затем рефакторинг, добавление тестов, улучшения UX. Это честное отражение вашего пути.
- Вклад в open source. Если вы контрибьютите в другие проекты, ваши изменения в их changelog'е служат видимым маркером вклада. Можно указать в резюме: «Мой PR #123 попал в релиз 2.1.0 проекта X».
Совет: избегайте «мёртвого» changelog. Файл, обновлённый один раз под 1.0.0 и больше не тронутый, создаёт впечатление формальности. Лучше реже выпускать версии, но честно фиксировать изменения.
Практические советы для старта
Как применить всё это прямо сейчас?
- Добавьте
CHANGELOG.mdв каждый публичный проект. Следуйте шаблону Keep a Changelog + SemVer. Минимальный набор:Unreleased, пара последних версий с датами и разделамиAdded/Changed/Fixed. - Упомяните в README. Добавьте ссылку на changelog и пояснение: «История изменений ведётся по стандарту Keep a Changelog и Semantic Versioning».
- Отразите в резюме. Укажите: «Во всех собственных проектах использую SemVer и структурированный changelog». Если настроили автоматизацию через GitHub Actions, упомяните и это.
- Выделите показательные релизы. Для пет-проектов сделайте развёрнутые описания версий
0.1.0,0.5.0,1.0.0с акцентом на пользовательскую ценность.
Нужен ли changelog для маленького пет-проекта?
Да, даже для небольшого проекта. Это показывает вашу инженерную культуру и внимание к деталям. Рекрутеры ценят такие мелочи, так как они отличают профессионала от любителя.
Как часто нужно обновлять changelog?
При каждом значимом изменении или релизе. Не обязательно делать это после каждого коммита, но перед каждым выпуском новой версии файл должен быть актуализирован.
Можно ли использовать русский язык в changelog?
Можно, если ваша целевая аудитория говорит по-русски. Однако для международного портфолио рекомендуется использовать английский, так как это универсальный язык разработки.
Что делать, если я забыл добавить запись в changelog?
Добавьте её в раздел Unreleased перед следующим релизом. Если релиз уже вышел, создайте патч-версию (PATCH) и внесите изменения туда, но лучше стараться избегать таких ситуаций.
Как связать changelog с Git commits?
Используйте ссылки на номера issues и PR в тексте changelog. Также можно настроить автоматическую генерацию через инструменты вроде git-cliff или semantic-release, которые анализируют commit-сообщения.