YAMLとは

YAML(YAML Ain’t Markup Language)は、人間が読みやすいデータ記述フォーマットです。JSONやXMLと同じ目的で使われますが、インデント(字下げ)で構造を表現するため、より直感的に読み書きできます。

現在、以下の場面で広く使われています:

  • Docker Composedocker-compose.yml
  • GitHub Actions.github/workflows/*.yml
  • Kubernetes — マニフェストファイル
  • CI/CD — CircleCI, GitLab CI, etc.
  • 設定ファイル — Prettier, ESLint, etc.

YAMLの基本構文

キーと値

name: assisty
version: 1.0
description: "無料Webツール集"

ネスト(階層構造)

server:
  host: localhost
  port: 3000
  ssl:
    enabled: true
    cert: /path/to/cert.pem

注意: インデントにはスペースのみ使用可能。タブ文字はエラーになります。

リスト(配列)

fruits:
  - apple
  - banana
  - cherry

複合構造

users:
  - name: 田中太郎
    age: 30
    roles:
      - admin
      - editor
  - name: 佐藤花子
    age: 25
    roles:
      - viewer

docker-compose.ymlの書き方

基本構造

version: "3.8"

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - api

  api:
    build: ./api
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

よく使うオプション

オプション説明
image使用するDockerイメージnginx:latest
buildDockerfileのパス./api
portsポートマッピング"3000:3000"
volumesボリュームマウント./data:/app/data
environment環境変数NODE_ENV=production
depends_on依存関係- db
restart再起動ポリシーalways

よくある構文エラーと直し方

1. タブ文字の使用

# ❌ エラー: タブ文字
server:
	port: 3000

# ✅ 正解: スペース(2つ or 4つ)
server:
  port: 3000

エディタの設定で「タブをスペースに変換」を有効にしましょう。

2. インデントの不一致

# ❌ エラー: インデントが揃っていない
services:
  web:
    image: nginx
     ports:
      - "80:80"

# ✅ 正解: 同じ階層は同じインデント
services:
  web:
    image: nginx
    ports:
      - "80:80"

3. コロン後のスペース忘れ

# ❌ エラー: コロン後にスペースがない
name:value

# ✅ 正解
name: value

4. 特殊文字のエスケープ忘れ

# ❌ エラー: コロンを含む値
description: Note: this is important

# ✅ 正解: クォートで囲む
description: "Note: this is important"

5. ブール値の意図しない変換

# ⚠️ "yes", "no", "on", "off" はブール値として解釈される
country: no      # false として解釈される!

# ✅ 正解: クォートで囲む
country: "no"    # 文字列 "no" として解釈される

YAML vs JSON

特徴YAMLJSON
可読性高い(インデント)中程度(括弧)
コメント# で記述可能不可
データ型自動推論明示的
用途設定ファイルAPI通信
学習コストやや高い低い

YAMLはJSONの上位互換です。有効なJSONは有効なYAMLとしても読めます。

ツールで構文チェック

YAMLの構文エラーは目視で見つけにくいことがあります。AssistyのYAML整形ツールを使えば、リアルタイムで構文チェックと整形ができます。JSON↔YAML の相互変換にも対応しています。

まとめ

  • YAMLはインデントで構造を表現する読みやすいフォーマット
  • Docker Compose、GitHub Actions、Kubernetesなどで広く使用
  • タブ文字禁止コロン後のスペース必須が基本ルール
  • 特殊文字やブール値に注意してクォートを使う
  • 構文チェックにはYAML整形ツールが便利

この記事の内容はAssistyYAML整形で実際にお試しいただけます。