YAMLとは?読み方・意味・書き方をわかりやすく解説

YAML(読み方・意味)

YAMLとは

YAML(ヤムル)とは、「YAML Ain’t Markup Language」の頭文字をとった再帰的な略語で、人間が読みやすいデータシリアライゼーション言語です。もともとは「Yet Another Markup Language」として2001年5月11日に初版がリリースされ、その後改良を重ねて現在はYAML 1.2(2009年)が最新バージョンとなっています。

YAMLは、設定ファイルやデータ交換を目的として広く使われており、Docker Compose、Kubernetes、Ansible、GitHub Actionsなど、実務で欠かせないツールの設定言語として採用されています。JSONは機械向けのデータフォーマットですが、YAMLはその点で「人間が読みやすい・書きやすい」ことを第一の設計思想としており、インデント(字下げ)を活用した階層構造の表現が特徴です。

ここがポイントです。YAMLは複雑なネストされたデータを視覚的に理解しやすい形で記述でき、かつJSONの完全スーパーセット(YAML 1.2)でもあるため、有効なJSONはすべて有効なYAMLとして処理されます。つまり、YAMLは単なる設定言語ではなく、データ交換の汎用フォーマットとして重要な役割を担っているわけです。

YAMLの読み方

主な読み方
ヤムル(yam-ul)
別の読み方
ヤメル
発音のコツ
英語の「camel(キャメル)」と同じ音の流れで「yam」と「ul」を組み合わせた音。日本語では「ヤムル」と表記するのが一般的です。
アクロニム
YAML Ain’t Markup Language(再帰的略語)/ Originally: Yet Another Markup Language

YAMLの仕組み

YAMLはインデント(スペース)を用いた階層構造で、キーと値のペアを表現します。重要なのは、タブではなくスペースを使うということです。以下がYAMLの基本的な構文要素です。

YAMLの基本要素

  • キー-値ペア: key: value
  • ネストされたオブジェクト: インデントで階層を表現
  • リスト: - item で要素を表記
  • コメント: # コメント
  • 複数行文字列: | または >

シンプルな例を見てみましょう。注意し、これはYAMLの最も基本的な形式です。

name: 太郎
age: 30
city: 東京
hobbies:
  - 読書
  - 映画鑑賞
  - 料理

上記の例では、「hobbies」というキーに複数の値(リスト)が紐づいており、インデントで「name」「age」「city」と同じ階層にあることを示しています。

使い方・実例

YAMLは実務で数多くの場面で活用されています。代表的な用途と具体的なコード例を紹介します。

Docker Composeの例

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    environment:
      - TZ=Asia/Tokyo
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password

このように、複数のサービスと設定をシンプルに記述できます。覚えておき、これはYAMLの視認性の高さが活躍する場面です。

Kubernetes マニフェストの例

apiVersion: v1
kind: Pod
metadata:
  name: my-app
  labels:
    app: myapp
spec:
  containers:
  - name: app
    image: my-app:1.0
    ports:
    - containerPort: 8080

実務では、このようなマニフェストファイルを日常的に作成・管理しています。

メリット・デメリット

メリット

  • 可読性が高い:インデント中心の設計で人間が直感的に理解できる
  • 記述が簡潔:JSON比で記号が少なく、入力ミスが減る
  • 広く採用されている:Docker、Kubernetes、Ansibleなど業界標準
  • コメントが書ける:JSONと異なり、設定に注釈を加えられる
  • JSONとの互換性:YAML 1.2はJSONのスーパーセット

デメリット

  • インデントの扱いが厳密:スペース数を間違えるとパースエラーになる
  • タブが使えない:エディタの設定によっては注意が必要
  • 複雑な構造は読みづらい場合がある:深いネストになると管理が煩雑
  • パーサーの実装が複雑:言語によって動作が異なることがある

YAMLとJSONの違い

ポイントです。YAMLとJSONはどちらもデータシリアライゼーション形式ですが、用途と特徴が異なります。以下の表にまとめました。

