YAML整形ツールでできること
YAML は、Docker Compose ファイル、Kubernetes のマニフェスト、GitHub Actions のワークフロー、Ansible のプレイブック、そして多くのアプリの設定ファイルで使われている形式です。構造をインデントで表すため、スペースが1つずれただけでファイルの意味が変わったり、デプロイが止まったりします。このツールは YAML のインデントとスペースをそろえて書き直し、厳密なパーサーでチェックするので、問題をパイプラインではなくここで見つけられます。
操作は2つです。
- 整形:インデント、コロンやハイフンの後のスペース、
[ ]と{ }の中のスペースをそろえます。 - 検証:ファイルを解析して最初のエラーを報告します。正しい場合は短い概要を表示します。
使い方
- 左のボックスに YAML を貼り付けます。貼り付けた時点で整形されます。
.yamlや.ymlのファイルには ファイルを開く を、例を見たいときは サンプル を使うこともできます。 - インデント(スペース2つかスペース4つ)と 行の幅 を選びます。
"text"より'text'を使うプロジェクトなら、シングルクォート をオンにします。- 整形 または 検証 を押します。Ctrl+Enter で最後の操作をもう一度実行できます。
- コピー を押すか、ダウンロード で
.yamlファイルとして保存します。
整形前と整形後
スペースがばらばらで、インデントがスペース4つの Docker Compose ファイルです。
version: "3.8"
services:
web:
image: "nginx:latest"
ports:
- "80:80"
environment:
- DEBUG=false
db:
image: postgres:16
スペース2つで 整形 した結果です。
version: "3.8"
services:
web:
image: "nginx:latest"
ports:
- "80:80"
environment:
- DEBUG=false
db:
image: postgres:16
フロー形式のコレクションはスペースが均等になります。tags: [ api, v2 ] と limits: {cpu: 1, memory: 512} は次のようになります。
tags: [api, v2]
limits: { cpu: 1, memory: 512 }
コメントは残ります。行末コメントの前の余分なスペースは整えられますが、コメントはその行に残ります。
# Database settings
db:
host: localhost # local only
port: 5432
シングルクォート をオンにすると、name: "web" は name: 'web' になります。"it's here" のようにアポストロフィを含む文字列は、エスケープが不要になるようダブルクォートのまま残ります。
検証で見つかるエラー
ツールによって YAML パーサーの厳しさは異なります。このツールは、ほかのツールでは通ってしまう問題も指摘します。以下は実際に表示されるメッセージです。
| 問題 | メッセージ |
|---|---|
| 同じキーが2回ある | 3行目、1列目:Map keys must be unique |
| インデントにタブを使っている | 2行目、1列目:Tabs are not allowed as indentation |
| 1行だけスペース1つ分深くインデントしている | 2行目、9列目:Nested mappings are not allowed in compact mappings |
エラーの本文は YAML ライブラリのメッセージをそのまま表示するため、英語のままです。
特に重要なのは重複キーのチェックです。name: web、port: 80、name: api のようなファイルでは、多くのローダーが警告なしに最後の name だけを残します。入力欄で表示 を押すと、その行へ移動します。
--- で区切られた2つのドキュメントを含む正しいファイルでは、検証 が 正しい YAML です。ドキュメントは2件です。 と報告します。
ヒントと制限事項
- キーの並べ替えや値の変更は行いません。
yes、on、010も書いたとおりに残ります。 - 長い文字列の折り返しは変えません。折り畳み(
>)ブロックやリテラル(|)ブロックの中身もそのままです。 - アンカーとエイリアス(
&name、*name)も書いたとおりに残ります。 - YAML には一般的に使われる圧縮形式がないため、「圧縮」ボタンはありません。コンパクトなデータが必要な場合は、JSON YAML 変換ツール で YAML から JSON の方向に変換してください。
YAMLを整形するほかの方法
VS Code:Red Hat の YAML 拡張機能を入れると、整形機能と、Kubernetes のマニフェストなどに対するスキーマチェックが使えるようになります。インストール後に「ドキュメントのフォーマット」を実行してください。
yq:Go 版の yq(Mike Farah 作)は YAML を読み込んで書き直します。yq '.' file.yaml は、ファイルを yq 自身の一貫したスタイルで出力します。同じツールで値の検索や編集もできます。
Prettier:プロジェクトですでに Prettier を使っているなら、.yaml と .yml のファイルをこのページと同じルールで整形できます。
yamllint:ファイルを書き直さずにスタイルと構文をチェックする Python 製のツールで、CI で使うと便利です。
関連ツール
JSON と YAML を相互に変換するには JSON YAML 変換ツール を使ってください。JSON ファイルには JSON整形ツール を、Maven や Android などの XML 設定ファイルには XML整形ツール をお使いください。