← PC・IT用語集へ戻る

YAML

YAML
データの構造を人間に読みやすいテキスト形式で表現するためのフォーマット。
YAML (YAML)

概要(サマリー)

YAML(ヤムル)は、Web開発の設定ファイルなどでよく使われる、人間にとって読みやすく書きやすいデータ表現フォーマットである。

JavaScriptにおける JSON や、HTMLと同じマークアップ言語であるXMLなどと同じく「構造化されたデータ」を記述するための仕組みだが、波括弧 { } や角括弧 [ ] などの記号を少なくし、行頭の「インデント(字下げ)」を使ってデータの親子関係を視覚的に表現する点が特徴である。


詳細解説

YAMLとは何か(人間に見やすいデータ記述形式)

YAMLは「YAML Ain't Markup Language(YAMLはマークアップ言語ではない)」の略であり、データの保存や設定ファイルの記述に特化したフォーマットである。

主に、以下のような「開発環境やツールの動作を設定するファイル」で広く採用されている。

  • GitHub Actions(自動ビルド・テストの設定ファイル)
  • Docker Compose(複数のコンテナ環境を立ち上げる設定ファイル)
  • Kubernetes(コンテナのオーケストレーション設定)
  • 各種プログラミング言語のフレームワークの環境設定ファイル

記号が少なく、メモ帳に書き出す感覚でシンプルに記述できるため、人間が手作業で書き換える設定ファイルとして相性が良い。

インデントによる親子関係の表現(括弧がいらない理由)

YAMLの最大の特徴は、波括弧 { } などの括弧記号を使わず、行頭の半角スペース(インデント)を使ってデータの親子関係(階層構造)を表現することである。

たとえば、JSONでは次のように中括弧とクォーテーションを多用する。

{
  "database": {
    "host": "localhost",
    "port": 3306
  }
}

これをYAMLで記述すると、次のようになり、すっきりとした見た目になる。

database:
  host: localhost
  port: 3306

database の下に半角スペース2つを入れて hostport を記述することで、これらが database の中に含まれる子データ(プロパティ)であることをパーサや各種ツールが解釈できる。

YAMLの基本的な記述ルール(キーと値、配列など)

YAMLを記述する際の基本的なルールは以下の通りである。

  • キーと値のペアキー: 値 の形で記述する。コロン(:)の直後には、必ず半角スペースを1つ以上空ける必要がある。スペースを忘れると、システムがエラーを起こす。
  • 配列(リスト)の表現:複数のデータを並べる場合は、行頭にハイフン(-)と半角スペースを記述する。
  • 文字列のクォーテーション:通常の英数字や日本語であれば、ダブルクォーテーション(")やシングルクォーテーション(')で囲む必要はない。ただし、コロンなどの特殊記号を含めたい場合は囲む必要がある。

以下は、配列やネスト(入れ子)を含めた具体的なYAMLコードの例である。

# プロジェクトの設定例
projectName: my-web-app
version: 1.0.0
active: true

# 配列(リスト)の表現
technologies:
  - HTML
  - CSS
  - JavaScript

# オブジェクトの配列
users:
  - name: Tanaka
    role: admin
  - name: Sato
    role: user

YAMLとJSONの比較

YAMLとJSONは相互に変換可能なデータ構造をしているが、目的によって使い分けるのが一般的である。

  • YAML(人間向け):記号が少なく読みやすいため、人間が手で直接編集する「設定ファイル」に最適。コメント行(#)を書くことができるのも強み。
  • JSON(プログラム・通信向け):文法が厳密でプログラムによるパース(解析)に向いているため、システム間でデータを送受信する「API通信」でよく使われる。コメントは書けない。

AIコーディングとの関係

YAMLは、AI(Cursor、ChatGPTなど)に「開発環境の自動化設定」を指示する際によく登場するフォーマットである。

GitHub ActionsやDocker Compose設定の自動生成

AIに対して「GitHubでプルリクエストが作成されたときに、自動でテスト(npm test)を実行するGitHub ActionsのワークフローをYAMLで書いてください」と指示すると、YAMLファイルのたたき台を生成してもらいやすい。また、Dockerの設定ファイル(docker-compose.yml)などもAIに相談しやすい分野である。

インデントエラーの解消

YAMLはインデントの数(半角スペースのズレ)やコロンの後ろのスペース漏れによって動作しなくなる。AIに「以下のYAMLを実行したらエラーになりました。インデントや記法の間違いを修正してください」と貼り付けて相談すれば、構文エラーの原因を見つけやすくなる。

  • 指示の例:「以下の docker-compose.yml ファイルでインデントエラーが発生しています。シンタックスを修正した正しいYAMLコードを出力してください。[エラーのあるYAMLを貼り付け]」

よくある勘違い

タブ文字と半角スペースはどちらを使ってもいい?

これはYAMLで最も多いエラーの原因である。

YAMLでは、インデントにタブ文字(Tab)を使用することは禁止されている。必ず半角スペース(通常は2個、または4個)を使わなければならない。

多くのエディタ(VS Codeなど)は、キーボードの「Tab」キーを押した際に自動的に半角スペースへ変換してくれる設定になっているが、何らかの理由で本物のタブ文字が混入すると、解析システムが動作しなくなりビルドエラーを引き起こす。

YAMLはプログラミング言語の一種?

YAMLはプログラムを実行するための「プログラミング言語」ではなく、単にデータや設定情報を記述するための「データ記述言語(データ形式)」である。

YAMLファイル自体に「繰り返し処理(ループ)」や「条件分岐(if文)」を行う計算機能はない。

ただし、GitHub Actionsなどのシステム側が「YAML内に特定のキーワード(例: if: github.event_name == 'push')が書かれていたら、この部分をスキップする」といったプログラムロジックを読み取って動くため、一見するとプログラムのように見えることがある。

YAMLの中にJSONを直接書いてもいい?

実は、YAMLの仕様(YAML 1.2以降)では「JSONはYAMLの正式なサブセット(一部)」と定義されている。

そのため、YAMLファイルの中に中括弧 { } や角括弧 [ ] を使ったJSONの形式をそのまま記述しても、YAMLとして正しくパースされる。

# これも正しいYAMLの記述として解釈される
database: { host: localhost, port: 3306 }

ただし、これを多用するとYAMLのメリットである「読みやすさ」が失われるため、基本的にはインデントを使った標準的なYAMLの書き方に統一するとよい。


情報ソース


まとめ

  • YAMLは、記号を少なくし、インデント(半角スペース)で階層を表現するデータ形式。
  • 人間にとって視覚的に読みやすいため、ツールの設定ファイル(GitHub Actions、Dockerなど)でよく使われる。
  • インデントにタブ文字は使用不可(半角スペースのみ)。コロンの直後には半角スペースを入れるルールがある。
  • AIコーディングとの相性が良く、設定ファイル全体のたたき台作成や構文エラーの原因調査をAIに依頼しやすい。

より詳しくAIに聞いてみよう

  • YAMLで設定ファイルを書く際、インデントを半角スペース2文字にする場合と4文字にする場合で違いはありますか?
  • YAML内で複数行の長文(改行を含む文字列)を記述したい場合、どのように表現すればよいですか?
  • 複雑な JSON データを YAML 形式に相互変換するスクリプトを JavaScript で実装する例を教えてください。
  • AIを使って docker-compose.yml を作成してもらう際、データベースの初期ユーザー名やパスワードのハードコードを防ぐための環境変数の設定方法を教えてください。
  • GitHub Actionsでビルドエラーが発生した際、YAMLの書き方のミスなのか、プログラムのバグなのかをAIを使って素早く切り分けるプロンプトを教えてください。