開発や運用の現場では、構成管理や設定ファイルの記述を効率よく行うために、扱いやすく整ったデータ形式が求められます。その代表的な手段の1つとして注目されているデータフォーマットにYAMLがあり、視認性と柔軟性を備えた構文が多くの現場で活用されている状況です。

本記事では、YAMLが使用される書き方のパターンや構造のルール、設定内容がどのように処理されるかといった出力の仕組みについて詳しく解説します。

他形式との違いや用途ごとの使い分けや実際の構文をもとにした使用例も紹介しており、読み進めることで記述の基礎から応用までを体系的に把握することが可能です。

YAMLとは?

YAML(YAML Ain’t Markup Language)とは、構造化データを人間が読みやすい形式で記述するためのデータフォーマットです。主に設定ファイルやデータのやり取りに用いられ、JSONやXMLと同様に構造化されたデータを簡潔に表現できます。

JSONと同様に構造化データを扱うことが可能です。たとえば、以下のような用途で利用されています。

  • ソフトウェアやアプリケーションの設定ファイル(例:Docker Compose、GitHub Actions、Kubernetes)
  • インフラ構成管理(Infrastructure as Code)における構成記述(例:Ansible、CloudFormation)
  • CI/CDツールのワークフロー定義(例:GitLab CI、CircleCI、Azure Pipelines)
  • 静的サイトジェネレータでのメタ情報管理(例:Jekyll、Hugo)
  • WebアプリケーションやAPIの動作設定(PythonやNode.jsを中心に使用)
  • OpenAPI仕様や機械学習パラメータなどのデータ構造の定義
  • データベース接続設定や管理構成の記述

開発や運用の現場では、設定ファイルとしての役割を担うことが多く、システムの管理や構築における重要な構成要素の1つとされています。

もともとはマークアップ言語ではなく、データの可視性(直感的に把握しやすい構造)と直感的な理解を重視して設計されており、DevOpsやクラウド環境、CI/CDの分野などで広く利用されています。

項目YAMLJSON
記述方法データ記述言語(構造化)データ記述言語(構造化)
用途設定ファイル、構成管理、データ定義API通信、データ保存、構造化データの送受信
拡張性高い(自由にキーを定義可能)やや限定的(仕様に従った記述)
可読性高い(インデントとシンプルな構文)中程度(カンマやブラケットが多い)
冗長性少ない(タグ不要)少ない(構造はシンプル)
構文ミスへの耐性低い(インデントやコロンの誤りでパース失敗)中程度(整形のルールが厳格)
データの型サポート文字列、数値、ブール、配列、マップなど文字列、数値、ブール、配列、オブジェクト

YAMLの特徴

YAMLは、構成情報や設定ファイルの記述に多く使われているデータフォーマットです。その特性から、開発現場や運用の自動化領域で広く採用されています。以下に、YAMLが選ばれる主な理由を紹介します。

可読性の高さ

YAMLは、人が読むことを前提に設計されており、インデント(字下げ)で階層を表現します。構造を視覚的に理解しやすく、複雑なデータも直感的に把握可能です。HTMLやXMLのような煩雑なタグを使わず、シンプルに書けるため、非エンジニアでも内容を把握しやすい点が特徴です。

name: ChatGPT
version: 4.0
features:
- 質問応答
- コード生成

シンプルな構文

JSONやXMLと比べて、YAMLは構文が簡潔です。中括弧やクォーテーションを省略できる場合が多く、記述量を減少させられます。構文ルールも直感的で覚えやすく、開発経験が浅い人でもすぐに使い始められるでしょう。

柔軟なデータ表現

YAMLでは、マップ(キーと値のペア)やリスト(配列)、スカラー値(数値や文字列など)を自由に組み合わせて、複雑な構造を簡潔に記述可能です。ネスト構造や多段階の設定も読みやすく表現できるため、システム構成やパラメータ定義にも適しています。

user:
name: Taro
age: 30
skills:
- Python
- YAML

多くのツールと連携可能

YAMLは、CI/CDのワークフロー定義やインフラのコード化、API定義など、多くの開発・運用ツールで利用可能です。

JSONとの互換性

YAMLは、JSONで書かれたデータをすべて正しく読み取れるだけでなく、YAML独自の表記方法も追加で使用可能です。既存のJSONデータを変換せずに流用できるため、プロジェクトの移行や連携もスムーズです。

