Как написать блок-схему Mermaid:направление, узлы и стрелки.

Блок-схема Mermaid — это текст в блоке кода: вы называете узлы, соединяете их стрелками, и диаграмма рисуется сама. Вот синтаксис с примерами для копирования.

macOS 14 или новее. Чтение бесплатно; редактирование и ревью оплачиваются один раз.

Коротко

Начните блок кода с пометкой mermaid, напишите flowchart и направление, затем перечислите связи между узлами. TD рисует сверху вниз, LR — слева направо. Прямоугольник — это [text], решение — {text}, а --> — стрелка.

```mermaid
flowchart LR
    A[Write spec] --> B{Approved?}
    B -->|Yes| C[Build]
    B -->|No| A
```

·

Направление

Первая строка называет тип диаграммы и направление. Работают и flowchart, и более старое graph.

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

Выбирайте LR для короткого процесса, который умещается в ширину страницы, и TD для более длинного.

Формы узлов

Узел — это идентификатор, после которого в скобках при желании идёт текст. Форму выбирают скобки:

flowchart LR
    a[Rectangle]
    b(Rounded)
    c([Stadium])
    d[[Subroutine]]
    e[(Database)]
    f((Circle))
    g{Decision}
    h{{Hexagon}}
    i[/Parallelogram/]

Узел без скобок просто показывает свой идентификатор. Позже на узел можно сослаться только по идентификатору, поэтому форма и текст пишутся один раз.

Подграфы

Подграф группирует узлы в блок с подписью. Он начинается со слова subgraph и заканчивается словом end:

flowchart TD
    subgraph client [Client]
        A[Browser] --> B[App]
    end
    subgraph server [Server]
        C[API] --> D[(Database)]
    end
    B --> C

Слово в скобках — это название, а слово перед ним — идентификатор, на который можно ссылаться. Внутри подграфа может быть своя строка direction LR, но направление игнорируется, если узел внутри связан с чем-то снаружи.

Полный пример

Соберём всё вместе: небольшой процесс выпуска релиза с решением, возвратом назад и сгруппированным шагом:

flowchart TD
    A([Start]) --> B[Write the change]
    B --> C{Tests pass?}
    C -->|No| B
    C -->|Yes| D[Open a pull request]
    subgraph review [Review]
        D --> E{Approved?}
        E -->|No| B
    end
    E -->|Yes| F[(Merge)]

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

Комментарии и стили

Строка, начинающаяся с %%, — комментарий, и она не рисуется. Чтобы раскрасить узлы, определите класс и примените его:

flowchart TD
    %% the happy path
    A[Start]:::good --> B[Done]:::good
    classDef good fill:#d4f4dd,stroke:#2d7a46

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

Частые ошибки

  • Слово end строчными буквами как текст узла ломает диаграмму. Пишите End или возьмите текст в кавычки.
  • Идентификатор узла, начинающийся с o или x сразу после связи, например A---oB, читается как связь с кружком или крестом. Добавьте пробел или напишите с заглавной.
  • Спецсимволы в подписи. Скобки, круглые скобки и двоеточия нужно брать в двойные кавычки: A["Save (draft)"].
  • Нет первой строки. Без flowchart TD ничего не нарисуется.
  • Слишком много узлов. Блок-схему из тридцати прямоугольников трудно читать. Разделите её или используйте подграфы.

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

Как это нарисовать

Блоки Mermaid в Markdown-файлах рисует GitHub и DotMD: офлайн, в светлой или тёмной теме под цвет страницы. В редакторе команда Insert → Diagram вставляет в документ рабочую блок-схему, а предпросмотр перерисовывается по мере набора. В том же руководстве рассказано о диаграммах последовательности, классов, состояний, ER и Ганта. Сам синтаксис ограждения описан в статье блоки кода в Markdown.

Вопросы о блок-схемах Mermaid

Как написать блок-схему в Mermaid?

Начните блок кода mermaid со строки flowchart TD (или LR), затем добавляйте связи вроде A[Start] --> B[End], по одной на строку.

Чем TD отличается от LR в блок-схеме Mermaid?

TD (сверху вниз, то же, что TB) рисует схему сверху вниз, а LR — слева направо.

Как добавить текст на стрелку в Mermaid?

Поставьте его между вертикальными чертами после стрелки, A -->|Yes| B, или между дефисами, A -- Yes --> B.

Почему моя блок-схема Mermaid показывает ошибку?

Обычно причина в слове end строчными в подписи, в отсутствии первой строки или в спецсимволах в подписи без двойных кавычек.

Другие вопросы