YAML パーサー
YAML(YAML Ain't Markup Language)は、設定ファイルで広く使われている人間が読みやすいデータシリアライゼーション形式です。このツールはアンカー、エイリアス、マルチドキュメントストリームを含むYAML 1.2仕様を完全にサポートし、結果をインタラクティブなツリービューで表示します。
仕様
よくあるユースケース
- Kubernetesマニフェストの解析と検証(Deployment、Service、ConfigMap)
- Docker Composeおよびdocker-compose.ymlファイルの読み取り
- GitHub Actions、GitLab CI、またはCircleCIワークフローのデバッグ
- Ansibleプレイブックをプログラム処理用にJSONに変換
- Helm chartのvaluesファイルの検証
機能
- YAML 1.2仕様の完全サポート
- 再利用可能なコンテンツのためのアンカー(&)とエイリアス(*)の処理
- マルチドキュメントストリームの解析(---セパレータ)
- JSON、TOML、またはXMLへの変換
- 行固有のエラーメッセージによる構文検証
- ネストされた構造のためのインタラクティブなツリービュー
例
Kubernetes Deployment
試してみる →レプリカされたnginx Podを定義するKubernetes Deploymentマニフェスト。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginxDocker Compose
試してみる →Webとデータベースサービスを定義するDocker Composeファイル。
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secretヒント
- YAMLはインデントに敏感です。タブではなくスペースを使用してください。
- 特殊文字を含まない限り、文字列に引用符は不要です。
- アンカー(&name)とエイリアス(*name)を使用してコンテンツの繰り返しを避けましょう。
- 複数行の文字列には |(リテラル)または >(フォールド)ブロックスカラーを使用できます。
解説 YAML パーサー
YAML(YAML Ain't Markup Language)は、DevOps、クラウドインフラストラクチャ、アプリケーション設定で広く使用されている人間が読みやすいデータシリアライゼーション形式です。インデントベースの構文は角括弧や波括弧の視覚的ノイズを排除し、Infrastructure as Codeツール、CI/CDパイプライン、コンテナオーケストレーションの優先フォーマットとなっています。
YAMLの核となる強みは可読性です。Kubernetes Deploymentマニフェスト、GitHub Actionsワークフロー、Docker ComposeファイルはYAMLで書かれていれば一目で理解できます。この形式はスカラー(文字列、数値、ブール値、null、日付)、シーケンス(配列)、マッピング(キーと値のペア)をサポートしています。文字列は通常引用符を必要とせず、複数行コンテンツにはリテラルブロック(|)またはフォールドブロック(>)を使用でき、アンカー(&)とエイリアス(*)により値を一度定義して複数回参照でき、大きな設定ファイルでの繰り返しを減らすことができます。
YAML 1.2(現在の仕様)はJSONの厳密なスーパーセットです。つまり、すべての有効なJSONドキュメントは有効なYAMLでもあります。同じファイル内でYAMLとJSON構文を混在させることができます。---セパレータによるマルチドキュメントサポートにより、単一ファイルに複数の独立したドキュメントを埋め込むことが可能で、KubernetesマニフェストやHelmテンプレートでよく見られます。
YAMLの主な落とし穴は空白への敏感さです。タブはインデントに使用できず(スペースのみ)、位置がずれたキーはドキュメント構造を暗黙的に変更してしまう可能性があります。「ノルウェー問題」——引用符のない「no」「yes」「on」「off」がブール値として解釈される——もバグの悪名高い原因です。YAML 1.2はこれらの問題の一部を修正しましたが、多くのパーサーはデフォルトでYAML 1.1のルールを使用しています。
YAML 1.1はyes/no、on/off、true/falseとその大文字バリアントを含むブールリテラルの広いセットを定義しています。NOのような国コードはブール値のfalseとして解析され、文字列「on」はtrueになります——悪名高い「ノルウェー問題」です。YAML 1.2はブール値をtrueとfalseのみに制限していますが、多くの人気パーサー(PyYAMLを含む)はデフォルトでYAML 1.1のルールを使用しています。安全な対処法は、誤解される可能性のある文字列には常に引用符を付けることです。タブ文字もインデントには厳密に禁止されており、スペースのみが許可されています。インデントにタブがあるとパースエラーが発生します。各レベル2スペースが最も一般的な規約です。
YAMLは複数行文字列のために2つのブロックスカラースタイルを提供しています。リテラルブロックスカラー(|)は改行をそのまま保持し、埋め込みスクリプトやSQLクエリに最適です。フォールドブロックスカラー(>)は連続する行をスペースで結合し、長い説明文や段落に適しています。両方のスタイルは修飾子をサポートしています:|- と >- は末尾の改行を除去し、|+ と >+ はすべての末尾の改行を保持します。
アンカーとエイリアスはYAMLのコンテンツ再利用メカニズムです。アンカー(&name)はノードを後で参照するためにマークし、エイリアス(*name)はそのノードをドキュメント内の別の場所に挿入します。マージキー(<<: *defaults)と組み合わせることで、このパターンは共有設定を一度定義して複数のマッピングにマージすることを可能にします。多くのジョブが共通の環境変数、キャッシングルール、デプロイメントステップを共有するCI/CD設定で特に有用です。