Docs as Code: главное
Что это такое
Docs as Code – это подход к созданию и сопровождению документации, при котором для работы с документами используются те же инструменты и процессы, что и для программного кода. Текст пишут на языке разметки (Markdown, AsciiDoc), хранят в Git-репозитории и собирают с помощью генераторов сайтов (например, GitLab Pages, Docusaurus, Antora). Публикуемая версия всегда синхронизирована с кодом и доступна потребителям.
Идея в том, чтобы обращаться с текстом документации так же, как с исходным кодом приложения: хранить его в системе контроля версий, проверять изменения через pull request’ы, автоматизированно собирать и публиковать и т.д. Другими словами, документация разрабатывается как код.
Документация может храниться как в одном репозитории с кодом, так и в отдельном - но всегда должна быть актуальной и согласованной с кодом (как и наоборот).
Суть подхода Docs as Code
- документация хранится в репозитории Git (см. где хранить)
- документация пишется в IDE (VS Code или IDEA) с настроенными плагинами
- документация пишется на выбранном языке разметки, диаграммы описываются в формате кода (plantUML, mermaid и др.)
- документация собирается при помощи генератора сайтов (например Docusaurus)
Принципы написания документации в Docs as Code
Написание спецификаций следует принципам написания кода, но имеет свои специфичные принципы.
Принципы, унаследованные из разработки
| Принцип | Суть | Как выглядит на практике |
|---|---|---|
| DRY (Don’t Repeat Yourself) | Не дублируем информацию: один факт — один источник, остальные ссылаются. | Фрагменты вынесены в инклюды; диаграммы собираются из общих блоков. |
| KISS (Keep It Simple, Stupid) | Держим форму и язык просты ми, без лишних деталей. | Один файл отвечает за одну идею. Никаких лишних уровней вложенности. |
| YAGNI (You Aren’t Gonna Need It) | Пишем только то, что нужно прямо сейчас; гипотезы и «на будущее» убираем. | Пишем только то, что реально требуется пользователям или команде. |
| SRP (Single Responsibility Principle) | Один раздел — одна тема или функция. | У каждого раздела одна ответственность: API, бизнес-процесс, архитектура. |
| SLAP (Single Level of Abstraction Principle) | Уровни абстракции не смешиваем: обзор и детали храним раздельно. | Разные уровни абстракции — разные документы: C4 > компоненты > классы. |
| LoD (Law of Demeter) | Ссылаемся только на ближайший нужный контекст, избегаем дальних зависимостей. | Ссылки ведут только на ближайший нужный контекст. |
Принципы, специфичные для написания спецификаций
- Общие правила читабельности — короткие абзацы, активные глаголы, минимум терминов
- Документация предполагает единый стиль кодирования, включая структуру текста, отступы, пробелы и т.д. для облегчения понимания. Для этого разрабатываются единые шаблоны документации и готовые переиспользуемые блоки кода.
- Диаграммы как код — PlantUML, Mermaid, LikeC4: диаграммы генерируются из текста
- Автоматизация пайплайна — CI проверяет орфографию, битые ссылки, формат
- Отслеживание изменений, обновлений и исправлений в документах при помощи Changelog для понимания эволюции проекта
- Актуальность — опубликованная версия документации является актуальной (соответствует тому, что доступно потребителям на проде)
- Merge Request, вливаемые в master, проходят ревью - без получения аппрува сделать mr нельзя (если задача требует specification review, оно должно быть пройдено на соответствующем этапе разработки)
- Merge Request с изменениями в документации привязываются к задачам в Jira
Где хранить: отдельный репо или рядом с кодом
1. Рядом с кодом
Документация лежит в том же репозитории, что и сервис, обычно в каталоге /docs.
-
Версионирование: каждая ветка и тег кода несут свою версию текстов.
-
Плюсы:
- Единый MR: в одном Pull Request можно сразу поправить код и ТЗ.
- Авто-freeze: при выпуске продукта документ “замораживается” вместе со сборкой.
- Пример: GitLab хранит руководство пользователя в том же репозитории, чтобы изменения в продукте и тексте шли синхронно.
-
Минусы:
- Репозиторий растёт быстрее, а CI-сборки — дольше.
- Доступ к документации требует доступа к коду, что не всегда удобно для бизнес-пользователей.