Что такое YAML: синтаксис, примеры и зачем нужен формат

YAML — текстовый формат для настроек, где структуру задают отступы, без фигурных скобок и кавычек. Разбираем простыми словами, как устроен синтаксис, чем YAML отличается от JSON и почему любой JSON — это уже валидный YAML. Отдельно разберём табы и сбитые отступы, из-за которых файл ломается, хотя на вид всё ровно. После статьи сможете прочитать чужой docker-compose.yml и не сломать собственный конфиг.
Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 1444 статьи автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 2105 экспертных мнений Подписаться на Телеграм-канал
Обложка: Что такое YAML: синтаксис, примеры и зачем нужен формат

Вы открыли чужой проект, а внутри лежит файл docker-compose.yml. Ни фигурных скобок, ни кавычек, ни точек с запятой: просто ровные строчки с двоеточиями и отступами. Выглядит как обычный список дел в блокноте, но по нему запускаются целые сервисы. Это и есть YAML.

В этой статье разберём простыми словами, что такое YAML, как устроен его синтаксис, чем он отличается от JSON и где применяется. Отдельно остановимся на отступах и табах: это главная боль новичка, из-за которой файл ломается, хотя визуально всё ровно.

YAML часто идёт в паре с другим форматом данных. Если про него вы ещё не читали, начните с обзорной статьи «Что такое JSON»: половину идей из мира YAML проще понять на контрасте с JSON.

Статья пригодится не только программистам. YAML сегодня трогают тестировщики, аналитики, дата-инженеры и все, кто хоть раз настраивал автодеплой или конфиг приложения. А ещё это близкий родственник разметки. Если интересно, чем языки разметки отличаются от форматов данных, есть материал «Что такое HTML».

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

Курсы по Веб-разработкаКурсыСравнение 162 курсов по веб-разработкеЦены, школы, длительность, рассрочка

Что такое YAML простыми словами

YAML — это текстовый формат для хранения данных, который легко читается человеком. В нём удобно описывать настройки программ: какие у сервиса порты, какие переменные, какие шаги должна пройти сборка проекта.

Название — рекурсивная шутка программистов. YAML расшифровывается как «YAML Ain’t Markup Language», то есть «YAML — это не язык разметки». Первое слово в расшифровке — само название формата. Так авторы подчеркнули, что YAML заточен под данные, а не под оформление документов, как HTML или XML.

Главная задача YAML — сериализация данных. Это превращение живых структур из программы (списков, словарей, чисел) в текст, который можно сохранить в файл или передать по сети. Потом другая программа читает этот текст и восстанавливает из него те же данные обратно.

Ключевая особенность одна, и её стоит запомнить сразу: структуру в YAML задают отступы. Там, где JSON расставляет фигурные скобки, а XML — парные теги, YAML использует пробелы слева. Вложено глубже — значит, сдвинуто вправо. Именно из-за этого файлы получаются такими чистыми на вид.

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

Как устроен YAML: ключи, списки и значения

Внутри YAML всего три кирпичика: пары «ключ — значение», списки и отдельные значения. Из них собирается любая, даже сложная конфигурация. Разберём каждый.

Пары ключ и значение

Самый частый элемент. Пишется как ключ, двоеточие, пробел и значение. Пробел после двоеточия обязателен: без него парсер (программа, которая читает файл) не поймёт, где заканчивается имя.

name: Иван
age: 30
city: Москва

Набор таких пар в мире YAML называют словарём или маппингом. Чтобы вложить один блок в другой, сдвигаем строки вправо на пару пробелов:

user:
  name: Иван
  role: админ
  active: true

Здесь name, role и active — это вложенные ключи внутри user. Отступ показывает: они принадлежат пользователю, а не лежат сами по себе.

Список — перечисление по пунктам

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

languages:
  - Python
  - JavaScript
  - Go
Курсы по PythonКурсыСравнение 539 курсов по PythonЦены, школы, длительность, рассрочка

Списки и словари свободно вкладываются друг в друга. Например, список пользователей, у каждого — свои поля:

