# YAML クイックリファレンス

*スカラー、シーケンス、マッピング、アンカー、複数行*

> Source: YAML Specification (yaml.org) · MIT

## 構文

### 基本ルール

| Command | Description |
|---------|-------------|
| `Indentation` | スペースのみ（タブ不可）、深さを統一 |
| `#` | コメント（行末まで） |
| `---` | ドキュメント開始マーカー |
| `...` | ドキュメント終了マーカー |
| `Case sensitive` | キーと値は大文字・小文字を区別 |

### 最小限の例

```
---
name: Alice
age: 30
active: true
```

## スカラー

### スカラーの型

| Command | Description |
|---------|-------------|
| `hello` | 文字列（クォートなし） |
| `"hello"` | 文字列（ダブルクォート、エスケープ可） |
| `'hello'` | 文字列（シングルクォート、リテラル） |
| `42 / 3.14` | 数値（整数 / 浮動小数点） |
| `true / false` | ブール値 |
| `null / ~` | null 値 |
| `2026-03-26` | 日付（ISO 8601） |

### クォートのルール

```
plain: no quotes needed
special: "colon: and hash # need quotes"
escape: "line\nnewline"
literal: 'no \n escaping here'
```

## シーケンス

### ブロックシーケンス

```
fruits:
  - apple
  - banana
  - cherry
```

### フローシーケンス（インライン）

```
colors: [red, green, blue]
matrix: [[1, 2], [3, 4]]
```

### オブジェクトのシーケンス

```
users:
  - name: Alice
    role: admin
  - name: Bob
    role: user
```

## マッピング

### ブロックマッピング

```
server:
  host: localhost
  port: 8080
  debug: false
```

### フローマッピング（インライン）

```
point: {x: 10, y: 20}
```

### 複合キー

```
? [first, second]
: "compound key value"
```

## アンカーとエイリアス

### 定義と再利用

```
defaults: &defaults
  timeout: 30
  retries: 3
production:
  <<: *defaults
  timeout: 60
```

### 参照

| Command | Description |
|---------|-------------|
| `&name` | アンカーを定義 |
| `*name` | アンカーを参照（エイリアス） |
| `<<` | マージキー — マッピングを現在にマージ |

## 複数行文字列

### ブロックスカラー

| Command | Description |
|---------|-------------|
| `\| (literal)` | 改行をそのまま保持 |
| `> (folded)` | 改行をスペースに折りたたむ |
| `\|+ (keep)` | リテラル、末尾の改行を保持 |
| `\|- (strip)` | リテラル、末尾の改行を削除 |
| `>- (fold+strip)` | 折りたたみ、末尾の改行を削除 |

### リテラルブロック

```
script: |
  echo "line one"
  echo "line two"
```

### 折りたたみブロック

```
description: >
  This long text will be
  folded into a single line
  with spaces.
```

## タグ

### 型タグ

| Command | Description |
|---------|-------------|
| `!!str 42` | 値を文字列 "42" に強制 |
| `!!int "42"` | 値を整数 42 に強制 |
| `!!float 1` | 値を浮動小数点 1.0 に強制 |
| `!!bool "true"` | 値をブール値に強制 |
| `!!null ""` | 値を null に強制 |
| `!!binary` | Base64 エンコードされたバイナリデータ |

### タグの例

```
port: !!str 8080
enabled: !!bool "yes"
version: !!float 3
```

## よく使うパターン

### Docker Compose

```
services:
  web:
    image: nginx:alpine
    ports: ["80:80"]
    environment:
      NODE_ENV: production
```

### GitHub Actions

```
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
```

### ヒント

| Command | Description |
|---------|-------------|
| `yamllint` | 構文とスタイルの YAML リンター |
| `yq` | コマンドライン YAML プロセッサー（jq のような） |
| `Avoid Norway` | NO はブール値の false — 国コードはクォートで |
| `Avoid !!python` | 安全でないローダーで信頼できない YAML を読み込まない |
