「コロンを入れたら動かなくなった…」
「特殊文字をどうやって書けばいいの?」
YAMLの特殊文字の扱いは、初心者がつまずきやすいポイントです。
この記事では、YAMLで使われる特殊文字の意味と正しい使い方を、基礎から実践まで分かりやすく解説していきますね。
YAMLの基本を理解しよう

YAMLって何?
YAML(ヤムル)は「YAML Ain’t Markup Language」の略称です。
設定ファイルやデータ交換に使われる、人間が読みやすい形式として設計されました。
DockerやKubernetes、CI/CDツールなど、様々な場面で活用されていますね。
なぜ特殊文字の理解が重要なの?
YAMLでは、多くの記号が特別な意味を持っています。
これらを理解せずに使うと、意図しない動作やエラーの原因になるんです。
よくある問題:
- 文字列のつもりが、別の意味に解釈される
- エラーメッセージが分かりにくい
- 動作が予想と違う
正しい知識があれば、これらの問題を避けられますよ。
コロン(:)の使い方
キーと値の区切り
コロンは、YAMLで最も基本的な記号です。
name: Taro
age: 25
city: Tokyo
キー(項目名)と値を区切る役割を果たします。
重要なルール:
コロンの後には、必ずスペースが必要です。
name:Taro # エラー:スペースがない
name: Taro # 正しい
このスペースを忘れると、パースエラーになりますね。
値の中にコロンを含める方法
URLやタイムスタンプなど、コロンを含む値を書きたい場合があります。
引用符で囲む
url: "https://example.com"
time: "12:30:45"
ダブルクォーテーションで囲めば、コロンも普通の文字として扱われます。
シングルクォーテーションも使える
message: 'Note: This is important'
どちらの引用符でも、特殊文字をエスケープできますよ。
ハイフン(-)とリスト表記
リストの作成
ハイフンは、配列(リスト)を表す記号です。
fruits:
- apple
- banana
- orange
各項目の先頭にハイフンを付けることで、リストになります。
インデント規則:
ハイフンの後には、スペースが1つ必要です。
- apple # 正しい
-apple # エラー:スペースがない
インラインリスト
角括弧を使った短縮記法もあります。
fruits: [apple, banana, orange]
短いリストでは、こちらの方が読みやすい場合がありますね。
ネストしたリスト
リストの中にリストを作ることも可能です。
categories:
- name: Fruits
items:
- apple
- banana
- name: Vegetables
items:
- carrot
- tomato
インデントで階層構造を表現します。
引用符(’と”)の使い分け
シングルクォーテーション
最もシンプルなエスケープ方法です。
message: 'Hello, World!'
path: 'C:\Users\Documents'
内部の文字をそのまま扱います。
シングルクォーテーション自体を含める場合:
text: 'It''s a beautiful day'
2つ連続で書くことで、1つのシングルクォーテーションを表現できますね。
ダブルクォーテーション
エスケープシーケンスが使える高機能な引用符です。
message: "Line 1\nLine 2"
path: "C:\\Users\\Documents"
バックスラッシュを使って、改行やタブを表現できます。
よく使うエスケープシーケンス:
\n:改行\t:タブ\\:バックスラッシュ\":ダブルクォーテーション
引用符なしの値
シンプルな文字列なら、引用符は省略できます。
name: John
city: Tokyo
status: active
ただし、特殊文字や数字で始まる場合は注意が必要ですよ。
パイプ(|)とグレーターサイン(>)
パイプ(|)- 複数行の文字列(改行保持)
改行をそのまま保持したい場合に使います。
description: |
This is line 1.
This is line 2.
This is line 3.
結果として、3行の文字列になります。
スクリプトやログメッセージなど、改行が重要な場合に便利ですね。
グレーターサイン(>)- 複数行の文字列(改行を空白に変換)
長い文章を折り返して書きたい場合に使います。
summary: >
This is a very long
text that spans
multiple lines.
実際には、改行が空白に置き換わり、1行の文字列として扱われます。
読みやすさを保ちながら、長い文章を記述できるんです。
インデントの扱い
パイプやグレーターサインの後の行は、さらにインデントします。
script: |
echo "Starting process"
cd /home/user
./run.sh
このインデントで、複数行の範囲を示していますよ。
ハッシュ(#)とコメント
コメントの書き方
ハッシュ記号以降は、コメントとして無視されます。
# これは設定ファイルです
name: Taro # ユーザー名
age: 25 # 年齢(整数)
ドキュメント化や一時的な無効化に使えますね。
インラインコメント
値の後にもコメントを付けられます。
timeout: 30 # seconds
max_retry: 3 # maximum number of retries
設定の意味を説明するのに便利です。
複数行コメント
YAMLには、複数行コメントの専用構文はありません。
各行の先頭にハッシュを付ける必要があります。
# これは
# 複数行の
# コメントです
name: Taro
アンカー(&)とエイリアス(*)

値の再利用
同じ内容を複数箇所で使いたい場合の機能です。
アンカーの定義(&)
defaults: &default_settings
timeout: 30
retry: 3
debug: false
&で名前を付けて、内容を定義します。
エイリアスでの参照(*)
production:
<<: *default_settings
host: prod.example.com
development:
<<: *default_settings
host: dev.example.com
debug: true
*で参照し、設定を再利用できますね。
デフォルト設定を一箇所で管理できるので便利です。
マージキー(<<)
オブジェクトをマージする特別なキーです。
上記の例のように、<<: *anchor_nameの形式で使います。
元の設定を引き継ぎつつ、一部を上書きできるんです。
ブラケット([]と{})
角括弧 – インライン配列
コンパクトにリストを表現できます。
colors: [red, green, blue]
numbers: [1, 2, 3, 4, 5]
通常のハイフン記法と同じ意味ですが、1行で書けます。
波括弧 – インラインオブジェクト
オブジェクト(マップ)を1行で表現します。
user: {name: Taro, age: 25, city: Tokyo}
短い設定なら、読みやすい場合がありますね。
ネストしたインライン記法
組み合わせて使うこともできます。
users: [
{name: Taro, age: 25},
{name: Hanako, age: 23}
]
JSONに近い記法で、プログラマーには馴染みやすいかもしれません。
数値と真偽値の特殊な扱い
自動的な型変換
YAMLは、値の見た目から型を推測します。
age: 25 # 整数
price: 19.99 # 浮動小数点数
enabled: true # 真偽値
disabled: false # 真偽値
引用符なしで書くと、自動的に適切な型に変換されるんです。
文字列として扱いたい場合
数字や真偽値を文字列にしたい場合は、引用符で囲みます。
version: "1.0" # 文字列の"1.0"
code: "00123" # 先頭のゼロを保持
status: "true" # 文字列の"true"
引用符がないと、意図しない型に解釈される可能性がありますよ。
Yes/No、On/Offも真偽値
YAMLでは、様々な表記が真偽値として認識されます。
真(True):
- true, True, TRUE
- yes, Yes, YES
- on, On, ON
偽(False):
- false, False, FALSE
- no, No, NO
- off, Off, OFF
混乱を避けるため、trueとfalseを使うのが推奨されますね。
Nullと空の値
Null値の表現
値がないことを明示的に示せます。
name: Taro
middle_name: null
nickname: ~
nullまたは~(チルダ)で、Null値を表現します。
空文字列との違い
Nullと空文字列は異なります。
value1: null # Null値
value2: "" # 空文字列
value3: # これもNull値
value3のように、何も書かない場合もNull扱いになるんです。
エスケープが必要な文字一覧
特に注意が必要な文字
以下の文字を含む値は、引用符で囲むのが安全です。
# コロンを含む
url: "https://example.com"
# ハッシュを含む
tag: "#important"
# アットマークで始まる
email: "@company.com"
# 波括弧を含む
template: "Hello {name}"
# 角括弧を含む
code: "[ERROR] Failed"
# パーセントを含む
discount: "50%"
引用符で囲めば、これらの文字も安全に扱えますね。
バックスラッシュのエスケープ
Windowsのパスなどで注意が必要です。
# シングルクォーテーション(エスケープ不要)
path: 'C:\Users\Documents'
# ダブルクォーテーション(エスケープ必要)
path: "C:\\Users\\Documents"
# 生の文字列リテラル(最も簡単)
path: 'C:\Users\Documents'
シングルクォーテーションを使うのが、最もシンプルですよ。
インデントのルール
スペースのみ使用
YAMLでは、タブ文字は使えません。
# 正しい(スペース)
parent:
child: value
# エラー(タブ)
parent:
→child: value
必ずスペースでインデントしてください。
一貫したインデント幅
プロジェクト全体で、統一した幅を使います。
# 2スペースインデント(推奨)
root:
level1:
level2: value
# 4スペースインデント
root:
level1:
level2: value
2スペースが最も一般的ですね。
同じレベルは同じインデント
兄弟要素は、同じインデント位置にそろえます。
# 正しい
fruits:
- apple
- banana
- orange
# エラー(インデントが不揃い)
fruits:
- apple
- banana # インデントがずれている
- orange
複雑な値の扱い方
複数行にまたがるリスト
長いリストは改行して書けます。
allowed_hosts:
- example.com
- api.example.com
- cdn.example.com
- staging.example.com
見やすく整理できますね。
ネストした構造
オブジェクトとリストを組み合わせられます。
users:
- name: Taro
email: taro@example.com
roles:
- admin
- editor
- name: Hanako
email: hanako@example.com
roles:
- viewer
階層的なデータを表現できます。
環境変数の参照
多くのツールで、環境変数を埋め込めます。
database:
host: ${DB_HOST}
port: ${DB_PORT}
user: ${DB_USER}
ただし、これはYAML自体の機能ではなく、解析ツール側の機能ですよ。
バリデーションとデバッグ
オンラインツール
YAMLが正しいか確認できるツールがあります。
YAML Lint
Webブラウザで手軽に検証できます。
エラーの場所を指摘してくれるので便利ですね。
エディタの支援機能
Visual Studio CodeやIntelliJ IDEAは、YAMLをサポートしています。
シンタックスハイライト
色分け表示で、構造が分かりやすくなります。
リアルタイム検証
入力中にエラーを検出してくれますよ。
自動整形
インデントを自動で揃える機能があります。
よくあるエラーメッセージ
「mapping values are not allowed here」
コロンの後のスペース忘れが原因です。
「could not find expected ‘:’」
キーと値の構造が正しくありません。
「found character that cannot start any token」
特殊文字を引用符で囲んでいない可能性があります。
実践的なTips
コメントを活用する
設定の意味を必ず記録しましょう。
# データベース接続設定
database:
host: localhost # 開発環境用
port: 5432 # PostgreSQLデフォルトポート
max_connections: 10 # 最大接続数
将来の自分やチームメンバーへの配慮になりますね。
長い行を分割する
パイプやグレーターサインで読みやすくします。
description: >
This is a very long description
that would be hard to read
on a single line.
デフォルト値の明示
アンカーとエイリアスで、設定を再利用します。
defaults: &defaults
timeout: 30
retry: 3
production:
<<: *defaults
host: prod.example.com
staging:
<<: *defaults
host: staging.example.com
保守性が大幅に向上しますよ。
セキュリティ上の注意点
機密情報の扱い
パスワードやトークンをYAMLに直接書かないようにしましょう。
環境変数の使用
api_key: ${API_KEY}
password: ${DB_PASSWORD}
シークレット管理ツール
HashiCorp VaultやAWS Secrets Managerなどを活用します。
バージョン管理
機密情報を含むYAMLファイルは、Gitにコミットしないでください。
# .gitignore
config/secrets.yml
*.secret.yml
.gitignoreに追加して、誤ってコミットするのを防ぎますね。
まとめ:YAML特殊文字をマスターしよう
YAML特殊文字の正しい理解は、エラーのない設定ファイル作成の基本です。
各記号の意味を知り、適切にエスケープすることで、確実に動作するYAMLを書けます。
この記事の重要ポイント:
- コロンの後には必ずスペースが必要
- 特殊文字を含む値は引用符で囲む
- ハイフンでリスト、コロンでキーバリューを表現
- パイプ(|)とグレーターサイン(>)で複数行文字列
- アンカー(&)とエイリアス(*)で設定を再利用
- インデントは必ずスペースで統一
- ハッシュ(#)でコメント追加
- オンラインツールやエディタで検証する
まずは簡単な設定ファイルから始めて、徐々に複雑な構造に挑戦してみましょう。
実際に書きながら学ぶことで、YAML特殊文字の扱いが身についていきますよ。

コメント