YAML : Fichiers de configuration sans l'encombrement
Pourquoi YAML est devenu le standard pour les fichiers de config et comment éviter ses pièges.
Chaque manifeste Kubernetes. Chaque workflow GitHub Actions. Chaque fichier Docker Compose.
YAML est partout pour la configuration. C'est lisible, c'est flexible, et ça a quelques bizarreries surprenantes.
Pourquoi YAML ?
JSON est strict : guillemets doubles, pas de commentaires, pas de virgules finales.
YAML est indulgent : syntaxe minimale, commentaires autorisés, lisible par l'humain.
# Configuration YAML
database:
host: localhost
port: 5432
name: myapp
{
"database": {
"host": "localhost",
"port": 5432,
"name": "myapp"
}
}
Mêmes données, moins de bruit en YAML.
Les bases
Paires clé-valeur :
name: John
age: 30
Structures imbriquées (utilise des espaces, pas des tabulations) :
person:
name: John
age: 30
Listes :
colors:
- red
- green
- blue
Listes et objets inline :
colors: [red, green, blue]
person: {name: John, age: 30}
Le problème de la Norvège
country: NO
Qu'est-ce que NO ? Un booléen false. YAML interprète NO, Yes, on, off et d'autres comme des booléens.
Le code pays de la Norvège devient false. Ta configuration casse de façons mystérieuses.
Solution : Mets entre guillemets les chaînes qui pourraient être interprétées comme booléens.
country: "NO"
Le problème des chaînes multi-lignes
description: This is a long
description that continues
Est-ce deux lignes ou une avec "that continues" indenté ? Dépend de l'analyseur YAML.
Multi-lignes explicites :
# Littéral (préserve les nouvelles lignes)
description: |
Line one
Line two
# Plié (joint les lignes)
description: >
This is one long
line when parsed
L'indentation est significative
Deux espaces. Pas de tabulations. Pas un espace. Pas trois.
# Correct
parent:
child: value
# Faux - caractère tabulation
parent:
child: value
Mélanger tabulations et espaces casse YAML silencieusement. Configure ton éditeur pour utiliser des espaces.
Interprétation des nombres
version: 1.10
Est-ce la chaîne "1.10" ou le nombre 1.1 ? La plupart des analyseurs l'interprètent comme 1.1.
Les maths à virgule flottante frappent à nouveau. Mets les numéros de version entre guillemets.
version: "1.10"
Ancres et alias
YAML peut référencer du contenu répété :
defaults: &defaults
timeout: 30
retries: 3
production:
<<: *defaults
timeout: 60
Puissant pour réduire la duplication. Confus quand exagéré.
Valider YAML
La flexibilité de YAML signifie que beaucoup de choses qui ont l'air valides ne le sont pas.
- Utilise un linter dans ton éditeur
- Valide contre un schéma quand possible
- Convertis en JSON pour voir ce que l'analyseur a réellement interprété
Si ta config ne fonctionne pas, vérifie ce que l'analyseur voit, pas ce que tu as écrit.
YAML vs JSON vs TOML
YAML : Lisible par l'humain, beaucoup de fonctionnalités, cas limites bizarres.
JSON : Strict, simple, largement supporté, verbeux.
TOML : Explicite, moins de surprises, gagne en popularité pour les configs.
Pour les données machine-à-machine, JSON est plus sûr. Pour les configs éditées par l'humain, YAML fonctionne si tu connais les pièges.
YAML privilégie la lisibilité sur la rigueur. Ce compromis crée des cas limites. Mets entre guillemets les chaînes qui ressemblent à des booléens ou nombres, utilise une syntaxe multi-lignes explicite, et valide avant le déploiement.