YAMLの基本構文例

ここでは、YAMLでよく使われる基本的な構文を例とともに紹介します。書き方と構造の理解を深めましょう。

1.マルチドキュメント

YAMLでは、「—」を使うことで1つのファイルに複数の文書を記述できます。これを「マルチドキュメント構文」と呼びます。設定の一元管理や構成の簡略化に役立つ便利な構文です。

  • YAML構文例
# Service定義
apiVersion: v1
kind: Service
metadata:
name: my-service
---
# Deployment定義
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
  • 出力結果(JSON形式)
[
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "my-service"
}
},
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "my-app"
}
}
]

2.アンカー・エイリアス・マージキー

YAMLでは、共通設定を再利用するための構文として、アンカー・エイリアス・マージキーが用意されています。「&」で定義した内容(アンカー)を、「*」で再利用(エイリアス)できます。「<<」でマージすれば、設定を一括で取り込みつつ個別上書きも可能です。重複を避けて設定を簡潔に保てるため、大規模な構成や環境別設定の管理に適しています。

  • YAML構文例
base: &default
retries: 3
timeout: 30
logging: true

serviceA:
<<: *default
timeout: 60
  • 出力結果(JSON形式)
[
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "my-service"
}
},
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "my-app"
}
}
]

3. 型明示(タグ付き)と複雑なネスト

YAMLでは、「!!str」や「!!float」などのタグを使って、明示的に型を指定できます。通常は自動で型を判定します。そのうえで、意図しない解釈を防ぎたい場合や数値・文字列の厳密な制御が求められる場合に活用可能です。

また、複雑なネスト構造とも組み合わせ可能で、階層の深い設定でも正確にデータ型を管理できます。精度が重要な構成定義やAPI仕様書で重宝されます。

  • YAML構文例
config:
version: !!str 2.0
options:
- name: alpha
enabled: true
rate: !!float "1.23"
- name: beta
enabled: false
metadata: !!map
created_at: 2024-01-01
created_by: admin
  • 出力結果(JSON形式)
{
"config": {
"version": "2.0",
"options": [
{
"name": "alpha",
"enabled": true,
"rate": 1.23
},
{
"name": "beta",
"enabled": false,
"metadata": {
"created_at": "2024-01-01",
"created_by": "admin"
}
}
]
}
}

YAMLとJSONの違い

YAMLとJSONはいずれも構造化データを記述する形式として広く使われている言語です。しかし、目的や使用感に違いがあります。

JSONは機械処理に適した厳格な構文を持ち、システム間のデータ連携などに多く使われています。対して、YAMLは人が読みやすい構造を重視しており、設定ファイルや構成管理の用途に向いているといえるでしょう。

どちらも同じようなデータ構造を表現できるものの、扱いやすさや用途に応じて選ぶことが重要です。

比較項目YAMLJSON
読みやすさ人にとって読みやすい機械にとって処理しやすい
記述スタイルインデントで階層を表現、記号が少ない中括弧 {} や配列記号 [] を使用
コメント記述可能(#)記述不可(仕様上サポートなし)
データ型明示または自動で解釈可能厳格な記法が必要
主な用途設定ファイル、構成管理、CI/CDなどデータ通信、APIレスポンス、データ保存
拡張性・柔軟性高い(再利用・アンカーなどが可能)低い(構文は固定)

まとめ

本記事では、YAMLの基本的な概念から代表的な構文、JSONとの違いまでを解説しました。YAMLを理解しておくことで、複雑な設定や構成情報の管理がより効率的になります。

YAMLは、システムの自動化や構成の標準化に取り組むうえで、習得しておきたい重要な言語の1つです。実務での活用も視野に入れて、少しずつ学習を進めていきましょう。

primeNumberでは、データ分析基盤構築サービスTROCCOを提供しています。ETL機能に加え、分析基盤の運用支援やメタデータを活用したデータマネジメントサポートなど、データ分析をトータルに支援するツールです。

導入にあたっては無料のトライアルも実施しています。そのため、本当にETLツールが必要か、他のETLツールと比べてどうか、といった疑問点を実際に触りながら解消できます。。まずは小さな自動化から始めて、業務の最適化を図ってみましょう。