Оставьте скучный JSON в прошлом: вот почему профи выбирают YAML для настройки программ!

A configuration.yaml file open in a text editor on a Mac.

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

YAML — формат, который появился даже раньше JSON. Хотя он встречается реже, у него немало плюсов.

Что такое YAML и зачем он нужен?

Формат, который называют языком разметки, но это не совсем так

Сначала YAML может показаться запутанным. Даже его название менялось: сперва это была аббревиатура Yet Another Markup Language («ещё один язык разметки»), а позже расшифровывалась как YAML Ain’t Markup Language («YAML — не язык разметки»). Такие игры слов в IT — обычное дело, особенно у поклонников Unix.

Чтобы лучше понять YAML, давайте разберёмся с понятием «язык разметки». Обычно это простой текст, в который добавлены специальные пометки — аннотации, описывающие структуру и содержание. Самый известный пример — HTML: на нём делают сайты, создают ссылки, вставляют картинки.

Есть и другие языки разметки, вроде XML и SGML, они похожи на HTML, но используются для других целей. Даже Markdown — по сути тоже язык разметки, несмотря на простоту.

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

A diagram showing technologies on a scale from "Markup-focussed" to "Data-heavy". They run from Markdown through HTML, XML, and YAML to JSON.

YAML придумали ещё в 2001 году, а первый официальный релиз был в 2004-м. Формат продолжали развивать — последняя версия вышла в 2021 году. Обычно для файлов YAML используют расширения .yml или .yaml.

Laptop With Linux Intel NUC13.

Laptop With Linux Intel NUC13

Выбирайте любой из трёх процессоров Intel и устанавливайте любимую сборку Linux — всё под ваши задачи.

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

Как JSON, только приятнее для глаз и проще для редактирования

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

Вот так это выглядит в формате JSON:

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

Ключевой момент: для отступов в YAML допустимы только пробелы — табуляция не подойдёт. Если задать правильный размер отступа в редакторе, сразу заметны все ошибки с форматированием.

В некоторых вещах синтаксис YAML похож на Markdown: например, списки создаются строками с дефисом в начале:

Словари и списки можно свободно комбинировать, хоть в несколько уровней вложенности:

A YAML file representing part of the family tree of the Kings and Queens of England.

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

Вариант с «folded block» — все переносы превращает в пробелы:

Эта запись отлично подходит, если вы хотите разбивать текст на абзацы — примерно как в Markdown или HTML.

Где реально применяют YAML?

Конфиги и DevOps любят YAML — и вот почему

Забавно, но официальный сайт YAML написан целиком… на самом YAML!

The YAML website explains what YAML is, with links to further information, in YAML syntax.

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

Сегодня YAML почти стандарт для конфигов современных приложений. Вот, например, если поискать в каталоге пользовательских настроек все YAML-файлы:

The find command showing YAML files on a local file system.

Если не брать gh — клиент для GitHub, остальные утилиты здесь — TUI-программы нового поколения, которые уже не сравнить с устаревшими INI-файлами или специфическими форматами настроек.

Вот пример конфига для gh — отличный образец YAML в деле:

yaml-gh-config

Здесь есть всё, что нужно: понятные значения по умолчанию, заготовки для ваших параметров и комментарии с подсказками. Это сразу же выделяет YAML на фоне JSON, ведь комментарии в JSON не поддерживаются (разве что в расширении JSONC).


Подпишитесь на рассылку — всё о YAML и тонкостях настройки ПО

Многие DevOps-инструменты, например, Docker и Kubernetes, перешли на YAML именно за счёт его удобочитаемости. Docker Compose и описания объектов Kubernetes полностью строятся на этом формате.

Есть и полезная утилита yq — по смыслу это как jq для JSON, только для работы с YAML: с её помощью можно искать, фильтровать и менять данные в YAML-файлах.

Через yq легко конвертировать JSON-файл в YAML:

Можно также автоматически дописывать или редактировать данные: искать нужный элемент в массиве и менять его значение в пару кликов.

Когда YAML уместен — это почти идеальное решение

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

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка — это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!

Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в:

Алекс Бежбакин
Оцените автора
Добавить комментарий