項目 YAML JSON
可読性 高い 中程度
コメント 対応(#で記述) 非対応
用途 設定ファイル・IaC データ交換・API
記号 少ない 多い(括弧・引用符)
パース速度 やや遅い 高速

同じデータをYAMLとJSONで表現

YAML

app:
  name: MyApp
  version: 1.0
  features:
    - auth
    - logging

JSON

{
  "app": {
    "name": "MyApp",
    "version": 1.0,
    "features": [
      "auth",
      "logging"
    ]
  }
}

YAMLの方が記号が少なく、シンプルに見えることがお分かりいただけるでしょう。

よくある誤解

誤解1:タブでインデントを表現できる

これは大きな誤りです。YAMLはスペースのみでインデントを表現し、タブは許可されていません。多くのエラーの原因がこのタブ使用です。エディタの設定を確認し、「タブをスペースに変換」するオプションを有効にしましょう。

誤解2:YAMLはマークアップ言語である

「YAML Ain’t Markup Language」という名称の通り、YAMLはマークアップ言語ではなくデータシリアライゼーション言語です。HTMLやXMLと異なり、表現・表示を目的とするのではなく、データ構造を表現することが目的です。

誤解3:YAMLはJSONの置き換えである

YAMLはJSONの上位互換ですが、用途が異なります。実務では、設定ファイルにはYAML、API通信のデータ形式にはJSONと、場面に応じて使い分けるのが一般的です。

実務での活用シーン

1. CI/CDパイプライン

GitHub ActionsやGitLabのパイプライン設定でYAMLが使われています。開発フローを自動化する際、必ずYAMLを記述することになります。

2. インフラストラクチャ as Code(IaC)

Ansible、Terraform、CloudFormationなどの設定でYAMLが活用されており、インフラの構築を自動化・再現可能にするには欠かせません。

3. コンテナオーケストレーション

KubernetesのマニフェストはYAML形式で、マイクロサービスアーキテクチャの構築に不可欠です。

4. 設定ファイル

アプリケーションの設定、ログレベル、データベース接続情報など、多くのツールがYAMLベースの設定ファイルを採用しています。

FAQ

Q1. YAMLのバージョン違いで何か問題が生じますか?

A. YAML 1.1とYAML 1.2で微妙な仕様の違いがあります。特にブール値の扱いが異なるため、ツールのドキュメントでバージョン確認が必要です。

Q2. YAMLでセキュリティ上の注意点は?

A. YAMLパーサーによって危険な機能が有効になることがあります。外部ソースから取得したYAMLを実行する際は、セキュアなパーサーを使用してください。

Q3. どのエディタでYAML編集が効率的?

A. VS Code、Sublime Text、VimなどのエディタはYAML対応で、シンタックスハイライト機能で誤りを早期に発見できます。

Q4. YAMLの検証方法は?

A. yamllint、オンラインバリデータ、言語のYAMLパーサーライブラリなどで検証可能です。

Q5. YAML形式のトラブルシューティングのコツ

A. エラーメッセージをよく読み、行番号を確認してインデント・タブの混在をチェック。重要です、パーサーが指摘した位置が必ずしも真の原因ではないこともあります。

参考文献・出典

まとめ

YAMLは、人間が読みやすいデータシリアライゼーション言語として、現代的なITインフラにおいて不可欠な存在です。Docker、Kubernetes、Ansibleなどのツールの標準として採用されており、これらのスキルを身につけるにはYAMLの習得が避けられません。

YAMLの基本は「インデント」「キー-値ペア」「リスト」という3つの要素ですが、これらを正確に理解することで、複雑な設定ファイルも読み解くことができるようになります。特に、タブではなくスペースを使う、という一点を強く意識し、エディタの設定を適切にしておくことが、トラブル回避の第一歩です。

覚えておき、YAMLはシンプルながらも強力なツールです。今後のキャリアを考えると、YAMLの習得は必須スキルといえるでしょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA