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つを入れて host と port を記述することで、これらが 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を使って素早く切り分けるプロンプトを教えてください。