Быстрый старт и шпаргалка по диаграммам Mermaid для разработчиков

Диаграммы как код, без лишних сложностей.

Содержимое страницы

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

Для технического блога Mermaid является очень хорошим вариантом по умолчанию. Диаграммы находятся рядом со статьей, их можно просматривать в Git, и их легко обновлять при изменении системы. Статические изображения диаграмм выглядят красиво, пока не произойдет первое изменение архитектуры. Диаграммы Mermaid не идеальны, но они стареют гораздо лучше.

Синтаксис блок-схемы Mermaid слева, отрендеренная диаграмма справа

Это руководство представляет собой практическое введение и шпаргалку по Mermaid для разработчиков, технических писателей и владельцев сайтов на Hugo. Оно является частью хабa Инструменты для документации в 2026 году: Markdown, LaTeX, PDF и рабочие процессы печати.

Что такое Mermaid?

Mermaid — это синтаксис диаграмм как кода. Вы пишете небольшой текстовый блок, и Mermaid рендерит его как диаграмму.

Базовая диаграмма Mermaid выглядит так:

этот код:

```mermaid
flowchart TD
    A[Write Markdown] --> B[Add Mermaid block]
    B --> C[Render page]
    C --> D[Publish diagram]
```

Производит диаграмму:

flowchart TD A[Write Markdown] --> B[Add Mermaid block] B --> C[Render page] C --> D[Publish diagram]

Основная идея проста: исходным материалом диаграммы является обычный текст. Это делает его удобным для поиска, проверки, переносимым и легким для хранения вместе с документацией, которую он объясняет.

Почему стоит использовать Mermaid в техническом блоге?

Mermaid полезен, когда вашей статье нужно больше, чем просто текст, но меньше, чем полноценный инструмент проектирования.

Используйте Mermaid, когда вы хотите объяснить:

  • Поток запросов и ответов
  • Конвейеры развертывания
  • Зависимости сервисов
  • Переходы состояний
  • Отношения в базе данных
  • Путь пользователя
  • Шаги сборки
  • Логика принятия решений
  • Временные рамки проектов

Я бы не использовал Mermaid для каждой визуализации. Скриншоты, наброски архитектуры от руки и отполированные маркетинговые диаграммы по-прежнему находят свое применение. Но для инженерной документации Mermaid часто является наиболее поддерживаемым вариантом.

Быстрый старт Mermaid

Базовое использование в Markdown

В Markdown используйте ограниченный блок кода с mermaid в качестве языка:

```mermaid
flowchart LR
    A[Start] --> B[Process]
    B --> C[Done]
```

Многие платформы понимают этот формат напрямую. mermaid — это один из специальных идентификаторов языка — наряду с diff, geojson и другими — который определенные рендереры воспринимают как блок первого класса, а не просто как подсветку синтаксиса. Для полного разбора синтаксиса ограниченных блоков и поддерживаемых идентификаторов языка см. Руководство по блокам кода Markdown. Для Hugo рендеринг зависит от вашей темы или конфигурации сайта. Подробнее об этом позже.

Тестируйте диаграммы перед публикацией

Самый простой рабочий процесс:

  1. Напишите диаграмму в файле Markdown.
  2. Вставьте ее в живой редактор Mermaid или локальный предварительный просмотр.
  3. Исправьте ошибки синтаксиса.
  4. Закоммитьте исходный код Markdown.
  5. Проверьте финальную отрендеренную страницу.

Это избегает классической проблемы, когда диаграмма работает в одном рендерере, но ломается в другом из-за небольшой детали синтаксиса.

Синтаксис блок-схем

Блок-схемы — самый распространенный тип диаграмм Mermaid. Используйте их для рабочих процессов, алгоритмов, деревьев решений и шагов системы.

Базовая блок-схема

этот код:

```mermaid
flowchart TD
    A[User opens website] --> B{Is user logged in?}
    B -->|Yes| C[Show dashboard]
    B -->|No| D[Show login page]
```

Производит диаграмму:

