Що таке YAML: просте пояснення формату конфігураційних файлів

BasicsDevOpsDeveloper Tools

Що таке YAML і чому пробіли тут мають значення

Якщо ти працюєш з чимось сучасним — Docker Compose, GitHub Actions, Kubernetes, Ansible — ти стикнешся з YAML. Спочатку виглядає просто: ключі, двокрапки, значення. Але потім щось не працює, і ти дві години шукаєш проблему, поки не розумієш: зайвий пробіл у відступі.

YAML (YAML Ain’t Markup Language) — це текстовий формат для даних і конфігурацій. Його головна ідея: бути зручним для людини. JSON теж читабельний, але YAML — ще читабельніший, якщо знати правила.

Основні правила синтаксису

Ключі й значення

name: ITAcademy
port: 8080
debug: false

Просто: ключ, двокрапка, пробіл, значення. Пробіл після двокрапки обов’язковий. name:ITAcademy без пробілу — помилка.

Списки

tags:
  - frontend
  - backend
  - devops

Кожен елемент списку починається з - (дефіс і пробіл).

Вкладені структури

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: postgres:17
    environment:
      POSTGRES_PASSWORD: secret

Вкладеність визначається відступами пробілами (не табами!). Зазвичай 2 пробіли на рівень.

Багаторядкові тексти

description: >
  Це багаторядковий текст,
  який буде об'єднаний в один рядок.

long_text: |
  Це багаторядковий текст,
  який збереже переноси рядків.

> — об’єднує рядки в один. | — зберігає переноси.

Чим YAML кращий JSON

{
  "services": {
    "web": {
      "image": "nginx",
      "ports": ["8080:80"]
    }
  }
}
services:
  web:
    image: nginx
    ports:
      - "8080:80"

YAML: не треба лапок для ключів, не надо фігурних дужок, не треба ком між елементами списку, не треба true/false — можна yes/no.

Чим YAML гірший JSON

  • Пробіли мають значення. Зайвий пробіл = інший сенс або помилка, і цю помилку важко помітити.
  • Немає табів. Тільки пробіли. Якщо редактор вставляє таби — буде плутанина.
  • Типи даних можуть здивувати. yes стає true, no стає false, 1.0 стає числом, 1.0.0 стає рядком. Треба бути уважним.

Типові помилки

1. Таби замість пробілів

YAML вимагає пробіли. Крапка. Якщо редактор вставляє таби — налаштуй його.

2. Неправильна кількість пробілів

services:
    web:        # 4 пробіли
      image:    # 6 пробілів — все ще дочірній до web, але незрозуміло

Краще фіксувати 2 пробіли на рівень і дотримуватися цього.

3. Забутий пробіл після двокрапки

image:nginx    # ❌ Помилка
image: nginx   # ✅ Правильно

4. Не екранувати спеціальні символи

title: "Це: важливо"    # ✅ Лапки зберігають двокрапку
command: >-              # ✅ Багаторядковий блок
  nginx
  -c /etc/nginx/nginx.conf

Висновок / план дії

YAML — не складний, але вимагає точності. Пробіли мають значення, і це одночасно його сила (читабельність) і слабкість (помилки).

Що зробити:

  1. Відкрий docker-compose.yml або .github/workflows/test.yml і прочитай його рядок за рядком.
  2. Зверни увагу на відступи: кожна вкладена структура має більше пробілів.
  3. Спробуй написати простий YAML-файл і перевірити його через онлайн-валідатор.
  4. Переконайся, що редактор вставляє пробіли, а не таби.

Якщо ти зможеш читати YAML без підказок — ти розумієш більше конфігурацій, ніж думаєш.

Короткий чеклист

  • Створи файл test.yml з кількома ключами і списками.
  • Перевір його через YAML-валідатор: python3 -c 'import yaml; yaml.safe_load(open("test.yml"))'.
  • Порівняй той самий об'єкт у JSON і YAML — подивися на різницю.
  • Відкрий docker-compose.yml або GitHub Actions workflow — спробуй прочитати його без підказок.

Prompt Pack: прочитати і написати YAML

Я бачу YAML-файли в Docker Compose, GitHub Actions і Kubernetes, але не розумію правила формату. Вхідні дані: - для чого потрібен YAML (Docker Compose, CI/CD, конфігурація застосунку); - рівень досвіду з конфігураційними файлами. Поверни результат у форматі: 1. основні правила синтаксису YAML; 2. приклади: ключі, списки, вкладені структури, багаторядкові тексти; 3. типові помилки і як їх уникнути; 4. чим YAML кращий і гірший за JSON.