Skip to content

YAMLYAML

YAML フォーマッター

乱れたYAMLを整えます — コメントはすべてそのまま。

YAML

YAMLをここに貼り付けるか、ファイルをページにドロップ

YAML

入力するとYAMLがここに表示されます

無料・無制限 · 登録不要 · インデント、空白、引用符を正規化 — 書いたコメントはすべて保持されます。

正規化されるもの

  • インデント — 入力がどんな混在であっても、各階層は 2 または 4 スペースに書き直され、キーの下にネストしたシーケンスはそのキーの下にインデントされます。
  • 空白 — コロンとリストのハイフンの後に空白一つ、行内コメントの前に空白一つ。連続する空行は一つにまとめられます。
  • 改行コードと行末の空白 — Windows の改行は LF になり、行末の空白は取り除かれます。
  • フロー形式のコレクション — [80, 443] は [ 80, 443 ] になります。ブロック形式に展開されず、一行のままです。
  • YAML 1.2 での引用符なしの数値 — 正規形で出力されるため、022 は 22、+1 は 1、1e3 は 1e+3 になります。YAML 1.1 モードでは 0644 のような先頭ゼロの八進数が保持されます。
  • 折りたたみスカラー(>) — 段落ごとに一行に整形され、段落の区切りは保持されます。
  • キーの順序 — 「キーを並べ替え」をオンにしたときだけ。それ以外はキーは置いた場所のままです。

書いたとおりに保持されるもの

  • すべてのコメント — 独立した行、値の後ろ、セクション間のブロックのいずれでも。
  • 引用符 — シングルはシングルのまま、ダブルはダブルのまま、引用符なしは引用符なしのまま。
  • アンカー、エイリアス、マージキー — &defaults、*defaults、<<: は展開されず、そのまま残ります。
  • リテラルブロックスカラー(|) — 末尾の改行も含めて一行ずつそのまま。
  • シーケンスの順序は常に、キーの順序は並べ替えない限り。
  • 複数文書ファイルの文書区切り(---)と %YAML ディレクティブ。
  • 長い行 — 何も折り返されないため、長い URL やコマンドは一行のままです。
  • 空の値、~、null、そして書いたとおりの真偽値。True は True のままです。

なぜ多くのフォーマッターはコメントを消すのか

オンラインのYAMLツールはほぼすべて同じ仕組みです。ドキュメントをプレーンなデータに解析し、そのデータを出力し直す。コメントはデータではないので、この往復を生き延びません。設定ファイルは設定よりコメントの方が多いことも珍しくなく、それを失うことは値の背後にある理由を失うことです。

このページはサイトの他の部分とは別のパーサーを使っています — 具象構文木を保持するパーサーで、各コメントはそれが説明する行に結び付いたままになります。そのためフォーマッターは構文にやや厳格でもあります。忠実に再構築できるだけ正確にドキュメントの形を理解する必要があるからです。

コメントも構造も残る

インデントは選んだ幅に正規化され、コメントは置いた場所に残ります。

整形前

# Production cluster
server:
      host:   0.0.0.0
      port: 8080   # internal only
features:
    - fast
    -    private

整形後

# Production cluster
server:
  host: 0.0.0.0
  port: 8080 # internal only
features:
  - fast
  - private

整形前と整形後の例をもっと見る

このページのすべての例は、上のツールでデフォルトの 2 スペースインデントを使うと、まさにこのとおりに整形されます。

アンカー、エイリアス、ブロックスカラーは書いたまま

4 スペースでインデントされた Docker Compose の断片です。アンカー、マージキー、リテラルブロックはそのままで、変わるのはインデントだけです。

整形前

x-defaults: &defaults
    restart: always
    logging: json

services:
    web:
        <<: *defaults
        image: nginx
        command: |
            sh -c "echo starting"
            exec nginx

整形後

x-defaults: &defaults
  restart: always
  logging: json

services:
  web:
    <<: *defaults
    image: nginx
    command: |
      sh -c "echo starting"
      exec nginx

レビューしやすい差分のためのキー並べ替え

同じファイルで「キーを並べ替え」をオンにしたものです。マッピングのキーはすべての階層で並べ替えられ、シーケンスの順序は保たれ、コメントは説明しているキーと一緒に移動します。

整形前

replicas: 3
name: api
# Ports the service exposes
ports:
  - 443
  - 80
image: api:1.2

整形後

image: api:1.2
name: api
# Ports the service exposes
ports:
  - 443
  - 80
replicas: 3

フォーマッター、バリデーター、コンバーターのどれを使う?

3 つとも同じエンジンがブラウザ内で動きます。どれを選ぶかは、ファイルが次にどこへ行くかで決まります。

ファイルが YAML のままならフォーマッター

複数人が編集した Compose ファイル、Helm の values ファイル、CI パイプライン。インデントを揃えたいし、値の意図を説明するコメントも残したい。それはコンバーターの往復では決して得られないものです。

何かが解析できないならバリデーター

