Si vous travaillez avec Docker, Kubernetes, GitHub Actions ou à peu près n'importe quel outil DevOps moderne, vous utilisez déjà YAML, que vous le réalisiez ou non. YAML (qui signifie « YAML Ain't Markup Language » — oui, c'est un acronyme récursif) a été conçu pour être le format de données le plus lisible possible par l'homme.

Apprenons-le ensemble, un concept à la fois.

Pourquoi YAML existe

JSON est super pour les machines, mais avez-vous déjà essayé d'écrire un fichier de configuration de 200 lignes en JSON ? Pas de commentaires, des guillemets doubles obligatoires partout, des accolades imbriquées sur cinq niveaux... ça devient vite pénible. YAML a été créé pour résoudre ce problème. Il utilise l'indentation au lieu des accolades, ce qui rend les configurations propres et faciles à parcourir.

Voici les mêmes données en JSON et en YAML. Voyez la différence ?

JSON :

json

YAML :

yaml

Les bases à connaître

Les paires clé-valeur sont le pain quotidien de YAML. Utilisez simplement deux-points et un espace : name: John Doe. C'est tout — pas besoin de guillemets pour la plupart des chaînes.

L'indentation est primordiale. YAML utilise des espaces (jamais de tabulations !) pour montrer la structure. Le standard est de 2 espaces par niveau. Si vous vous trompez, votre fichier ne marchera plus. Sérieusement — la spécification YAML est stricte là-dessus.

Voici un exemple de données imbriquées :

yaml

Les listes utilisent un tiret et un espace. Voici une liste de courses en YAML :

yaml

Les chaînes : plus piégeuses qu'on ne le pense

La plupart des chaînes n'ont pas besoin de guillemets en YAML. Mais vous devriez les utiliser quand elles contiennent des deux-points, des dièses ou pourraient être mal interprétées. Par exemple, country: NO est interprété comme country: false en YAML 1.1 car NO est traité comme un booléen. C'est le fameux « problème de la Norvège » et il a causé de vrais bugs en production.

En cas de doute, mettez des guillemets : country: "NO"

Les chaînes multi-lignes sont géniales

C'est là que YAML brille vraiment. Le pipe | préserve les retours à la ligne (idéal pour les scripts), tandis que > les replie en espaces (idéal pour les longues descriptions) :

yaml
yaml

Ancres et alias : des fichiers de config DRY

L'une des fonctionnalités les plus cool de YAML. Définissez quelque chose une fois avec &, référencez-le plus tard avec * :

yaml

Le bloc production hérite de retries: 3 des valeurs par défaut mais remplace timeout. C'est incroyablement utile dans les workflows GitHub Actions et les fichiers Docker Compose où vous répéteriez sinon les mêmes blocs de configuration encore et encore.

Les 4 erreurs YAML les plus courantes

  • Des tabulations au lieu d'espaces — Votre éditeur pourrait insérer des tabulations par défaut. Configurez-le pour utiliser des espaces dans les fichiers YAML. Sérieusement, faites-le maintenant.
  • Pièges booléensyes, no, on, off, true, false sont TOUS des booléens en YAML 1.1. Mettez des guillemets si vous voulez la chaîne de caractères.
  • Deux-points dans les valeursmessage: Error: file not found cassera parce que YAML voit un second séparateur clé-valeur. Utilisez des guillemets : message: "Error: file not found"
  • Espaces de fin de ligne — Des espaces invisibles en fin de ligne peuvent causer des comportements d'analyse étranges. Utilisez un éditeur qui met en évidence les espaces de fin de ligne.

Où vous utiliserez YAML au quotidien

YAML est le langage de configuration pour Docker Compose, les manifestes Kubernetes, GitHub Actions, GitLab CI, les playbooks Ansible et des dizaines d'autres. Si vous faites quoi que ce soit en DevOps ou dans le cloud, la maîtrise de YAML est incontournable.