team:
  - name: Иван
    role: backend
  - name: Мария
    role: дизайн

Скаляры — одиночные значения

Скаляр — это простое одиночное значение: строка, число, булево (true или false) или пустота (null). YAML сам угадывает тип по тому, как вы написали значение. 30 он прочитает как число, true как булево, а «Москва» как строку. Кавычки для строк обычно не нужны, но о том, когда они всё-таки спасают, поговорим в разделе про ошибки.

Синтаксис YAML: отступы, комментарии и длинный текст

Правил в YAML немного, но пара из них строгие, и новичок спотыкается именно об них.

Отступы — только пробелы, никаких табов. Это железное правило. YAML запрещает символ табуляции для отступов, и если нажать Tab вместо пробелов, файл упадёт с ошибкой. Беда в том, что на экране таб и пробелы выглядят одинаково, поэтому проблему так тяжело заметить глазами. Общепринятый стандарт — два пробела на уровень вложенности.

Комментарии начинаются с решётки #. Всё, что после неё до конца строки, парсер игнорирует. Это удобно для заметок себе и коллегам:

# настройки базы данных
database:
  host: localhost
  port: 5432  # порт по умолчанию

Кстати, в этом YAML выигрывает у JSON: в JSON комментарии писать нельзя вообще.

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

Курсы по KubernetesКурсыСравнение 78 курсов по KubernetesЦены, школы, длительность, рассрочка

Если значение длинное и его хочется разбить на строки, есть два оператора. Вертикальная черта | сохраняет переносы как есть, а знак «больше» > склеивает строки в один абзац:

message: |
  Первая строка
  Вторая строка

description: >
  Этот текст
  склеится в одну строку

Совет новичку. Настройте редактор так, чтобы клавиша Tab вставляла пробелы, а невидимые символы подсвечивались. Половина ошибок в YAML отваливается сама собой.

Ваня Буявец, продюсер, основатель CheckroiВаня Буявец, основатель CheckroiПоказываю, как применять Claude Code, ChatGPT и другие нейросети в учёбе и работе, с примерами и промптамиЧитать в Телеграме

YAML или JSON: в чём разница

Оба формата решают одну задачу: хранят и передают данные текстом. Но делают это по-разному. JSON заточен под машины и обмен данными между программами, YAML — под человека и настройки, которые люди правят руками.

Самый важный факт для понимания связки: YAML — это надмножество JSON. Проще говоря, YAML умеет всё, что умеет JSON, и сверху ещё немного. Практическое следствие приятное: любой валидный JSON — это уже валидный YAML. Можно взять JSON-файл, скормить его YAML-парсеру, и тот прочитает его без единой правки. Наоборот так не работает.

Одни и те же данные в двух форматах выглядят так. JSON:

{
  "name": "Иван",
  "languages": ["Python", "Go"]
}

Тот же смысл в YAML:

name: Иван
languages:
  - Python
  - Go

Меньше знаков, легче читать. Соберём разницу в таблицу.