YAML バリデーターは同じエンジンで、出力ペインを診断に集中させたものです。すべてのエラーに行、列、平易な原因、修正案が付き、YAML 1.1 と 1.2 で読み方が変わる値はすべてマークされます。

ファイルが JSON を話す場所へ行くならコンバーター

API リクエストのボディ、テストフィクスチャ、jq のパイプライン。YAML to JSON コンバーターはコメントを削除し(JSON にはコメントの構文がありません)、削除した数を伝え、アンカーを展開し、複数文書のストリームを配列または JSON Lines として出力できます。

よくある質問

このYAMLフォーマッターはコメントを保持しますか?

はい。フォーマッターは具象構文木を保持するパーサーで文書を解析するため、独立した行のコメント、値の後ろのコメント、セクション間のコメントブロックはすべて元の位置に出力されます。キーの並べ替えをオンにしても、コメントはその直下のキーに付いたまま移動します。ほとんどのオンラインフォーマッターは YAML を単なるデータに変換してから出力し直すため、コメントをすべて失います。このサイトの JSON コンバーターも避けようがなく同じことをしますが、削除した数を伝えます。

整形するとデータは変わりますか?

構造とテキストには手を付けません。引用符は書いたとおり、アンカー、エイリアス、マージキーはその場所のまま、ブロックスカラーの内容はそのまま、キーの順序も並べ替えを指定しない限り保持されます。正規化されるのは 2 点です。引用符なしの数値は YAML 1.2 では正規形で出力されるため、022 は 22、+1 は 1、1e3 は 1e+3 になります。バージョンを 1.1 に切り替えると 0644 のような先頭ゼロの八進数は保持されます。折りたたみスカラー(>)は段落の区切りを保ったまま整形し直されます。値の表記を正確に保つ必要があるなら引用符で囲んでください。出力の下の警告には、YAML 1.1 と 1.2 で読み方が変わる引用符なしの値がすべて列挙されます。

フォーマッターはどのインデントを使いますか?

デフォルトは 2 スペース、選べば 4 スペースです。入力のインデントがどうであれ、文書のすべての階層が同じ幅になり、キーの下にネストしたシーケンスはそのキーの下にインデントされます。YAML はタブによるインデントを禁止しているためタブの選択肢はなく、タブでインデントされた文書は整形されずに行番号付きのエラーとして報告されます。

キーを並べ替えられますか?

はい。「キーを並べ替え」オプションは、すべてのマッピングのキーをすべての階層でアルファベット順に並べます。複数の人やツールが編集するファイルでは、差分やコードレビューが楽になります。リストでは順序に意味があるため、シーケンスの順序は保たれます。コメントは所属するキーと一緒に移動します。デフォルトではオフです。YAML ではキーの順序に意味はありませんが、ファイルを読む人にとっては意味があることが多いからです。

複数文書のYAMLに対応していますか?

はい。--- で区切られた複数の文書を含むファイルは文書ごとに整形され、区切りは保持されます。Deployment、Service、Ingress を含む Kubernetes マニフェストは一つのファイルのままです。先頭の --- や %YAML ディレクティブも保持され、ステータス行には整形した文書の数が表示されます。

コンバーターが受け付けるYAMLをフォーマッターが拒否するのはなぜですか?

フォーマッターはコンバーターより厳格なパーサーを使います。コメントを元の位置に戻して文書を再構築するには、文書の正確な形を理解する必要があるからです。コンバーターでは解析できるのにここで失敗する文書は、YAML バリデーターと同じように、行、平易な説明、修正案とともに報告されます。「よくある YAML エラー」のガイドでは、解析失敗のほぼすべての原因となる 6 つの間違いを順に説明しています。

yamllint や Prettier と同じものですか?

いいえ。ただし相性は良いです。yamllint はスタイルと構文の問題を報告しますがファイルを書き換えません。このフォーマッターはインデントと空白を書き換えますが、行の長さのようなルールは強制しません。Prettier の YAML 出力はここで得られるものに近く、プロジェクトですでに実行しているならこのページは不要です。このページは、今クリップボードにあるファイルのために、何もインストールせず、何もアップロードせずに使うためのものです。

整形するとき、YAMLはアップロードされますか?

いいえ。フォーマッターはブラウザのタブ内で動く JavaScript です。yaml ライブラリはページと一緒に読み込まれ、文書を送信するサーバーエンドポイントは存在しません。ページを読み込んでからインターネットを切断しても整形を続けられます。整えたいファイルの多くは Kubernetes マニフェスト、Docker Compose ファイル、CI パイプラインで、ホスト名やレジストリ、時には秘密情報を含むため、これは重要です。

コマンドラインでYAMLを整形するには?

yq -i . config.yaml はファイルをその場で整形し、コメントを保持します。-i を外せば結果を出力します。Prettier がインストールされていれば、npx prettier --write "**/*.{yml,yaml}" でプロジェクト内のすべての YAML ファイルを整形できます。Python では ruamel.yaml のラウンドトリップモードがコメントを保持したまま整形でき、これは PyYAML にはできないことです。一つのファイルだけなら、上のフォーマッターに貼り付けてください。