「YAML(ヤムル)って何?」
「JSONは知ってるけどYAMLの書き方がよく分からない…」
「Docker Composeで使うけど、いつもコピペで済ませている」
こんな疑問やモヤモヤを抱えていませんか?
YAMLは、プログラムの設定ファイルやデータ定義でよく使われるフォーマットです。特にDocker ComposeやKubernetesの設定など、インフラやDevOpsを触るなら避けて通れません。
この記事では、そんなYAMLの基本構文を中心に、初心者の方でもすぐに書けるようにわかりやすく解説します。
YAMLとは?まずは簡単な説明から

YAMLってどんなもの?
YAMLは「YAML Ain’t Markup Language」の略で、日本語にすると「YAMLはマークアップ言語じゃないんだよ」という少しユーモアのある名前です。
データの階層(構造)を見やすく書くためのフォーマットで、JSONと同じようにデータを表現しますが、人間にとても読みやすいのが特徴です。
JSONとYAMLの比較
同じデータをJSONとYAMLで表現してみましょう:
JSON形式
{
"name": "山田太郎",
"age": 30,
"hobbies": ["読書", "映画鑑賞", "プログラミング"],
"address": {
"city": "東京",
"zip": "100-0001"
}
}
YAML形式
name: 山田太郎
age: 30
hobbies:
- 読書
- 映画鑑賞
- プログラミング
address:
city: 東京
zip: 100-0001
YAMLの方が、カッコや引用符が少なくて読みやすいですね。
どこで使われている?
YAMLは以下のような場面で広く使われています:
- Docker Compose の
docker-compose.yml
- Kubernetes の
deployment.yml
- CI/CDツール(GitHub Actionsなど)のワークフロー定義
- Ansible の設定ファイル
- Spring Boot のapplication.yml
- 静的サイトジェネレーター(JekyllやHugo)の設定
プログラマーだけでなく、サーバーエンジニアや自動化スクリプトを扱う人には欠かせません。
YAMLの基本構文
キーと値(Key-Value)
YAMLの最もシンプルな形は「キー: 値」です。
name: 山田太郎
age: 30
email: yamada@example.com
is_student: false
score: 85.5
重要なポイント
- コロン(:)の後には必ずスペースが必要
- 文字列は引用符なしでも書ける
- 数値、真偽値(true/false)、小数点も使える
配列(リスト)
複数の値は -
(ハイフン)で表します。
fruits:
- りんご
- バナナ
- ぶどう
# 一行で書く方法もあります
colors: [赤, 青, 緑]
書き方のコツ
- ハイフンの後にスペースを入れる
- インデントを揃える(推奨は2スペース)
- 短いリストなら一行形式も使える
ネスト(階層構造)
データを階層的に管理する場合、インデント(スペース2つ推奨)で表します。
person:
name: 山田太郎
age: 30
address:
city: 東京
zip: 100-0001
country: 日本
contact:
phone: 090-1234-5678
email: yamada@example.com
階層の作り方
- 子要素は親要素より深くインデント
- 同じレベルの要素は同じインデント幅
- 一般的には2スペースまたは4スペース
配列の中にオブジェクト
実際のプロジェクトでよく使う、配列の中にオブジェクトを含む書き方です:
users:
- name: 山田太郎
age: 30
role: admin
- name: 田中花子
age: 25
role: user
- name: 佐藤次郎
age: 35
role: moderator
よくあるミスと注意点
タブ文字は使用禁止
YAMLはタブ文字をエラーにする仕様です。必ずスペースを使ってください。
# NG: タブでインデント
name: 山田太郎
# OK: スペースでインデント
name: 山田太郎
対処法
- エディタの設定でタブをスペースに変換
- VS Codeなら「表示」→「空白文字の表示」で確認
コロンの後のスペース忘れ
次のように書くとエラーになります:
# NG: スペースなし
name:山田太郎
# OK: スペースあり
name: 山田太郎
インデントの不整合
同じレベルの要素は同じインデント幅にする必要があります:
# NG: インデントがバラバラ
person:
name: 山田太郎
age: 30
email: test@example.com
# OK: インデントが揃っている
person:
name: 山田太郎
age: 30
email: test@example.com
特殊文字の扱い
以下の文字を含む場合は引用符で囲みます:
# 特殊文字を含む場合
command: "echo Hello:World"
path: "C:\\Users\\Documents"
message: 'これは"引用"を含みます'
# 複数行の文字列
description: |
これは複数行の
文字列です。
改行も保持されます。
summary: >
これは長い文章を
一行にまとめて
表示したい場合です。
特殊文字一覧
: { } [ ] , & * # | > ' " % @ \
実践的な使用例

Docker Composeの例
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
environment:
- DEBUG=true
- DATABASE_URL=sqlite:///db.sqlite3
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
GitHub Actionsの例
name: CI/CD Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Run tests
run: pytest
Kubernetesの例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
YAML作成時のベストプラクティス
エディタの設定
VS Code推奨拡張機能
- YAML Language Support
- YAML Sort
- Prettier(フォーマッター)
設定例
{
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.detectIndentation": false,
"[yaml]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
バリデーション(検証)
オンラインツール
- YAML Lint(yamlint.com)
- JSON to YAML Converter
コマンドラインツール
# yamllintのインストール
pip install yamllint
# ファイルの検証
yamllint config.yml
ファイル名の命名規則
一般的な命名パターン:
config.yml
またはconfig.yaml
docker-compose.yml
deployment.yaml
.github/workflows/ci.yml
どちらの拡張子(.yml / .yaml)でも機能しますが、プロジェクト内では統一しましょう。
トラブルシューティング
よくあるエラーメッセージ
「found character that cannot start any token」
原因: タブ文字を使用している 解決法: すべてスペースに置き換える
「mapping values are not allowed here」
原因: コロンの後のスペース忘れ 解決法: :
のようにスペースを追加
「could not find expected ‘:’」
原因: インデントの不整合 解決法: 同じレベルの要素を同じインデント幅に揃える
デバッグのコツ
- 段階的に確認: 小さな部分から始めて徐々に拡張
- バリデーターの活用: オンラインツールで構文チェック
- エディタの支援機能: 構文ハイライトとエラー表示を活用
さらに学習を深めるために

応用的な機能
アンカーとエイリアス(参照)
# アンカーの定義
defaults: &defaults
timeout: 30
retries: 3
# アンカーの使用
production:
<<: *defaults
host: prod.example.com
staging:
<<: *defaults
host: staging.example.com
環境変数の使用
database:
host: ${DB_HOST}
port: ${DB_PORT:-5432} # デフォルト値付き
name: ${DB_NAME}
次のステップ
YAMLの基本をマスターしたら、以下の分野に挑戦してみましょう:
- Docker Compose: 複数のサービスを組み合わせたアプリケーション
- Kubernetes: コンテナオーケストレーション
- CI/CD: 自動化されたビルドとデプロイ
- Infrastructure as Code: TerraformやAnsible
まとめ
YAMLの基本構文をマスターするポイントは以下の通りです:
基本構文
- キー: 値の形式
- ハイフン(-)でリスト表現
- インデントで階層構造
注意点
- タブ文字は使用禁止(スペースのみ)
- コロンの後には必ずスペース
- インデントを正確に揃える
- 特殊文字は引用符で囲む
実践的なアドバイス
- エディタの拡張機能を活用
- オンラインバリデーターで構文チェック
- 小さな例から始めて徐々に複雑化
コメント