alltools.one
YAML
2025-07-06
8 min
alltools.one Team
YAMLSyntaxConfigurationDevOps

YAMLシンタックスチュートリアル:実践的な入門ガイド

YAML(YAML Ain't Markup Language)は、設定ファイル、CI/CDパイプライン、Infrastructure as Codeで広く使用されている、人間が読みやすいデータシリアライゼーションフォーマットです。Docker Compose、Kubernetes、GitHub Actions、Ansibleを使っているなら、すでに毎日YAMLを使っています。このチュートリアルでは、YAMLを自信を持って書くために必要なすべてを解説します。

なぜYAMLなのか?

YAMLの最大の利点は可読性です。同じデータをJSONとYAMLで比較してみましょう:

JSON:

{
  "server": {
    "host": "localhost",
    "port": 8080,
    "debug": true,
    "allowed_origins": ["http://localhost:3000", "https://example.com"]
  }
}

YAML:

server:
  host: localhost
  port: 8080
  debug: true
  allowed_origins:
    - http://localhost:3000
    - https://example.com

YAMLは少ない記号で同じ構造を表現できます。波括弧なし、シンプルなケースでは角括弧なし、必須の引用符もなし。これにより、設定ファイルが読みやすく、手動での編集も容易になります。

基本データ型

スカラー

YAMLは値から型を自動的に推論します:

string: hello world          # 文字列(引用符不要)
quoted: "hello world"        # 明示的な文字列
integer: 42                  # 整数
float: 3.14                  # 浮動小数点数
boolean: true                # ブール値(true/false, yes/no, on/off)
null_value: null             # Null(~ や空値も可)
date: 2025-01-15             # 日付(ISO 8601)

よくある落とし穴yesnoonoff のような値はブール値として解釈されます。文字列としての "yes" を意味する場合は、引用符で囲みましょう:"yes"

文字列と引用符

文字列に引用符が必要になることはまれですが、いくつかのケースでは必要です:

plain: This is a plain string
single: 'Preserves \n as literal backslash-n'
double: "Interprets \n as newline"
colon: "value: with colon needs quotes"
hash: "value # with hash needs quotes"

複数行文字列

YAMLには2つの複数行スタイルがあります:

リテラルブロック(| — 改行を保持:

description: |
  This is line one.
  This is line two.
  
  This is line four (after blank line).

折りたたみブロック(> — 行をスペースで結合:

description: >
  This is a long paragraph
  that will be folded into
  a single line.

末尾の改行を除去するには - を追加(|->-)、保持するには + を追加(|+>+)します。

コレクション

リスト(シーケンス)

# ブロックスタイル
fruits:
  - apple
  - banana
  - cherry

# フロースタイル(インライン)
fruits: [apple, banana, cherry]

マップ(マッピング)

# ブロックスタイル
person:
  name: Alice
  age: 30
  city: London

# フロースタイル
person: {name: Alice, age: 30, city: London}

ネストされた構造

departments:
  - name: Engineering
    lead: Alice
    members:
      - Bob
      - Charlie
  - name: Design
    lead: Diana
    members:
      - Eve

アンカーとエイリアス

アンカー(&)とエイリアス(*)を使うと値を再利用できます:

defaults: &defaults
  adapter: postgres
  host: localhost
  port: 5432

development:
  database: dev_db
  <<: *defaults

production:
  database: prod_db
  <<: *defaults
  host: db.example.com  # デフォルトを上書き

<< マージキーはアンカーからすべてのプロパティを取り込みます。マージ後に定義されたプロパティは、アンカーの値を上書きします。高度なアンカーパターンについては、YAMLアンカーとエイリアスガイドをご覧ください。

複数ドキュメント

1つのYAMLファイルに --- で区切られた複数のドキュメントを含めることができます:

---
# Document 1: Config
apiVersion: v1
kind: ConfigMap
---
# Document 2: Service
apiVersion: v1
kind: Service

これはKubernetesマニフェストでよく使用されます。

よくある落とし穴

1. インデントエラー

YAMLはスペースを使用し、タブは使用しません。一貫性のないインデントが最もよくあるエラーです:

# 間違い - インデントが混在
server:
  host: localhost
    port: 8080  # エラー:予期しないインデント

# 正しい
server:
  host: localhost
  port: 8080

YAMLフォーマッターを使って、インデントの問題を自動的に修正できます。

2. ノルウェー問題

NO(ノルウェー)のような国コードはブール値の false として解釈されます:

# 間違い
countries:
  - NO  # falseとして解釈される!
  - SE
  - DK

# 正しい
countries:
  - "NO"
  - SE
  - DK

3. 引用符なしの特殊文字

値にコロン、ハッシュ、角括弧が含まれる場合は引用符が必要です:

# 間違い
message: Error: file not found
url: http://example.com  # 問題が発生する可能性あり

# 正しい
message: "Error: file not found"
url: "http://example.com"

4. バージョン番号の落とし穴

1.0 のようなバージョン番号は浮動小数点数として解析されます:

# 間違い
version: 1.0  # 1(浮動小数点数)になる

# 正しい
version: "1.0"  # 文字列

YAMLの検証

デプロイ前に必ずYAMLを検証しましょう。YAMLの構文エラーはアプリケーションで原因不明の障害を引き起こす可能性があります。YAMLバリデーターは、エラーの正確な行と列をハイライトして、構文を即座にチェックします。

YAMLとJSONの違いについてさらに詳しくは、YAML vs JSON比較をご覧ください。

FAQ

YAMLのインデントにはスペースをいくつ使うべきですか?

2スペースが最も一般的な規約で、Kubernetes、Docker Compose、GitHub Actions、およびほとんどのDevOpsツールで使用されています。4スペースを使用するプロジェクトもあります。重要なルールはファイル内での一貫性です — インデントレベルを混在させてはいけません。

YAMLにコメントを含めることはできますか?

はい、YAMLは # による単一行コメントをサポートしています。複数行コメントの構文はありません。コメントは解析時に除去され、読み込まれたデータ構造では利用できません。

関連リソース

Published on 2025-07-06
YAML Syntax Tutorial: A Practical Introduction | alltools.one