flowchart TD A[User opens website] --> B{Is user logged in?} B -->|Yes| C[Show dashboard] B -->|No| D[Show login page]

Направления блок-схем

Блок-схемы Mermaid поддерживают несколько направлений:

TD - сверху вниз
TB - сверху вниз
BT - снизу вверх
LR - слева направо
RL - справа налево

Пример:

этот код:

```mermaid
flowchart LR
    Browser --> CDN
    CDN --> WebServer
    WebServer --> Database
```

Производит диаграмму:

flowchart LR Browser --> CDN CDN --> WebServer WebServer --> Database

Для статей в блоге LR часто удобнее читать для диаграмм архитектуры. Для пошаговых процессов TD обычно лучше.

Общие формы узлов

этот код:

```mermaid
flowchart TD
    A[Rectangle]
    B(Rounded rectangle)
    C{Decision}
    D((Circle))
    E[(Database)]
    F[[Subroutine]]
```

Производит диаграмму:

flowchart TD A[Rectangle] B(Rounded rectangle) C{Decision} D((Circle)) E[(Database)] F[[Subroutine]]

Стрелки блок-схем

этот код:

```mermaid
flowchart LR
    A --> B
    B --- C
    C -.-> D
    D ==> E
    E -- Label --> F
```

Производит диаграмму:

flowchart LR A --> B B --- C C -.-> D D ==> E E -- Label --> F

Подграфы

Используйте подграфы для группировки связанных частей системы.

этот код:

```mermaid
flowchart LR
    subgraph Client
        Browser
    end

    subgraph Backend
        API
        Worker
    end

    subgraph Storage
        DB[(PostgreSQL)]
        Cache[(Redis)]
    end

    Browser --> API
    API --> DB
    API --> Cache
    API --> Worker
```

Производит диаграмму:

flowchart LR subgraph Client Browser end subgraph Backend API Worker end subgraph Storage DB[(PostgreSQL)] Cache[(Redis)] end Browser --> API API --> DB API --> Cache API --> Worker

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

Синтаксис диаграмм последовательностей

Диаграммы последовательностей показывают взаимодействие между участниками или сервисами с течением времени.

этот код:

```mermaid
sequenceDiagram
    participant User
    participant App
    participant API
    participant DB

    User->>App: Click login
    App->>API: POST /login
    API->>DB: Validate credentials
    DB-->>API: User record
    API-->>App: Access token
    App-->>User: Show dashboard
```

Производит диаграмму:

sequenceDiagram participant User participant App participant API participant DB User->>App: Click login App->>API: POST /login API->>DB: Validate credentials DB-->>API: User record API-->>App: Access token App-->>User: Show dashboard

Общие стрелки последовательностей

->      сплошная линия без стрелки
-->     пунктирная линия без стрелки
->>     сплошная линия со стрелкой
-->>    пунктирная линия со стрелкой
-x      сплошная линия с крестом
--x     пунктирная линия с крестом

Бары активации

Бары активации делают понятнее, когда участник выполняет работу.

этот код:

```mermaid
sequenceDiagram
    participant Client
    participant Server

    Client->>Server: Request data
    activate Server
    Server-->>Client: Response
    deactivate Server
```

Производит диаграмму:

sequenceDiagram participant Client participant Server Client->>Server: Request data activate Server Server-->>Client: Response deactivate Server

Альтернативы и условия

этот код:

```mermaid
sequenceDiagram
    participant User
    participant API
    participant Payment

    User->>API: Submit order

    alt Payment succeeds
        API->>Payment: Charge card
        Payment-->>API: Approved
        API-->>User: Order confirmed
    else Payment fails
        Payment-->>API: Declined
        API-->>User: Show error
    end
```

Производит диаграмму:

sequenceDiagram participant User participant API participant Payment User->>API: Submit order alt Payment succeeds API->>Payment: Charge card Payment-->>API: Approved API-->>User: Order confirmed else Payment fails Payment-->>API: Declined API-->>User: Show error end

