DockerやGitHub Actionsの設定ファイルを開いたとき、.ymlという拡張子のファイルを見かけます。これがYAMLです。JSONに似た役割を持ちながら、人間が書きやすい文法で設計されたデータ形式です。

この記事ではYAMLの基本的な書き方と、よく比較されるJSONとの違いをわかりやすく解説します。

YAMLとは?

YAML(ヤムル)は YAML Ain't Markup Language の略で、設定ファイルやデータの記述に使われるフォーマットです。

JSONと同じく、文字列・数値・リスト・オブジェクトを表現できます。違いはJSONが{ }[ ]でデータを囲むのに対し、YAMLはインデント(字下げ)と改行で構造を表します。そのため、記号が少なく視覚的に読みやすいのが特徴です。

YAMLの基本的な書き方

JSONとYAMLの比較

同じデータをJSON形式とYAML形式で書くと次のようになります。

// JSON
{
  "name": "田中太郎",
  "age": 28,
  "skills": ["JavaScript", "Python"],
  "active": true
}
# YAML
name: 田中太郎
age: 28
skills:
  - JavaScript
  - Python
active: true

YAMLのほうが記号が少なく、一目で構造が把握しやすいのがわかります。

データ型の書き方

  • 文字列:クォートなしでもOK。スペースや特殊文字がある場合は"で囲む
  • 数値:そのまま書く。age: 28
  • 真偽値true / false(小文字)
  • nullnull または空欄
  • リスト(配列):行頭に- (ハイフン+スペース)
  • マップ(オブジェクト)key: valueの形式

ネスト(入れ子)の書き方

user:
  name: 田中太郎
  address:
    city: 東京
    zip: 100-0001
  tags:
    - admin
    - editor

インデントはスペース2つが一般的です。タブは使えないので注意してください。

コメントの書き方

YAMLでは#でコメントを書けます。JSONにはコメント機能がないため、設定ファイルにメモを残したいときはYAMLが便利です。

# データベース設定
database:
  host: localhost
  port: 5432  # デフォルトポート
  name: myapp

複数行のテキスト

# | を使うと改行を保持
description: |
  1行目
  2行目

# > を使うと改行をスペースに変換
summary: >
  長い文章を
  折り返して書ける

YAMLが使われている代表的なツール

  • Docker Composedocker-compose.ymlでコンテナ構成を定義
  • GitHub Actions.github/workflows/*.ymlでCIパイプラインを記述
  • Kubernetes:リソースの定義ファイルにYAMLを使用
  • Ansible:インフラ構成の自動化にYAMLを使用

よくある質問(FAQ)

YAMLとJSONはどちらを使えばいいですか?
人間が手で編集する設定ファイルにはYAMLが向いています(コメントが書け、記号が少ない)。プログラム間でデータをやり取りするAPIレスポンスやデータ保存にはJSONが一般的です。
タブとスペースの違いで壊れてしまいます
YAMLはタブを使えません。インデントには必ずスペースを使います。エディタで「タブをスペースに変換」する設定を有効にしておくと防げます。インデントの深さは統一していれば2でも4でも構いません。
YAMLファイルをJSONに変換できますか?
変換できます。YAML→JSON・JSON→YAMLの相互変換はツールで簡単に行えます。APIでJSONしか受け付けないサービスに、YAMLで書いた設定をそのまま貼り付けたいときに役立ちます。
yesonがtrueになってしまいます
YAML 1.1の仕様ではyes/no/on/offが自動的にtrue/falseに変換されます。これを避けるには"yes"のようにクォートで囲んでください。YAML 1.2ではこの挙動は廃止されています。

まとめ

  • YAMLはインデントで構造を表すデータ形式で、設定ファイルによく使われる
  • JSONより記号が少なく、コメントも書けるため人間が読み書きしやすい
  • インデントはスペースのみ(タブ不可)、2スペースが一般的
  • Docker・GitHub Actions・Kubernetesなどで広く採用されている

YAMLとJSONを相互変換したいときは、以下のツールをご利用ください。