長年にわたり数えきれないほどの構成ファイルを扱ってきましたが、その中でもYAMLはシンプルさと読みやすさで際立っています。Kubernetesでワークフローを設定するときも、Dockerでサービスを定義するときも、APIリクエストを構造化するときも、YAMLなら複雑な設定をぐっと扱いやすくできます。インデントに基づくクリーンな構造は、XMLのような煩雑さを取り除きつつ、柔軟性も保っています。
このガイドでは、YAMLの構文、構造、発展的な機能、ベストプラクティスを順に解説し、自信を持って扱えるようにお手伝いします。
YAMLとは?
YAML(Yet Another Markup Language / YAML Ain’t Markup Language)は、可読性と使いやすさを重視したデータシリアライゼーション形式です。HTMLのような入れ子タグを使うXMLや、中括弧と引用符を使うJSON(Pythonの辞書に近い)と比べ、YAMLはより簡潔で、インデントで構造を表すため、人間にとって読みやすいのが特徴です。
YAMLは、スカラー(文字列、数値、ブール)、シーケンス(リスト)、マッピング(キーと値の組)といったさまざまなデータ型をサポートします。構成ファイル、インフラ自動化、データ交換で広く使われており、特にKubernetes、Docker、Ansibleのようなツールで重用されています。
さらに、YAMLはJSONのスーパーセットであり、有効なJSONファイルはYAMLとしてもパースできます。YAMLファイルの拡張子は一般的に.yamlまたは.ymlです。
詳しくは公式サイト もご覧ください。
YAMLの構文と構造
このセクションでは、キーと値の組、リスト、入れ子データ、コメントなど、YAML構文の基本原則を解説します。
基本的な構文ルール
YAMLにはいくつかの基本ルールがあります。
スペースのインデントで構造を表します。タブは使わないでください。
キーと値の組は、他の言語と同様にkey: valueの形式です。
行頭のハイフンはリストを表します。
#はコメント行を作成します。
name : John Doe
age : 30
skills :
- Python
- YAML提供:
キーと値の組
YAMLは、Pythonの辞書のようにデータをキーと値の組で表します。これは、多様な構成ファイルや設定に与える情報を表すのによく使われます。文字列やキーを引用符で囲む必要はなく、必要なキーと値を書くだけで構いません。
location : New York
country : USA
security-level : user提供:
YAMLのリスト
リストはハイフン(-)で表します。1つのキーの下に複数の要素を列挙できます。マークアップエディタで読むと視覚的には箇条書きのように表示されることがあります。
fruits :
- Apple
- Banana
- Cherry提供:
入れ子データ
入れ子構造は、インデントを使って階層的なデータ表現を可能にします。入れ子の辞書のように考えると理解しやすいでしょう。インデントで、どのキーが他のキーの下位集合かを示します。
person :
name : Alice
details :
age : 25
city : London提供:
コメント
#で始まるコメントは、YAMLパーサに無視されます。コメントは1行コメントです。
username : admin
password : secret提供:
YAMLの高度な機能
YAMLには、複数行文字列、データ型、アンカーなど、ドキュメントを効率的かつ構造的にする強力な機能があります。ここでは実用的な例とともにこれらの機能を見ていきます。
複数行文字列
YAMLは|(リテラルブロック)と>(折りたたみブロック)で複数行文字列をサポートします。
|(リテラルブロック)は、改行ごとに新しい行\nを作成します。
>(折りたたみブロック)は、連続する改行のみ新しい行にします。
literal : |
This is a
multi-line string.
folded : >
This is another
multi-line string. 提供:
上記は出力を見ると理解しやすいでしょう。
This is a
multi-line string.提供:
This is another multi-line string.提供:
YAMLのデータ型
YAMLは、文字列、数値、ブール値、null値など、さまざまなデータ型をサポートします。書式から自動的に型を推測しますが、明示的に型を指定することもできます。
次の例は、YAMLにおける基本的なデータ型の使い方を示しています。
string_implicit : Hello, YAML!
string_double_quoted : "Supports escape sequences like \n and \t"
string_single_quoted : 'Raw text, no escape sequences'
integer : 42
float : 3.14
boolean_true : true
boolean_false : false
null_value : null
null_tilde : ~ 提供:
必要に応じて、!!typeで明示的に型を宣言できます。
explicit_string : !!str 123
explicit_integer : !!int "42"
explicit_float : !!float "3.14" 提供:
YAMLは構造化データに使われることが多いため、次のような構造もサポートします。
fruits :
- Apple
- Banana
- Cherry提供:
person :
name : Alice
age : 30
is_student : false 提供:
アンカーとエイリアス
YAMLでは、アンカー(&)で再利用可能な値を定義し、エイリアス(*)で参照できます。これにより構成ファイルの冗長性を減らし、よりクリーンで保守しやすくなります。
defaults : &default_settings
retries : 3
timeout : 30
server1 :
host : example.com
retries : *default_settings 提供:
<<:構文を使うと、アンカーから別のマッピングにキーと値の組をマージできます。両方に同じキーがある場合は、新しい値が元の値を上書きします。
defaults : &default_settings
retries : 3
timeout : 30
server1 :
<< : *default_settings
host : example.com 提供:
最終的に解決された構造は次のとおりです。
server1:
retries: 3
timeout: 30
host: example.com提供:
アンカーとエイリアスは、値の繰り返しが非効率になる大規模な構成ファイルで特に有用です。DRY(Don't Repeat Yourself)の原則を保ち、更新を容易にします。
YAMLの一般的なユースケース
YAMLは、ソフトウェア開発、インフラ自動化、API管理で広く使われています。人間が読みやすい構文により、構成ファイル、データシリアライゼーション、Infrastructure as Code(IaC)の形式として好まれます。ここでは代表的な用途を見ていきます。
構成ファイル
YAMLはDocker Compose、Kubernetes、 およびCI/CDパイプライン のようなアプリケーションの構成で広く使われています。理解しやすいため、DockerのYAMLセットアップファイルを誰でも手早く読み取り、何が起きているかを把握できます。
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80提供:
YAMLの読みやすさと、アンカーやエイリアスのサポートは、繰り返しを減らし、JSONやXMLよりも保守しやすくします。
DockerにおけるYAMLの使い方については、 この中級Dockerコース で学べます。
データのシリアライゼーションと転送
YAMLは、複雑なデータ構造を人間が読みやすく、かつ機械が容易にパースできる形式に変換することで、APIや構成管理ツールのデータシリアライゼーションに使われます。
たとえば、YAMLで整形されたAPIリクエストボディは次のとおりです。
user:
id: 123
name: "John Doe"
email: "[email protected] "
active: true提供:
YAMLはインデントベースの構造により不要な記法を排し、JSONと比べて軽量で読みやすく、修正しやすいのが利点です。
Infrastructure as Code(IaC)
AnsibleやKubernetesのような構成管理ツールは、システム状態の定義、プロセスの自動化、環境間の一貫性確保にYAMLを活用しています。
Ansibleでは、システム状態、タスク、依存関係を定義するプレイブックをYAMLで記述し、インフラ構成の一貫性を担保します。
Kubernetesでは、Pod、Service、Deploymentなどのリソースを定義するマニフェストにYAMLを用い、コンテナ化アプリのオーケストレーションを自動化します。
以下はKubernetesのPod構成の例です。
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app:latest
ports:
- containerPort: 8080提供:
Kub ernetesにおけるYAMLの使い方は、Introduction to Kubernetes コースで学べます。
APIドキュメンテーション
例えば OpenAPI や Swagger のようなAPI仕様は、エンドポイントやデータ構造を読みやすく定義するためにYAMLを使用します。APIメソッド、リクエストパラメータ、レスポンス形式、認証方法などの概要をYAMLで記述します。
以下はYAMLで記述したOpenAPI仕様の例です。
openapi: 3.0.0
info:
title: User API
version: "1.0"
paths:
/users:
get:
summary: Retrieve a list of users
responses:
"200":
description: Successful response提供:
OpenAPI仕様は、RESTful APIをドキュメント化するためにYAMLを用います。これにより、クライアントSDKの生成、インタラクティブなAPIドキュメント、テスト自動化のための明確な設計図を提供できます。この構造化された形式により、API実装間の一貫性が保たれます。
YAMLファイルの扱い方
YAMLは構成ファイル、オートメーション、データシリアライゼーションで広く使われますが、インデントに依存するため、正しい書式が重要です。ここでは、YAMLを効果的に読み取り、書き込み、検証、編集する方法を説明します。
PythonでYAMLを読み書きする
PythonのPyYAMLライブラリは、YAMLのパースと生成ができます。
次のような構成YAMLファイルがあるとします。
database:
host: localhost
port: 5432
user: admin
password: secret提供:
この構成ファイルをPythonで扱う方法は以下のとおりです。
import yaml
with open ( "config.yaml" , "r" ) as file :
data = yaml. safe_load( file )
data[ "database" ] [ "user" ] = "new_user"
with open ( "output.yaml" , "w" ) as file :
yaml. dump( data, file , default_flow_style= False ) 提供:
PythonでのJSONデータの扱いに興味があれば、 包括的なPython JSONチュートリアル をご覧ください。
YAMLファイルの検証
正しい構造を確保するため、スペースの代わりにタブを使っていないか、重複文字、構文エラー、行末の余分なスペースといった問題を検出するツールを利用できます。
代表的なYAMLバリデータは次のとおりです。
YAMLの編集
YAMLは任意のテキストエディタで作成・編集できますが、リンターやシンタックスハイライトを使うと可読性が向上します。
おすすめのエディタ:
VS Code(YAMLプラグイン併用)
PyCharm(標準サポート)
Sublime Text(YAMLシンタックスハイライト)
YAMLで避けたいよくあるミス
YAMLはシンプルですが、使っているとミスやタイプミスは起こりがちです。このセクションでは、よくある間違いを取り上げ、正しくクリーンなファイルを書くためのベストプラクティスを紹介します。リンターや対応したテキストエディタの利用を勧める理由もここにあります。
タブとスペースの混在
YAMLはインデントにスペースを使います。タブとスペースを混在させてはいけません。タブはYAMLを壊します。これは意図的な設計で、システムによってタブの解釈が異なるため、影響を最小化する目的でスペースが推奨されています。
不適切なインデント
パースエラーを避けるため、インデントを一貫させてください。インデントはYAMLが階層を表す唯一の方法であるため、誤ったパースはコードに問題を引き起こします。key: valueの組を誤った場所に入れ込んでしまうのはよくあるので、インデントに注意を払いましょう。
特殊文字に引用符を付け忘れる
特殊文字やスペースを含む文字列には引用符を使ってください。バックスラッシュ、カンマ、感嘆符などは、文字列として解釈させるために引用符が必要です。
path: "/home/user/documents"
message: "Hello, World!"提供:
適切な検証、整理された編集、そしてPythonのPyYAMLを活用すれば、YAMLファイルを効率よく扱い、よくある落とし穴も避けられます。
まとめ
YAMLは、構成、データシリアライゼーション、インフラ自動化で広く使われる、強力でありながらシンプルな形式です。構文、構造、ベストプラクティスを理解すれば、さまざまな場面でYAMLを効率的に活用できます。
YAMLを実践で活かしたい場合は次をご覧ください。
長年にわたり数えきれないほどの構成ファイルを扱ってきましたが、その中でもYAMLはシンプルさと読みやすさで際立っています。Kubernetesでワークフローを設定するときも、Dockerでサービスを定義するときも、APIリクエストを構造化するときも、YAMLなら複雑な設定をぐっと扱いやすくできます。インデントに基づくクリーンな構造は、XMLのような煩雑さを取り除きつつ、柔軟性も保っています。
このガイドでは、YAMLの構文、構造、発展的な機能、ベストプラクティスを順に解説し、自信を持って扱えるようにお手伝いします。
YAMLとは?
YAML(Yet Another Markup Language / YAML Ain’t Markup Language)は、可読性と使いやすさを重視したデータシリアライゼーション形式です。HTMLのような入れ子タグを使うXMLや、中括弧と引用符を使うJSON(Pythonの辞書に近い)と比べ、YAMLはより簡潔で、インデントで構造を表すため、人間にとって読みやすいのが特徴です。
YAMLは、スカラー(文字列、数値、ブール)、シーケンス(リスト)、マッピング(キーと値の組)といったさまざまなデータ型をサポートします。構成ファイル、インフラ自動化、データ交換で広く使われており、特にKubernetes、Docker、Ansibleのようなツールで重用されています。
さらに、YAMLはJSONのスーパーセットであり、有効なJSONファイルはYAMLとしてもパースできます。YAMLファイルの拡張子は一般的に
.yamlまたは.ymlです。詳しくは公式サイトもご覧ください。
YAMLの構文と構造
このセクションでは、キーと値の組、リスト、入れ子データ、コメントなど、YAML構文の基本原則を解説します。
基本的な構文ルール
YAMLにはいくつかの基本ルールがあります。
key: valueの形式です。#はコメント行を作成します。キーと値の組
YAMLは、Pythonの辞書のようにデータをキーと値の組で表します。これは、多様な構成ファイルや設定に与える情報を表すのによく使われます。文字列やキーを引用符で囲む必要はなく、必要なキーと値を書くだけで構いません。
YAMLのリスト
リストはハイフン(
-)で表します。1つのキーの下に複数の要素を列挙できます。マークアップエディタで読むと視覚的には箇条書きのように表示されることがあります。入れ子データ
入れ子構造は、インデントを使って階層的なデータ表現を可能にします。入れ子の辞書のように考えると理解しやすいでしょう。インデントで、どのキーが他のキーの下位集合かを示します。
コメント
#で始まるコメントは、YAMLパーサに無視されます。コメントは1行コメントです。YAMLの高度な機能
YAMLには、複数行文字列、データ型、アンカーなど、ドキュメントを効率的かつ構造的にする強力な機能があります。ここでは実用的な例とともにこれらの機能を見ていきます。
複数行文字列
YAMLは
|(リテラルブロック)と>(折りたたみブロック)で複数行文字列をサポートします。|(リテラルブロック)は、改行ごとに新しい行\nを作成します。>(折りたたみブロック)は、連続する改行のみ新しい行にします。上記は出力を見ると理解しやすいでしょう。
|(リテラルブロック)の場合:>(折りたたみブロック)の場合:YAMLのデータ型
YAMLは、文字列、数値、ブール値、null値など、さまざまなデータ型をサポートします。書式から自動的に型を推測しますが、明示的に型を指定することもできます。
次の例は、YAMLにおける基本的なデータ型の使い方を示しています。
必要に応じて、
!!typeで明示的に型を宣言できます。YAMLは構造化データに使われることが多いため、次のような構造もサポートします。
アンカーとエイリアス
YAMLでは、アンカー(
&)で再利用可能な値を定義し、エイリアス(*)で参照できます。これにより構成ファイルの冗長性を減らし、よりクリーンで保守しやすくなります。<<:構文を使うと、アンカーから別のマッピングにキーと値の組をマージできます。両方に同じキーがある場合は、新しい値が元の値を上書きします。最終的に解決された構造は次のとおりです。
アンカーとエイリアスは、値の繰り返しが非効率になる大規模な構成ファイルで特に有用です。DRY(Don't Repeat Yourself)の原則を保ち、更新を容易にします。
YAMLの一般的なユースケース
YAMLは、ソフトウェア開発、インフラ自動化、API管理で広く使われています。人間が読みやすい構文により、構成ファイル、データシリアライゼーション、Infrastructure as Code(IaC)の形式として好まれます。ここでは代表的な用途を見ていきます。
構成ファイル
YAMLはDocker Compose、Kubernetes、およびCI/CDパイプラインのようなアプリケーションの構成で広く使われています。理解しやすいため、DockerのYAMLセットアップファイルを誰でも手早く読み取り、何が起きているかを把握できます。
YAMLの読みやすさと、アンカーやエイリアスのサポートは、繰り返しを減らし、JSONやXMLよりも保守しやすくします。
DockerにおけるYAMLの使い方については、この中級Dockerコースで学べます。
データのシリアライゼーションと転送
YAMLは、複雑なデータ構造を人間が読みやすく、かつ機械が容易にパースできる形式に変換することで、APIや構成管理ツールのデータシリアライゼーションに使われます。
たとえば、YAMLで整形されたAPIリクエストボディは次のとおりです。
YAMLはインデントベースの構造により不要な記法を排し、JSONと比べて軽量で読みやすく、修正しやすいのが利点です。
Infrastructure as Code(IaC)
AnsibleやKubernetesのような構成管理ツールは、システム状態の定義、プロセスの自動化、環境間の一貫性確保にYAMLを活用しています。
以下はKubernetesのPod構成の例です。
KubernetesにおけるYAMLの使い方は、Introduction to Kubernetesコースで学べます。
APIドキュメンテーション
例えば OpenAPI や Swagger のようなAPI仕様は、エンドポイントやデータ構造を読みやすく定義するためにYAMLを使用します。APIメソッド、リクエストパラメータ、レスポンス形式、認証方法などの概要をYAMLで記述します。
以下はYAMLで記述したOpenAPI仕様の例です。
OpenAPI仕様は、RESTful APIをドキュメント化するためにYAMLを用います。これにより、クライアントSDKの生成、インタラクティブなAPIドキュメント、テスト自動化のための明確な設計図を提供できます。この構造化された形式により、API実装間の一貫性が保たれます。
YAMLファイルの扱い方
YAMLは構成ファイル、オートメーション、データシリアライゼーションで広く使われますが、インデントに依存するため、正しい書式が重要です。ここでは、YAMLを効果的に読み取り、書き込み、検証、編集する方法を説明します。
PythonでYAMLを読み書きする
Pythonの
PyYAMLライブラリは、YAMLのパースと生成ができます。次のような構成YAMLファイルがあるとします。
この構成ファイルをPythonで扱う方法は以下のとおりです。
PythonでのJSONデータの扱いに興味があれば、包括的なPython JSONチュートリアルをご覧ください。
YAMLファイルの検証
正しい構造を確保するため、スペースの代わりにタブを使っていないか、重複文字、構文エラー、行末の余分なスペースといった問題を検出するツールを利用できます。
代表的なYAMLバリデータは次のとおりです。
YAMLの編集
YAMLは任意のテキストエディタで作成・編集できますが、リンターやシンタックスハイライトを使うと可読性が向上します。
おすすめのエディタ:
YAMLで避けたいよくあるミス
YAMLはシンプルですが、使っているとミスやタイプミスは起こりがちです。このセクションでは、よくある間違いを取り上げ、正しくクリーンなファイルを書くためのベストプラクティスを紹介します。リンターや対応したテキストエディタの利用を勧める理由もここにあります。
タブとスペースの混在
YAMLはインデントにスペースを使います。タブとスペースを混在させてはいけません。タブはYAMLを壊します。これは意図的な設計で、システムによってタブの解釈が異なるため、影響を最小化する目的でスペースが推奨されています。
不適切なインデント
パースエラーを避けるため、インデントを一貫させてください。インデントはYAMLが階層を表す唯一の方法であるため、誤ったパースはコードに問題を引き起こします。
key: valueの組を誤った場所に入れ込んでしまうのはよくあるので、インデントに注意を払いましょう。特殊文字に引用符を付け忘れる
特殊文字やスペースを含む文字列には引用符を使ってください。バックスラッシュ、カンマ、感嘆符などは、文字列として解釈させるために引用符が必要です。
適切な検証、整理された編集、そしてPythonのPyYAMLを活用すれば、YAMLファイルを効率よく扱い、よくある落とし穴も避けられます。
まとめ
YAMLは、構成、データシリアライゼーション、インフラ自動化で広く使われる、強力でありながらシンプルな形式です。構文、構造、ベストプラクティスを理解すれば、さまざまな場面でYAMLを効率的に活用できます。
YAMLを実践で活かしたい場合は次をご覧ください。