Диаграммы последовательностей отлично подходят для статей об API. Они показывают не только какие компоненты существуют, но и как они общаются друг с другом.

Синтаксис диаграмм классов

Диаграммы классов полезны для моделей предметной области и отношений объектов.

этот код:

```mermaid
classDiagram
    class User {
        +string id
        +string email
        +login()
        +logout()
    }

    class Order {
        +string id
        +float total
        +submit()
    }

    User "1" --> "*" Order
```

Производит диаграмму:

classDiagram class User { +string id +string email +login() +logout() } class Order { +string id +float total +submit() } User "1" --> "*" Order

Отношения классов

<|-- наследование
*-- композиция
o-- агрегация
--> ассоциация
-- ссылка
..> зависимость
..|> реализация

Пример:

этот код:

```mermaid
classDiagram
    Animal <|-- Dog
    Animal <|-- Cat
    User "1" --> "*" Order
    Order *-- OrderItem
```

Производит диаграмму:

classDiagram Animal <|-- Dog Animal <|-- Cat User "1" --> "*" Order Order *-- OrderItem

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

Синтаксис диаграмм состояний

Диаграммы состояний объясняют, как что-то изменяется с течением времени.

этот код:

```mermaid
stateDiagram-v2
    [*] --> Draft
    Draft --> Review: submit
    Review --> Published: approve
    Review --> Draft: request changes
    Published --> Archived: archive
    Archived --> [*]
```

Производит диаграмму:

stateDiagram-v2 [*] --> Draft Draft --> Review: submit Review --> Published: approve Review --> Draft: request changes Published --> Archived: archive Archived --> [*]

Используйте диаграммы состояний для:

  • Циклов жизни заказов
  • Состояний развертывания
  • Потоков аутентификации
  • Статуса фоновых задач
  • Рабочих процессов публикации контента

Диаграммы состояний недооценены. Они часто объясняют бизнес-логику лучше, чем длинный абзац.

Синтаксис диаграмм сущностей и связей (ER)

Диаграммы сущностей и связей полезны для моделей баз данных.

этот код:

```mermaid
erDiagram
    USER ||--o{ ORDER : places
    ORDER ||--|{ ORDER_ITEM : contains
    PRODUCT ||--o{ ORDER_ITEM : appears_in

    USER {
        string id
        string email
    }

    ORDER {
        string id
        datetime created_at
    }

    PRODUCT {
        string id
        string name
    }
```

Производит диаграмму:

