YAML — это формат записи структурированных данных, который чаще всего используют в конфигурационных файлах, автоматизации и обмене данными между системами. Его ценят за читаемость: структура задается отступами, а данные обычно оформляются в виде пар ключ-значение и списков.
Содержание статьи
YAML: краткое определение
YAML — язык сериализации данных в текстовом виде. Он нужен для того, чтобы человек мог быстро прочитать настройки, а программа — без лишних проблем их разобрать.
Название YAML обычно расшифровывают как YAML Ain’t Markup Language. Смысл в том, что это не язык разметки вроде HTML или XML, а способ описывать данные.
На практике YAML встречается там, где надо хранить параметры приложений, описывать шаги автоматизации, задавать инфраструктуру как код и фиксировать желаемое состояние сервисов. Файл при этом остается понятным даже без специальных редакторов.
Как устроен синтаксис YAML
Синтаксис YAML строится на отступах, строках и простых обозначениях для объектов и списков. Если соблюдать структуру, файл остается коротким и читаемым.
В YAML нет обязательных фигурных скобок и закрывающих тегов. Иерархия задается пробелами в начале строки. Из-за этого формат выглядит проще, чем многие альтернативы, но он чувствителен к ошибкам в отступах.
Пары ключ-значение
Основной элемент YAML — запись вида ключ: значение. Так обычно задают параметры конфигурации.
Пример простой записи:
profession: teacher
Отступы
Отступы определяют вложенность данных. В YAML используют пробелы, а табуляция в стандартной записи не допускается.
Если один блок данных вложен в другой, его строки должны иметь одинаковый уровень отступа. Даже одна лишняя или пропущенная позиция может сделать файл невалидным.
Списки
Список в YAML начинается с дефиса и пробела перед каждым элементом. Такой формат подходит для наборов значений, команд, объектов и параметров.
Пример:
fruits:
— apple
— orange
— pear
Есть и краткая форма со скобками:
fruits: [apple, orange, pear]
Словари и вложенные структуры
YAML поддерживает словари, которые также называют отображениями или ассоциативными массивами. Это наборы связанных ключей и значений.
За счет вложенности можно описывать крупные структуры без длинной служебной записи. Поэтому YAML часто выбирают для файлов с несколькими уровнями параметров.
Строки, числа, логические значения и null
YAML поддерживает базовые типы данных: строки, целые числа, числа с плавающей точкой, логические значения и пустые значения. Это делает формат удобным для настроек и передачи параметров.
Например, в YAML можно хранить текст, число портов, флаг включения функции и пустое поле без дополнительной обертки.
Кавычки
Кавычки в YAML нужны не всегда. Их используют в тех случаях, когда значение может быть неверно истолковано парсером.
Простой пример — строка true. Без кавычек она может восприниматься как логическое значение, а не как текст. Одинарные и двойные кавычки помогают снять такую неоднозначность.
Комментарии
Комментарии начинаются со знака #. Они нужны для пояснений внутри файла.
Это полезно в больших конфигурациях, где нужно кратко объяснить назначение параметра или временно пометить часть настроек.
Многострочные строки
YAML умеет хранить текст в несколько строк. Это удобно для описаний, шаблонов, блоков команд и длинных сообщений.
Такой способ записи избавляет от необходимости вставлять символы переноса строки вручную в каждом месте.
Какие расширения используют YAML-файлы
YAML-файлы обычно сохраняют с расширением .yaml или .yml. Оба варианта распространены.
Конкретный выбор зависит от инструмента, проекта или внутренних правил команды. Главное — единообразие в одном репозитории или системе.
Чем YAML отличается от JSON и XML
YAML отличается от JSON и XML тем, что делает упор на читаемость человеком. JSON строже и компактнее для обмена между сервисами, а XML использует теги и выглядит более многословно.
YAML и JSON близки по назначению: оба формата передают структурированные данные. При этом YAML обычно легче читать в конфигурационных файлах, где важна наглядность. JSON чаще применяют в API, веб-приложениях и интеграциях, где нужна предсказуемая и унифицированная структура.
С XML различие заметнее. XML требует открывающих и закрывающих тегов, из-за чего документ быстро разрастается. YAML записывает те же связи короче, без лишней служебной обвязки.
| Параметр | YAML | JSON | XML |
| Читаемость человеком | Высокая | Средняя | Ниже из-за тегов |
| Основной синтаксис | Отступы, ключи, списки | Скобки, запятые, кавычки | Теги и атрибуты |
| Типичное применение | Конфиги, автоматизация, IaC | API, обмен данными | Документы, старые интеграции |
| Объем записи | Обычно компактный | Компактный, но строже | Часто больше |
Где используют YAML
YAML применяют в конфигурационных файлах, системах автоматизации, инструментах DevOps, описании инфраструктуры и передаче данных между разными языками программирования. Это один из стандартных форматов для декларативных настроек.
У формата широкий круг применения. Один и тот же подход подходит и для небольшого файла с параметрами приложения, и для описания инфраструктуры, пайплайна сборки или контейнерного окружения.
Конфигурационные файлы
Одна из самых частых задач YAML — хранение настроек приложений и сервисов. Формат помогает быстро увидеть, какие параметры заданы и как они сгруппированы.
Инфраструктура как код
YAML используют для описания инфраструктуры как кода, или IaC. В таких файлах задают желаемую конфигурацию виртуальных машин, сетей, хранилищ и связанных компонентов.
Подход снижает долю ручных действий и помогает поддерживать единообразие между окружениями.
Развертывание приложений
Файлы YAML часто содержат параметры развертывания: зависимости, ресурсы, переменные среды и другие настройки. Это удобно для систем, где состояние приложения должно быть описано заранее и храниться вместе с кодом.
CI/CD
В пайплайнах непрерывной интеграции и доставки YAML применяют для описания шагов сборки, тестирования и выпуска. Такой формат хорошо подходит для последовательностей действий и условий запуска.
Обмен данными между языками
YAML не привязан к одному языку программирования. Один и тот же файл могут читать инструменты и библиотеки в Python, Ruby, Perl и других средах.
Логи и документация
Из-за читаемости YAML используют и для текстовых служебных данных, где важна ясная структура. В некоторых случаях он подходит для логов и технической документации с вложенными блоками параметров.
Почему YAML часто встречается в DevOps
YAML популярен в DevOps, потому что позволяет описывать состояние систем и шаги автоматизации простым текстом. Его удобно хранить в системе контроля версий, проверять глазами и менять по частям.
Для DevOps важна предсказуемость. Конфигурация, сохраненная в YAML, хорошо сочетается с подходом, где инфраструктура, пайплайны и развертывания описываются как код. Это упрощает повторяемость процессов и контроль изменений.
- Ansible использует YAML в playbook-файлах для описания задач автоматизации.
- Kubernetes применяет YAML для описания ресурсов, объектов и желаемого состояния кластера.
- GitHub хранит YAML-конфигурации рабочих процессов автоматизации.
- Docker Compose задает через YAML сервисы многоконтейнерных приложений.
Какие преимущества дает YAML
Главные преимущества YAML — читаемость, компактность и удобство для конфигурационных сценариев. Формат позволяет быстро увидеть структуру данных без лишних служебных символов.
У него есть несколько сильных сторон:
- Простая визуальная структура. Отступы и короткая запись помогают читать файл как обычный текст.
- Поддержка вложенности. Можно описывать сложные данные без громоздкой разметки.
- Гибкость типов. Строки, числа, списки, логические значения и пустые поля хранятся в одном формате.
- Широкая совместимость. YAML поддерживают многие языки, библиотеки и DevOps-инструменты.
- Удобство для контроля версий. Изменения в текстовом файле легко сравнивать в репозитории.
Какие ошибки в YAML встречаются чаще всего
Чаще всего в YAML ошибаются с отступами, табуляцией, кавычками и структурой списков. Даже небольшой сбой в форматировании может нарушить разбор файла.
Формат выглядит простым, но требует аккуратности. Если в JSON ошибка обычно заметна по символам, то в YAML она нередко прячется в пробелах.
Типовые проблемы выглядят так:
- использование табуляции вместо пробелов;
- разный уровень отступов в одном блоке;
- смешивание списка и словаря без корректной вложенности;
- отсутствие кавычек там, где значение может быть распознано не как строка;
- неверное оформление многострочного текста.
Как проверить YAML-файл на ошибки
YAML-файл проверяют парсерами, валидаторами и линтерами. Эти инструменты находят синтаксические ошибки, проблемы с отступами и нарушения структуры.
В экосистеме Python широко известна библиотека PyYAML, которая умеет загружать YAML-данные в объекты Python и выполнять обратное преобразование. Для проверки корректности также используют валидаторы и линтеры, например yamllint и другие средства анализа YAML-документов.
Если файл участвует в сборке, развертывании или автоматизации, проверка синтаксиса перед запуском особенно полезна. Одна ошибка в пробеле может остановить весь процесс.
Когда YAML подходит лучше всего
YAML лучше всего подходит для файлов, которые человек должен регулярно читать и редактировать: конфигураций, описаний инфраструктуры, сценариев автоматизации и пайплайнов. В таких задачах читаемость часто важнее минимального объема записи.
Если нужен формат для API-обмена с жесткими правилами, часто выбирают JSON. Если требуется документная разметка с тегами и старые корпоративные интеграции, может использоваться XML. YAML остается сильным вариантом там, где структура должна быть на виду.