
En bref
|
Un fichier YAML est un fichier en texte brut qui stocke des paramètres et d’autres informations structurées dans un format lisible à la fois par les humains et par les programmes. Il utilise l’indentation et une ponctuation simple, comme les deux-points et les tirets, pour montrer comment les éléments d’information s’articulent entre eux.
Tu rencontreras généralement le YAML lorsqu’un outil te demandera de le configurer : un pipeline de déploiement, une configuration de conteneur ou une plateforme d’hébergement. Ce guide explique comment le YAML est structuré, te présente des exemples concrets et passe en revue les quelques erreurs à l’origine de la plupart des fichiers YAML défectueux.
Point clé : YAML est l’un des formats les plus courants pour les fichiers de configuration dans les outils de développement, car on peut le lire et le modifier sans logiciel spécifique.
Son nom est un jeu de mots récursif : YAML signifie « YAML Ain't Markup Language » (YAML n'est pas un langage de balisage). L'idée, c'est que YAML décrit des données, comme des paramètres, des listes et des options, plutôt que de mettre en forme un document comme le fait le HTML.
Tu trouveras des fichiers YAML dans de nombreux outils que les développeurs utilisent au quotidien :
| Outil | Rôle du fichier YAML | Nom de fichier typique |
|---|---|---|
| GitHub Actions | Définit des processus automatisés, comme l'exécution de tests à chaque modification | .github/processus/test.yml |
| Docker Compose | Décrit plusieurs conteneurs qui s'exécutent ensemble sur ton ordinateur | compose.yaml |
| Kubernetes | Décrit les conteneurs, les réseaux et le stockage dont une application a besoin | Tout nom se terminant par .yaml ou .yml |
| Upsun Cloud | Décrive les applications, les services et les routes d'un projet en un seul endroit | .upsun/config.yaml |
Les fichiers de configuration sont bien plus souvent lus et modifiés que créés à partir de zéro, c’est là qu’un format lisible prend tout son sens. Les fichiers YAML côtoient souvent d’autres fichiers de configuration dans un projet, comme un fichier .env qui contient des secrets. Notre guide « Qu’est-ce que .env ? » aborde ce sujet.
Point clé : presque tous les fichiers YAML sont constitués de paires clé-valeur, d’indentation pour l’imbrication et de tirets pour les listes.
Voici un petit fichier YAML pour une application web fictive. Chaque partie est expliquée ci-dessous.
# Settings for a small web app
app_name: recipe-finder
port: 8080
debug: false
database:
host: localhost
name: recipes
features:
- search
- favorites
- shopping-list
welcome_message: |
Welcome to Recipe Finder.
Search by ingredient to get started.| Extrait | Exemple tiré du fichier | Ce que ça veut dire |
|---|---|---|
| Commentaire | # Paramètres d'une petite application web | Une note à l'attention des utilisateurs. Tout ce qui suit le signe # est ignoré. |
| Clé et valeur | app_name: recipe-finder | Un nom de paramètre, deux points, un espace, puis sa valeur. |
| Nombre | port : 8080 | YAML interprète les valeurs qui ressemblent à des nombres comme des nombres. |
| Vrai ou faux | debug : false | Les valeurs comme « true » et « false » sont interprétées comme des commutateurs « activé » et « désactivé ». |
| Groupe imbriqué | database : avec deux lignes en retrait en dessous | Les lignes en retrait appartiennent à la clé qui se trouve au-dessus d'elles ; ainsi, « host » et « name » font tous deux partie de « database ». |
| Liste | - recherche | Chaque ligne commençant par un tiret suivi d'un espace correspond à un élément de la liste. |
| Texte sur plusieurs lignes | message_de_bienvenue : | | Le signe « | » permet de conserver les sauts de ligne dans le texte qui suit. |
En général, le texte n'a pas besoin de guillemets, mais tu peux en mettre (simples ou doubles) autour de n'importe quelle valeur. Les guillemets permettent d'indiquer à YAML de traiter un élément comme du texte alors qu'il ressemble à un nombre ou à un commutateur (voir la section « Erreurs » ci-dessous).
C'est l'indentation qui définit la structure. Une ligne en retrait sous une clé appartient à cette clé, et les lignes ayant le même niveau d'indentation sont des éléments frères. Tu peux choisir le nombre exact d'espaces, à condition que chaque niveau soit cohérent. On utilise souvent deux espaces par niveau.
Point clé : YAML et JSON peuvent contenir les mêmes informations. YAML est plus facile à lire et à modifier pour les humains, tandis que JSON est plus strict et plus couramment utilisé pour les données échangées entre programmes.
JSON est un autre format texte pour les données structurées, très utilisé par les sites web et les API. Voici la même configuration d’application que ci-dessus, écrite en JSON :
{
"app_name": "recipe-finder",
"port": 8080,
"debug": false,
"database": {
"host": "localhost",
"name": "recipes"
},
"features": ["search", "favorites", "shopping-list"],
"welcome_message": "Welcome to Recipe Finder.\nSearch by ingredient to get started.\n"
}| YAML | JSON | |
|---|---|---|
| Structure indiquée par | Indentation | Accolades et crochets |
| Commentaires | Autorisés, avec # | Pas autorisé |
| Guillemets autour du texte | Généralement facultatives | Toujours obligatoires |
| Texte sur plusieurs lignes | Intégré, avec | | Nécessite \n pour chaque saut de ligne |
| Principal inconvénient | Facile à perturber par un espace superflu | Difficile à lire et à modifier à la main |
| Utilisation typique | Fichiers de configuration que les gens modifient | Données échangées entre programmes |
Ces deux aspects sont étroitement liés. YAML 1.2, la version actuelle de la spécification YAML, a été conçue pour que le JSON soit un YAML valide. C'est pourquoi certains outils acceptent les deux formats pour un même fichier.
Point clé : la plupart des problèmes YAML sont des erreurs d’indentation ou d’espacement, et les pires ne génèrent aucune erreur. Le fichier se charge, mais il interprète quelque chose de différent de ce que tu as écrit.
Il existe deux types d’erreurs YAML. Certaines empêchent le chargement du fichier et affichent un message d’erreur, ce qui est agaçant mais facile à repérer. D’autres se chargent sans problème et modifient discrètement tes paramètres, si bien que l’application fonctionne avec des valeurs que tu n’avais pas l’intention de définir. Dans la mesure du possible, chaque erreur ci-dessous présente d’abord la version erronée, puis la correction.
YAML n’autorise pas les tabulations pour l’indentation. Une seule tabulation, souvent ajoutée par un éditeur sans que tu t’en rendes compte, empêche le chargement de tout le fichier.
Solution : configure ton éditeur pour qu’il insère des espaces quand tu appuies sur la touche Tab. La plupart des éditeurs de code proposent ce paramètre, et beaucoup l’appliquent automatiquement aux fichiers YAML.
Si une ligne se retrouve un niveau trop à gauche, elle ne fait plus partie du groupe qui la précède. YAML l'interprète comme un paramètre distinct, sans signaler d'erreur.
# Broken: name is no longer part of database
database:
host: localhost
name: recipes
# Fixed
database:
host: localhost
name: recipesUne ligne indentée d’un espace de trop génère généralement une erreur, souvent formulée ainsi : « les valeurs de mappage ne sont pas autorisées ici ». Si tu vois ce message, vérifie l’indentation de la ligne en question et de celle du dessus.
YAML a besoin d'un espace après les deux-points dans « clé : valeur » et après le tiret dans un élément de liste. Sans ça, YAML considère ça comme du texte ordinaire.
# Broken: read as one line of text, not a list
features:
-search
-favorites
# Fixed
features:
- search
- favoritesUn deux-points suivi d’un espace à l’intérieur d’une valeur perturbe YAML, car cela ressemble au début d’un nouveau paramètre.
# Broken: fails to load
message: Note: restart the app after changes
# Fixed
message: "Note: restart the app after changes"YAML devine le type de valeur que tu veux dire, et il lui arrive parfois de se tromper. Voici les surprises classiques :
| Tu as écrit | Tu voulais dire | Ce que YAML risque d’interpréter |
|---|---|---|
| version : 1.10 | Version un point dix | Le nombre 1,1 |
| code_postal : 01234 | Un code commençant par un zéro | Un nombre qui supprime le zéro initial ou change complètement la valeur |
| Pays : NO | Norvège | La valeur « false », dans les outils qui suivent les anciennes règles YAML 1.1 |
| réponse : oui | Le mot « oui » | La valeur « true », dans ces mêmes anciens outils |
Solution : mets des guillemets autour de toute valeur qui doit rester sous forme de texte, comme version: « 1.10 » ou country: « NO ». N'utilise pas de guillemets pour les valeurs qu'un outil attend sous forme de nombres réels ou de booléens (true et false), comme un numéro de port.
Si la même clé apparaît deux fois au même niveau, de nombreux outils conservent la dernière valeur et ignorent la première sans te prévenir. Les outils plus stricts s'arrêtent alors en affichant une erreur.
port: 8080
# ...many lines later
port: 9090L'application tourne sur le port 9090, et la première ligne est ignorée sans avertissement. Dans un fichier long, cherche la clé avant de l'ajouter.
Point clé : laisse un outil vérifier ton YAML. Une extension d’éditeur détecte les erreurs au fur et à mesure que tu tapes, et un validateur vérifie l’intégralité du fichier avant que tu ne t’en serves.
Il existe trois méthodes courantes pour vérifier un fichier YAML, de la plus simple à la plus approfondie :
Les validateurs YAML en ligne fonctionnent aussi, mais fais attention à ce que tu y colles. Les fichiers de configuration contiennent parfois des mots de passe ou des adresses internes, et ceux-ci ne doivent pas être saisis sur un site web que tu ne contrôles pas.
Si le fichier a été rédigé par un assistant IA, vérifie-le de la même manière. Le YAML généré par l’IA a souvent une syntaxe valide, il se charge donc sans erreur. Les erreurs se trouvent plutôt dans le contenu : un nom de paramètre que l’outil ne reconnaît pas, une option issue d’une ancienne version de l’outil, ou une valeur placée au mauvais niveau. C’est le vérificateur propre à l’outil, l’option 3 ci-dessus, qui a le plus de chances de les détecter.
Point clé : Upsun Cloud décrit l’intégralité d’un projet dans un seul fichier YAML, .upsun/config.yaml, et son outil en ligne de commande permet de vérifier ce fichier avant le déploiement.
Sur Upsun Cloud, les applications que tu exécutes, les services qu’elles utilisent (comme une base de données) et les adresses web qui y donnent accès sont tous regroupés dans un seul fichier YAML. Il se trouve dans un dossier appelé .upsun à la racine de ton projet. La commande upsun project:init crée une version de départ basée sur le code qu’elle détecte.
Voici un petit exemple : une application Node.js connectée à une base de données PostgreSQL.
applications:
myapp:
type: "nodejs:26"
relationships:
database:
web:
commands:
start: "node index.js"
services:
database:
type: "postgresql:17"
routes:
"https://{default}/":
type: upstream
upstream: "myapp:http"Voici ce que fait chaque partie :
Les erreurs courantes mentionnées plus haut s’appliquent ici aussi. Une indentation mal placée peut faire sortir les relations de la section « myapp ». Les guillemets dans cet exemple sont facultatifs, mais mettre entre guillemets les valeurs contenant des deux-points ou des accolades est une bonne habitude à prendre.
Pour vérifier le fichier avant de le pousser, lance la commande `upsun app:config-validate` dans le dossier de ton projet. Ça valide les fichiers de configuration de ton projet, ce qui permet de repérer les erreurs sur ta machine avant le déploiement. Si un agent de codage modifie ce fichier pour toi, demande-lui d’exécuter la même commande après chaque modification. Notre guide « Qu’est-ce qu’un fichier AGENTS.md ? » explique comment rédiger cette instruction une seule fois pour que tous les agents la respectent. Tu peux également connecter ton éditeur au schéma publié par Upsun Cloud, afin qu’il te suggère des paramètres valides et signale les erreurs au fur et à mesure que tu tapes. Le Centre de développement Upsun explique comment configurer cela.
Pour connaître tout ce que ce fichier peut contenir, consulte la section « YAML sur Upsun Cloud » dans la documentation d’Upsun.
Sur Upsun Cloud, ce fichier unique décrit l’ensemble de ton projet, et chaque environnement est construit à partir de celui-ci. Tu peux déployer gratuitement sur Upsun Cloud pendant 15 jours, sans avoir besoin d’une carte bancaire, ou découvrir comment l’automatisation pilotée par Git transforme les modifications de configuration en déploiements.
YAML signifie « YAML Ain't Markup Language ». Ce nom souligne le fait que YAML sert à décrire des données, telles que des paramètres et des listes, plutôt qu'à mettre en forme des documents.
Aucune. Les deux extensions désignent le même format. Certains outils exigent l’une ou l’autre, alors utilise celle indiquée dans la documentation de l’outil.
Non. YAML n'autorise que les espaces pour l'indentation. Configure ton éditeur pour qu'il insère des espaces quand tu appuies sur la touche Tab.
N'importe quel nombre convient, tant que chaque niveau est cohérent. Deux espaces par niveau est un choix courant.
Cette erreur signifie généralement qu’une ligne est indentée différemment de ses voisines, ou qu’une valeur contient un deux-points suivi d’un espace. Vérifie l’indentation de la ligne indiquée par l’erreur, et mets entre guillemets toute valeur contenant un deux-points.
Aucun des deux n’est meilleur en général. Le YAML est plus facile à lire et à modifier pour les humains, ce qui convient bien aux fichiers de configuration. Le JSON est plus strict et plus simple à générer pour les programmes, ce qui convient bien aux données échangées entre les systèmes.
N'importe quel éditeur de texte peut l'ouvrir, car un fichier YAML est du texte brut. Un éditeur de code prenant en charge l'extension YAML facilite la lecture et permet de repérer plus facilement les erreurs.