【プログラミング】【設定】AMLファイルについて - j-komatsu/myCheatSheet GitHub Wiki

YAMLファイルについて

はじめに(初学者向け)

YAMLとは?

YAML(YAML Ain’t Markup Language)は、設定ファイルなどに使われる人間にとって読みやすいデータ記述言語です。

読み方

📖 ヤムル または ヤメル と読みます。


YAMLの特徴(表で整理)

特徴 内容
拡張子 .yaml または .yml
主な用途 設定ファイル(CI/CD、Docker、Kubernetes、Ansibleなど)
構文 インデントで階層を表現(スペース2つ or 4つ)
データ構造の表現が簡潔 配列、オブジェクト(連想配列)を直感的に表現可能
コメント # を使ってコメント記述が可能
JSONとの互換性 基本的にJSONと変換可能(YAML → JSON、JSON → YAML)

基本構文(初心者向け)

1. キーと値

name: John Doe
age: 30

2. ネスト(階層構造)

person:
  name: John Doe
  age: 30

3. 配列(リスト)

fruits:
  - apple
  - banana
  - orange

4. コメント

# これは名前を表します
name: Alice

入力と出力の例

YAMLファイル(入力)

user:
  name: Alice
  skills:
    - Python
    - YAML
    - Docker

想定されるデータ構造(出力/Pythonの辞書形式)

{
  "user": {
    "name": "Alice",
    "skills": ["Python", "YAML", "Docker"]
  }
}

たとえ話:YAMLは「料理のレシピ」

YAMLは「料理のレシピ」に例えると分かりやすいです。

recipe:
  name: カレーライス
  ingredients:
    - 玉ねぎ
    - にんじん
    - じゃがいも
    - カレールー
  steps:
    - 材料を切る
    - 炒める
    - 水を入れて煮る
    - ルーを入れて仕上げる

📌 読むだけで、どんな料理かイメージできる=人間にやさしい形式


Mermaid.jsを使ったYAMLの構造図

graph TD
  A[YAMLルート]
  A --> B[user]
  B --> C[name: Alice]
  B --> D[skills]
  D --> E[Python]
  D --> F[YAML]
  D --> G[Docker]

専門者向け:YAMLの応用と注意点

アンカーとエイリアス(共通部分の再利用)

default: &default_settings
  retries: 3
  timeout: 30

dev:
  <<: *default_settings
  timeout: 10

複数ドキュメント(--- 区切り)

---
env: development
---
env: production

複雑なネストとマップ

services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

よく使われる用途別例

用途 ツール・システム YAMLファイルの役割
CI/CD GitHub Actions, GitLab CI ワークフローの定義
コンテナ管理 Docker Compose 複数コンテナの構成定義
インフラ Kubernetes Pod, Service などの構成定義
自動化 Ansible インベントリとタスクの定義

まとめ

  • YAMLは設定ファイルに最適なシンプル構文
  • インデントが命(タブではなくスペース!)
  • JSONよりも直感的に書ける
  • 読みやすさ・編集しやすさに優れている
  • 応用では共通設定の再利用や複数ドキュメントなども活用可能

おまけ:YAMLとJSONの比較表

項目 YAML JSON
人間の可読性
コメント 対応あり(#) 非対応
使う記号 最小限(コロン、ハイフン) 多い({}, []など)
ネスト インデントで表現 括弧で表現

📁 ファイル拡張子例

  • config.yaml
  • docker-compose.yml
  • .github/workflows/ci.yml

📝 実装Tips

  • 必ずスペースでインデント(タブ不可)
  • Lint(構文チェック)を使ってバグ予防
  • ファイルが複雑になったら、コメントを積極的に使おう