Вы открыли чужой проект, а внутри лежит файл 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
КурсыСравнение 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 это обычное дело.
КурсыСравнение 78 курсов по KubernetesЦены, школы, длительность, рассрочка
Если значение длинное и его хочется разбить на строки, есть два оператора. Вертикальная черта | сохраняет переносы как есть, а знак «больше» > склеивает строки в один абзац:
message: | Первая строка Вторая строка description: > Этот текст склеится в одну строку
Совет новичку. Настройте редактор так, чтобы клавиша Tab вставляла пробелы, а невидимые символы подсвечивались. Половина ошибок в YAML отваливается сама собой.
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описывает, какие контейнеры поднять и как их связать. - Kubernetes. Система, которая управляет сотнями контейнеров сразу. Все её манифесты (описания сервисов) пишут на YAML.
- CI/CD-пайплайны. Это автоматическая сборка, проверка и выкатка кода. GitHub Actions, GitLab CI, CircleCI хранят сценарии в YAML-файлах.
- Ansible. Инструмент для настройки серверов. Список задач для него тоже описывают на YAML.
- Конфиги приложений. Многие программы держат свои настройки в
config.yml, от веб-фреймворков до статических генераторов сайтов.
КурсыСравнение 216 курсов по DockerЦены, школы, длительность, рассрочка
Общий знаменатель везде один: файл читает и машина, и живой инженер, который его правит. Ради этого удобства 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 месяцев | Обзор курса | |
| Веб-разработчик Перейти на сайт курса | 153 348 ₽ | 4486 ₽/мес. | 16 месяцев | Обзор курса | |
| FullStack-разработчик: тариф PRO Перейти на сайт курса | 182 000 ₽ | 7583 ₽/мес. | 14 месяцев | Обзор курса | |
| Fullstack-разработчик на JavaScript Перейти на сайт курса | 158 760 ₽ | 6615 ₽/мес. | 11 месяцев | Обзор курса | |
| Веб-разработка для фриланса Перейти на сайт курса | 118 320 ₽ | 364 833 ₽/мес. | 12 месяцев | Обзор курса | |
| Фулстек-разработчик на JavaScript Перейти на сайт курса | 153 348 ₽ | 4296 ₽/мес. | 11 месяцев | Обзор курса | |
| FullStack-разработчик: тариф Базовый Перейти на сайт курса | 158 760 ₽ | 6615 ₽/мес. | 12 месяцев | Обзор курса | |
| Веб-разработчик (c индивидуальным сопровождением) Перейти на сайт курса | 204 000 ₽ | 368 333 ₽/мес. | 12 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по веб-разработке