Un fichier YAML qui se comporte bizarrement ? Collez-le dans notre YAML Validator pour repérer le problème instantanément.

YAML dans la pratique : Exemple Docker Compose

Regardons un fichier Docker Compose réaliste — le genre de chose que vous écririez vraiment pour une application web :

yaml

Remarquez quelques choses : les variables d'environnement peuvent être écrites sous forme de liste (- KEY=value) ou de mappage (KEY: value). Les deux fonctionnent dans Docker Compose — mais choisissez un style et restez cohérent.

YAML dans la pratique : Pipeline CI GitHub Actions

Voici un workflow GitHub Actions qui exécute les tests à chaque push :

yaml

C'est propre, lisible et auto-explicatif. Imaginez écrire ce même workflow en JSON — il serait deux fois plus long et beaucoup plus difficile à parcourir visuellement.

YAML vs JSON vs TOML : Comparaison rapide

YAML n'est pas la seule alternative à JSON pour les fichiers de configuration. TOML est un autre choix populaire (utilisé par Cargo.toml de Rust et pyproject.toml de Python). Voici comment ils se comparent :

FonctionnalitéYAMLJSONTOML
CommentairesOui (#)NonOui (#)
LisibilitéExcellenteBonneTrès bonne
Structures imbriquéesIndentationAccoladesSections/points
Chaînes multi-lignesOui (`, >`)NonOui (""")
Inférence de typeOui (peut être dangereux)ExpliciteOui (plus sûr)
Virgules finalesN/ANon autoriséesAutorisées
ÉcosystèmeDevOps, K8s, CI/CDWeb APIs, Node.jsRust, Python

YAML avancé : Plusieurs documents dans un fichier

YAML supporte plusieurs documents dans un seul fichier, séparés par ---. C'est couramment utilisé dans Kubernetes pour déployer plusieurs ressources en une fois :

yaml

Le séparateur --- dit au parseur YAML « ceci est un nouveau document. » Vous pouvez faire kubectl apply -f sur un tel fichier et Kubernetes créera les deux ressources.

Sécurité YAML : L'attaque Billion Laughs

Voici quelque chose que la plupart des débutants ne savent pas : YAML peut être un risque de sécurité si vous n'êtes pas prudent. L'attaque « Billion Laughs » utilise les ancres et alias pour créer une expansion exponentielle des données :

yaml

Ce minuscule fichier peut s'étendre à des gigaoctets en mémoire et faire planter votre application. La leçon ? Ne parsez jamais des entrées YAML non fiables. Utilisez des fonctions de chargement sûres comme yaml.safe_load() en Python au lieu de yaml.load(), et définissez des limites de mémoire sur votre parseur YAML.

Convertir entre YAML et JSON

Puisque YAML est un sur-ensemble de JSON (oui, du JSON valide est aussi du YAML valide !), la conversion entre les deux est simple. C'est utile quand vous voulez utiliser la lisibilité de YAML pour écrire des configurations mais avez besoin de JSON pour une API ou un outil qui l'exige.

Notre Convertisseur YAML vers JSON gère cela instantanément — collez simplement votre YAML et obtenez une sortie JSON propre. Dans l'autre sens ? Tout JSON que vous avez est déjà du YAML valide.

Essayez par vous-même

Que vous déboguiez un manifeste Kubernetes cassé ou que vous configuriez un nouveau pipeline CI, ces outils vous feront gagner du temps :

  • YAML Formatter — Corrigez l'indentation et rendez vos fichiers YAML propres et cohérents.
  • YAML Validator — Détectez les erreurs de syntaxe avant qu'elles ne cassent votre déploiement.
  • Convertisseur YAML vers JSON — Convertissez entre les formats quand vous devez interopérer avec des outils JSON uniquement.

YAML a ses particularités, mais une fois que vous serez à l'aise avec la syntaxe basée sur l'indentation, vous apprécierez à quel point vos fichiers de configuration sont plus propres comparés à l'alternative JSON.