erDiagram USER ||--o{ ORDER : places ORDER ||--|{ ORDER_ITEM : contains PRODUCT ||--o{ ORDER_ITEM : appears_in USER { string id string email } ORDER { string id datetime created_at } PRODUCT { string id string name }

Маркеры отношений ER

||  ровно один
o|  ноль или один
}|  один или более
}o  ноль или более

ER-диаграммы лучше всего подходят, когда они объясняют отношения, а не каждый столбец. Храните детали реализации в миграциях или документации схемы.

Синтаксис диаграмм Ганта

Диаграммы Ганта полезны для временных рамок проектов.

этот код:

```mermaid
gantt
    title Documentation Migration Plan
    dateFormat  YYYY-MM-DD

    section Planning
    Audit current docs      :a1, 2026-06-01, 5d
    Define structure        :a2, after a1, 3d

    section Writing
    Rewrite guides          :b1, after a2, 10d
    Review and publish      :b2, after b1, 4d
```

Производит диаграмму:

gantt title Documentation Migration Plan dateFormat YYYY-MM-DD section Planning Audit current docs :a1, 2026-06-01, 5d Define structure :a2, after a1, 3d section Writing Rewrite guides :b1, after a2, 10d Review and publish :b2, after b1, 4d

Диаграммы Ганта полезны в постах о внутреннем планировании, но они могут быстро устаревать. Используйте их, когда сама временная шкала является сутью.

Синтаксис временной шкалы (Timeline)

Временные шкалы хороши для истории релизов, отчетов об инцидентах и сводок проектов.

этот код:

```mermaid
timeline
    title API Evolution
    2024 : REST API launched
    2025 : Webhooks added
    2026 : Event streaming introduced
```

Производит диаграмму:

timeline title API Evolution 2024 : REST API launched 2025 : Webhooks added 2026 : Event streaming introduced

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

Синтаксис круговых диаграмм

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

этот код:

```mermaid
pie title Build Time by Step
    "Install dependencies" : 35
    "Run tests" : 45
    "Build assets" : 20
```

Производит диаграмму:

pie title Build Time by Step "Install dependencies" : 35 "Run tests" : 45 "Build assets" : 20

Субъективный совет: если значения близки или категорий больше пяти, используйте таблицу. Хорошо отформатированная таблица сообщает точные числа более честно, чем круговая диаграмма, где секторы выглядят почти идентично.

Синтаксис графов Git

Графы Git могут объяснять стратегии ветвления и потоки релизов.

этот код:

```mermaid
gitGraph
    commit
    branch feature
    checkout feature
    commit
    commit
    checkout main
    merge feature
    commit
```

Производит диаграмму:

gitGraph commit branch feature checkout feature commit commit checkout main merge feature commit

Это полезно для статей о рабочих процессах Git, разработке на основе trunk, ветках релизов и хотфиксах. Если вам нужна быстрая справка по базовым командам ветвления, Шпаргалка GIT охватывает самые распространенные из них наряду с рабочими процессами слияния и перебазирования.

Шпаргалка Mermaid

Типы диаграмм

flowchart TD
sequenceDiagram
classDiagram
stateDiagram-v2
erDiagram
gantt
timeline
pie
gitGraph
mindmap
journey

Основы блок-схем

flowchart TD
A[Text] --> B[Text]
A -->|Label| B
A -.-> B
A ==> B
A --- B

Формы блок-схем

A[Rectangle]
A(Rounded)
A{Decision}
A((Circle))
A[(Database)]
A[[Subroutine]]
A>Flag]

Основы диаграмм последовательностей

sequenceDiagram
participant A
participant B
A->>B: Message
B-->>A: Reply
activate B
deactivate B

Блоки последовательностей

alt condition
else other condition
end

opt optional step
end

loop each item
end

par parallel task
and another task
end

Основы диаграмм классов

classDiagram
class User
class Order
User --> Order
User "1" --> "*" Order

Основы диаграмм состояний

stateDiagram-v2
[*] --> Idle
Idle --> Running
Running --> Done
Done --> [*]

Основы ER-диаграмм

