Иногда важно не только содержание документации, но и процесс ее подготовки. В некоторых проектах с этим процессом связана львиная доля работы, а его нарушения могут приводить к ошибкам, утрате информации и в конечном итоге к временным и финансовым потерям. И даже если обозначенная тема не является вашей основной задачей, правильная организация этого процесса поможет вам улучшить качество документации и сэкономить время.
Метод, описанный ниже, отличается низким порогом вхождения: фактически уже завтра вы сможете начать работать по-новому.
Постановка задачи
Итак, вам нужно создать один или несколько документов. Возможно, это проектная документация, выдержки из сетевых логов или что-то более простое. Допустим, вы хотите описать процессы, происходящие в компании или в вашем отделе. Такие документы обычно содержат текст, рисунки, таблицы и т. д. Усложним задачу, добавив следующие условия:
Работа над документом требует совместных усилий нескольких сотрудников или даже нескольких групп.
В результате должен получиться документ определенного формата, созданный по шаблону и содержащий элементы фирменного стиля. Для большей конкретики возьмем формат MS Word (.docx).
10 лет назад схема работы была довольно однозначной: нужно было создать документ (или документы) MS Word и организовать процесс внесения правок.
Такой подход все еще актуален — даже крупные интеграторы используют его при создании проектной документации. Однако интуитивно понятно, что он не очень удобен, если работа над документом занимает много времени и включает множество правок и обсуждений.
Пример
Я впервые столкнулся с этой проблемой, работая с одним крупным интегратором. Процесс внесения правок в проектную документацию у нас выглядел так:
Инженер загружает последнюю версию документа MS Word (.docx)
Меняет название документа
Вносит правки в режиме отслеживания изменений
Отправляет документ с правками архитектору
Также прикладывает список всех изменений с комментариями
Архитектор анализирует изменения
Если все в порядке, он вносит эти правки в последнюю версию файла, меняет номер версии и загружает документ на общий ресурс
Если же у архитектора появляются замечания, начинается их обсуждение (по электронной почте или на собраниях)
Наконец, все участники процесса приходят к единому мнению
Повторяются шаги с 3-го по 9-й
Эта схема более-менее оправдывала себя, пока работа шла не очень интенсивно, но затем она стала узким местом для целого проекта. Это случилось, когда изменения в документ начали вносить сразу несколько команд — одновременно и с высокой частотой.
Когда мы перешли к предварительному тестированию, начали возникать проблемы. И хотя они были небольшими, нам приходилось постоянно вносить изменения в документацию. Каждый день четыре разные команды практически в одно и то же время занимались внесением правок, сопровождая этот процесс обсуждениями. Все изменения проходили через согласование с единственным инженером — архитектором. Поскольку файл проектного решения был огромным, наш архитектор оказался перегружен механической работой — копированием и правкой. Он делал много ошибок. Нам приходилось все перепроверять и отправлять назад. Рабочий процесс превратился в полный хаос.
Итак, работа с документацией на основе MS Word давалась нам с большим трудом, поэтому такой подход создавал проблемы.
Git и Markdown
Столкнувшись с проблемой, описанной выше, я решил исследовать этот вопрос.
Я заметил, что люди все чаще используют при создании документов язык разметки Markdown в сочетании с системой управления версиями Git.
Вообще Git — это инструмент разработки. Но почему бы не использовать его и для подготовки документации? В этом случае проблема с одновременной работой нескольких пользователей будет решена. Лучше всего преимущества Git раскрываются в работе с документами на основе обычного текста, поэтому вместо MS Word нам придется использовать другой инструмент. Markdown отлично подойдет для этих целей.
Это простой язык разметки, который позволяет создавать эстетично оформленные документы в виде обычных текстовых файлов. При создании документов в формате Markdown будет довольно естественно использовать Git для управления версиями.
И все бы хорошо, если бы не наше второе условие: «в результате должен получиться документ определенного формата, созданный по шаблону и содержащий элементы фирменного стиля» (как мы определились в самом начале, это должен быть документ MS Word). Таким образом, если мы решим использовать Markdown, придется найти способ конвертировать наш файл в требуемый формат — .docx.
Для конвертации документов в разные форматы существуют специальные программы, например Pandoc. С помощью этой программы можно конвертировать файл Markdown в .docx. Однако тут нужно понимать два момента. Первый: не все, что есть в Markdown, можно перенести в MS Word. И второй: MS Word — это целая страна по сравнению с маленьким городком Markdown: в Word есть огромное количество вещей, которых нет в Markdown. Не получится просто указать в командной строке Pandoc какие-то параметры и сразу конвертировать файл Markdown в документ MS Word желаемого вида. Как правило, после конвертации документ .docx приходится дорабатывать вручную, что также отнимает время и может привести к появлению ошибок.
Было бы здорово написать скрипт, который бы автоматически «доделывал» все, с чем не справился Pandoc.
Учитывая принципиальную разницу между MS Word и Markdown, я думаю, что эту проблему невозможно решить в целом. Но возможно ли сделать это в контексте определенных ситуаций и требований? Мой опыт показывает, что возможно, — причем во многих, а то и в большинстве ситуаций.
Решение конкретной проблемы
Итак, в моем случае после конвертации файлов через Pandoc их приходилось дополнительно обрабатывать вручную, а именно:
Добавлять поля Word для автоматической нумерации таблиц и рисунков;
Менять стили таблиц.
Я не нашел способа это сделать с помощью стандартных инструментов (включая Pandoc) или каких-либо других известных средств. Поэтому я применил скрипт на Python, в котором используется пакет pywin32, и в результате добился полной автоматизации. У меня получилось наладить конвертацию файлов Markdown в документы MS Word желаемого вида с помощью всего одной команды.
За счет pywin32 можно получить практически полный контроль над документом MS Word, что позволяет привести его к тому виду, которого требует корпоративный стандарт. Конечно, этого результата можно добиться и с помощью других инструментов — например, макросов на VBA, — но мне было удобнее использовать Python.
Вот короткая формула этого подхода:
Markdown + Git − (нечто) → MS Word
На месте этого «нечто» может быть что угодно. В моем случае это были Pandoc и скрипт на Python, работающий с пакетом pywin32. У вас могут быть другие предпочтения. Важно одно — формула работает. Это основная мысль всей статьи.
Если коротко, идея такого подхода заключается в том, чтобы работать только с файлами Markdown, используя Git для взаимодействия с другими участниками проекта и управления версиями. При необходимости (например, если нужно предоставить документацию клиенту) можно автоматически создать файл желаемого формата (скажем, MS Word).
Процесс
Думаю, многим читателям будет достаточно приведенной выше формулы, чтобы понять, как можно организовать работу с документацией. Но я все же обычно ориентируюсь на сетевых инженеров, поэтому в общих чертах расскажу, как может выглядеть рабочий процесс и чем он отличается от внесения правок в файлы MS Word.
Возьмем GitHub в качестве рабочей платформы для Git. Необходимо создать репозиторий и добавить в главную ветку файл или файлы Markdown, с которыми вы собираетесь работать.
Допустим, подготовкой документации занимаются четыре человека, и вы один из них. Тогда нужно создать четыре дополнительные ветки — например, с именами участников. Каждый из них будет работать локально, в собственной ветке, используя все необходимые команды Git.
Завершив какую-то часть работы, вы создадите pull-запрос, чтобы начать обсуждение предлагаемых изменений с другими участниками. Возможно, в процессе выяснится, что вам нужно добавить или поменять что-то еще. В таком случае вы внесете необходимые правки и создадите еще один pull-запрос. В конечном итоге ваши изменения будут объединены с главной веткой (или отвергнуты).
Конечно, это довольно общее описание. Для создания детально проработанного процесса рекомендую подключить к делу разработчиков или найти специалистов с опытом в этой области. Но я хотел бы заметить, что у системы Git довольно низкий порог вхождения. Хотя принцип функционирования системы не так прост, с ней легко начать работать. Я думаю, что, даже если вы столкнетесь с ней впервые, вы сможете начать ее использовать, потратив несколько часов или дней на изучение и установку.
В чем преимущество этого подхода перед процессом из примера выше?
На самом деле, они довольно схожи, просто одни понятия заменяются другими:
Копировать файл → создать ветку (branch)
Копировать текст в целевой файл → выполнить слияние (merge)
Копировать последние изменения к себе → git pull/fetch
Обсуждение в чате → pull-запросы
Режим отслеживания изменений → git diff
Последняя утвержденная версия → главная ветка (master)
Резервное копирование (создание копии на удаленном сервере) → git push
Таким образом, вы автоматизируете операции, которые до этого приходилось выполнять вручную.
На более высоком уровне это позволит:
Создать четкий, простой и управляемый процесс внесения правок в документы
Снизить риск возникновения ошибок, связанных с форматированием, поскольку итоговый документ (в нашем случае документ MS Word) создается автоматически
С учетом вышесказанного становится очевидно: даже если вы единственный человек, которому приходится заниматься документацией, использование Git может значительно облегчить вашу работу.
Как запустить новый процесс?
В начале статьи я упомянул, что начать работать по-новому вы сможете уже завтра. Как это сделать?
Вот наиболее вероятная последовательность шагов:
Если документ слишком большой, разделите его на части
Конвертируйте каждую из них в формат Markdown (например, с помощью Pandoc)
Установите редактор Markdown (я использую Typora)
Скорее всего, вам придется поправить полученные документы Markdown
Следуйте инструкциям, описанным в предыдущей части
Начните изменять скрипт конвертации для вашей задачи (или создайте свой собственный)
Необязательно ждать момента, когда механизм конвертации Markdown в документы нужного вида будет досконально отлажен. Даже если у вас не получится быстро автоматизировать процесс конвертации файлов Markdown, всегда можно преобразовать их хотя бы в какой-то вид с помощью Pandoc, а затем вручную привести к нужной форме. Как правило, это не приходится делать слишком часто — только по завершении определенных этапов. Работать вручную не так удобно, но я считаю, что на этапе отладки это вполне допустимо и не слишком сказывается на скорости процесса.
Остальные инструменты (Markdown, Git, Pandoc, Typora) уже готовы к использованию и не требуют много сил или времени на освоение.
Перевод статьи подготовлен в преддверии старта курса PHP Developer. Basic.
Комментарии (12)
Zdomb
20.07.2021 18:40+3А зачем нужен docx, если правки вносить "ручками" в итоговый файл не планируется?
Чем не подходит pdf как финальный формат?И, если не секрет, что из MarkDown нельзя перенести в docx?..
aamonster
20.07.2021 22:04+2Вот кстати да, хочется сразу заткнуть возможность править итоговый docx-файл (ведь потом придётся, рыдая и матерясь, переносить эти правки в markdown), pdf практически убивает такой соблазн.
Akon32
21.07.2021 09:20А почему git, а не, например, fossil? Конечно, git почти все знают (почти все разработчики), но есть интересные альтернативы.
HenryPootle
21.07.2021 14:32+2Зачем все эти пляски с бубном, если MS Word уже содержит все нужные инструменты? Я лично вижу, что был плохо спроектированный процесс, который перепроектировали и, зачем-то, переложили на другой софт.
rudinandrey
21.07.2021 20:33самое интересное, я попробовал создать файл в Word'е, а как Git на него реагирует?
Он вполне себе читает Word'овские файлы. Вот например создал файл с Hello world
закоммитил, потом добавил вторую строку, и вот что показывает git diff
git diff diff --git a/text.docx b/text.docx index ab96dc3..7d0349a 100644 --- a/text.docx +++ b/text.docx @@ -1 +1,2 @@ Hello world +Second line
так что вполне себе Git можно использовать и с Word документами.
inkelyad
21.07.2021 21:46А теперь нужно сделать две ветки и попробовать смержить. Просто diff - это сам ворд худо-бедно умеет.
И да, изменить бы неплохо не просто строки добавить, но и форматирование какое-нибудь поправить.
aamonster
22.07.2021 00:42Емнип ещё лет 15 назад в TortoiseSvn был мёрж вордовских файлов средствами самого ворда (там какой-то не очень сложный макрос для 3-way diff был). Наверняка и для git это есть, но это от беды, так-то с markdown куда проще иметь дело.
nerudo
Все началось рассказом про git, а по факту выливается в проблемы выбора базового средства описания и создания развесистых скриптов пост-обработки. Судя по нетребовательности автора (у которого всех проблем — нумерация страниц, да объектов), все то же самое можно сделать как
1) создайте шаблон TeX для вашего случая
2) пишите документ и храните его в git.