Критерий YAML JSON
Что задаёт структуру Отступы Фигурные скобки
Читаемость для человека Отличная Хорошая
Комментарии Можно (#) Нельзя
Где чаще всего Конфиги, DevOps API, обмен данными
Риск ошибиться в мелочи Выше (отступы) Ниже

Вывод простой. Если данные летают между сервером и приложением, берут JSON. Человек садится править настройки руками — удобнее YAML. Подробный разбор второго формата с примерами и таблицей на три языка мы собрали в статье «Что такое JSON».

Где применяется YAML: Docker, Kubernetes и автосборка

YAML стал стандартом в мире DevOps — это подход, при котором разработка и эксплуатация приложений автоматизируются и описываются кодом. Раз настройки удобно читать и править человеку, именно в настройках YAML и прижился. Вот где вы встретите его чаще всего.

  • Docker Compose. Docker — это упаковка приложения в изолированный контейнер, чтобы оно одинаково работало на любой машине. Файл docker-compose.yml описывает, какие контейнеры поднять и как их связать.
  • Курсы по DockerКурсыСравнение 216 курсов по DockerЦены, школы, длительность, рассрочка
  • Kubernetes. Система, которая управляет сотнями контейнеров сразу. Все её манифесты (описания сервисов) пишут на YAML.
  • CI/CD-пайплайны. Это автоматическая сборка, проверка и выкатка кода. GitHub Actions, GitLab CI, CircleCI хранят сценарии в YAML-файлах.
  • Ansible. Инструмент для настройки серверов. Список задач для него тоже описывают на YAML.
  • Конфиги приложений. Многие программы держат свои настройки в config.yml, от веб-фреймворков до статических генераторов сайтов.

Общий знаменатель везде один: файл читает и машина, и живой инженер, который его правит. Ради этого удобства YAML и выбирают.

Типичные ошибки в YAML и как их избежать

За читаемость приходится платить строгостью к мелочам. Вот ошибки, на которых новичок теряет больше всего времени.

1. Табы вместо пробелов. Главная беда. Нажали Tab, и парсер выдаёт error: found character '\t' that cannot start any token. Визуально всё ровно, а файл не читается. Лечится настройкой редактора на пробелы.

2. Сбитый отступ. Один лишний пробел, и ключ уезжает не в тот блок или ломает всю вложенность. YAML строг: уровень задаётся числом пробелов, и соседние ключи одного блока должны быть сдвинуты одинаково.

3. Забыли пробел после двоеточия. name:Иван парсер прочитает неправильно. Правильно: name: Иван, с пробелом.

4. Значение приняли за другой тип. Тут прячется знаменитая «Norway problem». Код страны Норвегии — NO, и YAML старых версий читал no как булево false. Строка country: no превращалась в false. Та же история с версиями вроде 1.10: их принимают за число 1.1. Спасают кавычки: в них значение точно останется строкой, например country: "no" или version: "1.10".

5. Два одинаковых ключа в одном блоке. Если написать один и тот же ключ дважды, часть парсеров молча возьмёт последний и затрёт первый, часть выдаст ошибку. Дубли лучше не плодить.

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

Чем открыть и как проверить YAML-файл

YAML — обычный текст, так что открыть его можно чем угодно: хоть «Блокнотом». Но удобнее в редакторе кода (VS Code, Sublime Text): там подсветка синтаксиса и видно вложенность.

Расширение у файлов бывает двух видов: .yaml и .yml. Разницы между ними нет, это одно и то же. Исторически .yml прижилось из-за старых систем, где расширение ограничивали тремя буквами.

Чтобы поймать ошибку до запуска проекта, файл прогоняют через валидатор, программу, которая проверяет синтаксис. Быстрые варианты:

  • Онлайн-валидаторы. Вставляете текст в окно на сайте, и он сразу показывает, где сломано. Удобно для разовой проверки.
  • Плагин в редакторе. VS Code с расширением для YAML подчёркивает проблему прямо во время набора.
  • Утилита yamllint. Консольная программа для тех, кто дружит с терминалом: проверяет файл и указывает строку с ошибкой.

Где научиться работать с кодом и данными

YAML сам по себе учится за вечер — правил в нём мало. Ценность появляется, когда вы понимаете, куда этот файл встраивается: как устроен веб-сервис, что такое контейнеры и автосборка. Отдельного курса «по YAML» искать не нужно, он идёт частью программ по разработке.

Если вам ближе смежная логика отступов, обратите внимание на Python: там вложенность блоков тоже задаётся пробелами, и после Python синтаксис YAML заходит без сопротивления. А чтобы увидеть, где данные и конфиги живут в реальном проекте, полезно пройти путь бэкенда, мы описали его в статье «Как стать backend-разработчиком».

Чтобы не собирать знания по крупицам, проще один раз пройти нормальный курс, где YAML, JSON и работу с сервисами дают в связке с практикой.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология175 800 ₽7125 ₽/мес.21 месяцОбзор курса
Профессия «Веб-разработчик с нуля»
Перейти на сайт курса
НетологияНетология163 300 ₽7125 ₽/мес.13 месяцевОбзор курса
Веб-разработчик
Перейти на сайт курса
Академия СинергияАкадемия Синергия141 036 ₽5877 ₽/мес.6 месяцевОбзор курса
Веб-разработчик
Перейти на сайт курса
SkillboxSkillbox153 348 ₽4486 ₽/мес.16 месяцевОбзор курса
FullStack-разработчик: тариф PRO
Перейти на сайт курса
Академия ЭдюсонЭдюсон182 000 ₽7583 ₽/мес.14 месяцевОбзор курса
Fullstack-разработчик на JavaScript
Перейти на сайт курса
Академия ЭдюсонЭдюсон158 760 ₽6615 ₽/мес.11 месяцевОбзор курса
Веб-разработка для фриланса
Перейти на сайт курса
SkyproSkypro118 320 ₽364 833 ₽/мес.12 месяцевОбзор курса
Фулстек-разработчик на JavaScript
Перейти на сайт курса
SkillboxSkillbox153 348 ₽4296 ₽/мес.11 месяцевОбзор курса
FullStack-разработчик: тариф Базовый
Перейти на сайт курса
Академия ЭдюсонЭдюсон158 760 ₽6615 ₽/мес.12 месяцевОбзор курса
Веб-разработчик (c индивидуальным сопровождением)
Перейти на сайт курса
SkyproSkypro204 000 ₽368 333 ₽/мес.12 месяцевОбзор курса

Больше программ — в полном каталоге курсов по веб-разработке

Часто задаваемые вопросы

Как расшифровывается YAML?

YAML — это рекурсивная аббревиатура «YAML Ain't Markup Language», то есть «YAML не язык разметки». Первое слово в расшифровке повторяет само название. Так авторы подчеркнули, что формат заточен под данные и настройки, а не под оформление документов.

Чем YAML отличается от JSON?

Оба формата хранят данные текстом, но JSON использует фигурные скобки и удобен для обмена данными между программами, а YAML задаёт структуру отступами и читается человеком легче. В YAML можно писать комментарии, в JSON — нельзя. Подробное сравнение с таблицей есть в статье «Что такое JSON».

Можно ли использовать табы в YAML?

Нет. YAML запрещает символ табуляции для отступов — только пробелы. Если нажать Tab, файл упадёт с ошибкой парсинга. При этом на экране таб и пробелы выглядят одинаково, поэтому такую ошибку тяжело заметить глазами. Настройте редактор так, чтобы Tab вставлял пробелы.

Какое расширение у YAML-файлов — .yml или .yaml?

Оба варианта одинаковые, разницы в содержимом нет. Расширение .yml прижилось исторически из-за старых систем, где длину расширения ограничивали тремя буквами. Официально рекомендуется .yaml, но на практике встречаются оба.

Правда ли, что любой JSON — это валидный YAML?

Да. YAML — надмножество JSON, то есть умеет всё то же самое и немного больше. Поэтому любой корректный JSON-файл прочитает и YAML-парсер, без единой правки. Обратное неверно: не всякий YAML можно скормить JSON-парсеру.

Где применяется YAML?

Чаще всего в настройках и DevOps: файлы docker-compose.yml, манифесты Kubernetes, сценарии CI/CD (GitHub Actions, GitLab CI), плейбуки Ansible и конфиги приложений. Везде, где файл настроек должны легко читать и править люди.

Как проверить YAML-файл на ошибки?

Проще всего прогнать текст через онлайн-валидатор — он сразу покажет строку с ошибкой. В редакторе VS Code это делает плагин для YAML прямо во время набора. Для терминала есть утилита yamllint, которая проверяет файл и указывает на проблемные места.

Что такое «Norway problem» в YAML?

Это классическая ловушка с типами. Код страны Норвегии — NO, и YAML старых версий читал no как булево false. Строка вроде country: no неожиданно превращалась в false. Чтобы значение осталось строкой, его берут в кавычки: country: 'no'.

Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!