erDiagram
USER ||--o{ ORDER : places
ORDER ||--|{ ORDER_ITEM : contains

Комментарии

Mermaid поддерживает комментарии с помощью %%.

этот код:

```mermaid
flowchart TD
    %% This is a comment
    A --> B
```

Производит диаграмму:

flowchart TD %% This is a comment A --> B

Использование Mermaid в Hugo

Контент Hugo обычно пишется на Markdown, поэтому Mermaid естественно вписывается в технический блог на базе Hugo. Точная настройка зависит от вашей темы и конфигурации рендеринга Markdown.

Общий шаблон создания контента остается прежним:

```mermaid
flowchart LR
    Markdown --> Hugo
    Hugo --> HTML
    HTML --> Browser
```

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

Практичная настройка Hugo должна стремиться к следующим правилам:

  • Храните исходный код Mermaid внутри обычных статей Markdown.
  • Загружайте Mermaid только на страницах, где он нужен.
  • Избегайте глобального JavaScript, если большинство страниц не используют диаграммы.
  • Тестируйте диаграммы во время локального предварительного просмотра.
  • Храните исходный код диаграмм в читаемом виде в Git.

Для технического блога ограниченные блоки кода обычно лучше, чем пользовательские шорткоды, потому что они более портативны. Если вы позже перенесете контент на GitHub, другой генератор статических сайтов или платформу документации, стандартные ограниченные блоки Mermaid легче переиспользовать.

Лучшие практики Mermaid

Держите диаграммы маленькими

Диаграмма должна прояснять статью, а не заменять ее. Если читателям нужно увеличивать масштаб, диаграмма, вероятно, слишком велика.

Хорошие диаграммы обычно имеют:

  • Одну идею
  • Четкое направление
  • Короткие метки
  • Мало пересекающихся линий
  • Последовательное именование

Предпочитайте несколько маленьких диаграмм

Вместо одной огромной диаграммы системы используйте несколько сфокусированных диаграмм:

  • Поток запросов
  • Топология развертывания
  • Модель данных
  • Цикл жизни состояний
  • Путь сбоев

Это лучше для читателей и лучше для мобильных экранов.

Используйте стабильные имена

Используйте имена, которые соответствуют вашему коду, API или документации. Не называйте одну и ту же вещь API, Backend и Server в разных диаграммах, если это действительно не разные концепции.

Подписывайте важные стрелки

Неподписанные стрелки подходят для простых блок-схем. В системных диаграммах метки часто имеют значение.

этот код:

```mermaid
flowchart LR
    Web -->|HTTPS request| API
    API -->|SQL query| DB
    API -->|publish event| Queue
```

Производит диаграмму:

flowchart LR Web -->|HTTPS request| API API -->|SQL query| DB API -->|publish event| Queue

Избегайте хитрого синтаксиса

Mermaid может делать много вещей. Это не значит, что каждой статье нужны все они. Отдавайте предпочтение синтаксису, который будущий сопровождающий сможет быстро понять.

Кавчите метки при необходимости

Если метка содержит символы, которые сбивают Mermaid с толку, оберните ее в кавычки.

этот код:

```mermaid
flowchart TD
    A["User clicks /checkout"] --> B["POST /api/orders"]
```

Производит диаграмму:

flowchart TD A["User clicks /checkout"] --> B["POST /api/orders"]

Это маленькая привычка, которая предотвращает раздражающие сбои рендеринга.

Думайте о темном режиме

Многие сайты на Hugo поддерживают темный режим. Убедитесь, что ваша тема Mermaid или CSS сайта сохраняет диаграммы читаемыми как в светлом, так и в темном оформлении.

Распространенные ошибки Mermaid

Ошибка 1: Слишком много деталей

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

Ошибка 2: Длинные метки

Длинные метки создают широкие блоки и некрасивую компоновку.

Вместо этого кода:

```mermaid
flowchart TD
    A[The user submits the registration form with their email address and password]
```

Производит диаграмму:

flowchart TD A[The user submits the registration form with their email address and password]

Предпочитайте этот код:

```mermaid
flowchart TD
    A[Submit registration form]
```

Производит диаграмму:

flowchart TD A[Submit registration form]

Объясняйте детали в абзаце под диаграммой.

Ошибка 3: Неясное направление

Выберите направление и придерживайтесь его. Большинство диаграмм процессов должны использовать TD. Большинство диаграмм архитектуры легче читать с LR.

Ошибка 4: Восприятие Mermaid как инструмента дизайна

Mermaid — это не Figma. Он не предназначен для диаграмм с точностью до пикселя, и попытка заставить его выполнять эту роль приведет только к разочарованию. Его сила — в поддерживаемости, а не в визуальном совершенстве, и этот компромисс намеренный.

Советы по SEO для Mermaid в технических блогах

Диаграммы Mermaid могут сделать технические статьи более полезными, но поисковым системам по-прежнему нужен текст. Не полагайтесь только на диаграммы.

Для SEO-дружественных статей с Mermaid:

  • Используйте описательные заголовки H2 и H3.
  • Объясняйте каждую диаграмму в邻近ном тексте.
  • Включайте важные ключевые слова в обычный текст.
  • Делайте примеры кода копируемыми.
  • Добавляйте объяснение в стиле alt под сложными диаграммами.
  • Используйте лаконичные заголовок и описание в front matter.
  • Избегайте скрытия всего смысла внутри отрендеренного SVG.

Диаграмма Mermaid должна поддерживать статью. Она не должна быть единственным местом, где существует важная информация.

Примеры Mermaid для копирования

Поток запросов API

этот код:

```mermaid
sequenceDiagram
    participant Client
    participant API
    participant Auth
    participant DB

    Client->>API: GET /account
    API->>Auth: Validate token
    Auth-->>API: Token valid
    API->>DB: Load account
    DB-->>API: Account data
    API-->>Client: 200 OK
```

Производит диаграмму:

sequenceDiagram participant Client participant API participant Auth participant DB Client->>API: GET /account API->>Auth: Validate token Auth-->>API: Token valid API->>DB: Load account DB-->>API: Account data API-->>Client: 200 OK

Конвейер CI

этот код:

```mermaid
flowchart TD
    A[Push commit] --> B[Install dependencies]
    B --> C[Run lint]
    C --> D[Run tests]
    D --> E[Build site]
    E --> F[Deploy]
```

Производит диаграмму:

flowchart TD A[Push commit] --> B[Install dependencies] B --> C[Run lint] C --> D[Run tests] D --> E[Build site] E --> F[Deploy]

Этот паттерн естественно отображается на реальную конфигурацию CI. Для пошагового синтаксиса рабочих процессов GitHub Actions Шпаргалка GitHub Actions является удобным дополнением, когда вы хотите превратить диаграмму выше в работающий конвейер.

Рабочий процесс публикации

этот код:

```mermaid
stateDiagram-v2
    [*] --> Draft
    Draft --> Editing
    Editing --> Review
    Review --> Published
    Review --> Editing
    Published --> [*]
```

Производит диаграмму:

stateDiagram-v2 [*] --> Draft Draft --> Editing Editing --> Review Review --> Published Review --> Editing Published --> [*]

Простая модель данных

этот код:

```mermaid
erDiagram
    AUTHOR ||--o{ POST : writes
    POST ||--o{ COMMENT : receives

    AUTHOR {
        string id
        string name
    }

    POST {
        string id
        string title
        datetime published_at
    }

    COMMENT {
        string id
        string body
    }
```

Производит диаграмму:

erDiagram AUTHOR ||--o{ POST : writes POST ||--o{ COMMENT : receives AUTHOR { string id string name } POST { string id string title datetime published_at } COMMENT { string id string body }

Когда не использовать Mermaid

Не используйте Mermaid, когда:

  • Диаграмме нужен точный визуальный макет.
  • Дизайн должен точно соответствовать брендовой системе.
  • Визуализация в основном декоративная.
  • В диаграмме слишком много узлов для чтения.
  • Скриншот объяснил бы суть лучше.
  • Контент редко меняется и нуждается в полировке больше, чем в поддерживаемости.

Mermaid отлично подходит для живой технической документации. Он менее хорош для презентационных материалов. Для диаграмм документного качества в печатных или PDF-контекстах LaTeX предлагает пакеты, такие как TikZ и pgfplots, которые дают вам гораздо больший контроль над макетом — Шпаргалка LaTeX охватывает включение диаграмм наряду с остальным инструментарием LaTeX.

Финальные мысли

Mermaid — один из лучших инструментов для технического блогинга, потому что он уважает то, как разработчики уже работают: текстовые файлы, Markdown, Git, код-ревью и повторяемые сборки. Для всего остального вокруг диаграмм — заголовков, списков, таблиц, блоков кода — Шпаргалка Markdown является справочным дополнением, которое следует хранить рядом с этим руководством.

Лучшие диаграммы Mermaid — не самые сложные. Это диаграммы, которые делают концепцию очевидной и остаются легкими для редактирования спустя шесть месяцев.

Используйте Mermaid для диаграмм, которые должны жить вместе с вашей документацией. Держите их маленькими, держите их читаемыми и относитесь к ним как к части исходного кода вашей статьи.

Подписаться

Получайте новые материалы про системы, инфраструктуру и AI engineering.