YAML バリデーター&フォーマッター
フォーマットjs-yaml で YAML を検証・正規化・圧縮します。インデントと引用符を整え、複数ドキュメント(---)を分割します。純YAML処理でフォーマット変換は行いません。
リモート URL の取得は行いません。JSON を直接貼り付けてください。
このページの内容
YAML フォーマッターとは?#
YAML フォーマッターは、漂ってしまった設定ファイル——スペースに混じるタブ、不統一なインデントステップ、一部の場所で使われ他では使われないクォート、誰かが定義して再利用しなかったアンカー——を、きれいで予測可能な形に正規化します。また、YAML が悪名高いあの問題を捉えます: 見た目は問題なく、こっそり別の意味になるドキュメント。YAML は空白に意味を持っており、裸の単語が何を意味するかについての暗黙の規則に満ちているからです。
このページは YAML を解析し、js-yaml を通じて制御された方法で再出力します。整形は選んだステップ(2 または 4 スペース)で再インデントし、行折り返しをオフにして各値が独自の行に置かれるようにし、アンカーとエイリアスを平易な繰り返し内容に展開して出力が完全に自己完結するようにします。圧縮は同じデータをフロー表記——{a: 1, b: [2, 3]}——で再ダンプします。YAML は JSON や CSS のように空白を単に削除できないため、これが YAML におけるコンパクト形式として最も近いものです。どちらのモードを選んでも、ドキュメントはまず解析されるため、スペースがあるべき場所にあるタブや、後置スペースを欠いたコロンは、黙って間違ったデータ構造を生成するのではなく、行と列で報告されます。
使い方#
- 左の入力ペインに YAML を貼り付けます。プレースホルダーが最小のドキュメントを示します。あるいはサンプルをクリックします。
- ツールバーのモードボタンを選びます:
- 整形 — 再インデントし、行折り返しを無効にし、アンカー/エイリアスを展開し、各コレクションをブロックスタイルで出力します。
- 圧縮 — すべてのコレクションをできるだけ少ない行数でフロースタイルで出力します。フローコレクションは明示的なため、インデントは無関係になります。
- 整形モードでは、インデントを選びます: 2 または 4 スペース。
- 必要に応じて引用符スタイルを選びます: 自動(スカラーが実際にクォートを必要とするときだけクォートする——既定)、シングル (’…’)、ダブル (”…”)。これはクォートが必要なスカラーのクォート文字を正規化し、クォートを必要としない平易な値にクォートを強制することはありません。
- 出力ペインで結果を読みます。ヘッダーが出力サイズを示し、コピーで取り出します。クリアは両ペインをリセットします。
解析が失敗すると、ステータスバーが問題の行と列を報告します——js-yaml の YAML エラーは位置を持ち、このページはそれを直接表示します。
主な特徴#
- 同じ解析から整形と圧縮。 両モードが最初にドキュメントを検証するため、どのボタンを押しても、構造エラーは位置とともに一度報告されます。
- アンカーを展開。
&anchor/*alias参照は解決されてインラインに書き出され(noRefs)、出力が 3 画面前に定義された名前に依存することはありません。結果は誰にでも渡せる自己完結型ドキュメントです。 - 行折り返しなし。 長い値は列幅制限で折り返されず(
lineWidth: -1)、各値が正確に 1 行を占めます——diff しやすく、読みやすい。 - 任意のクォート正規化。 ドキュメント全体でクォート文字を一貫させるためにシングルかダブルを選ぶか、自動のままで本当にクォートが必要な値だけにクォートを当てます。
- 複数ドキュメント対応。
---で区切られた入力は複数ドキュメントとして解析され、---セパレータを保ったまま再出力されます——Kubernetes マニフェストや類似の複数ドキュメントファイルに便利です。 - YAML 爆弾を防御。 入れ子の深さキャップが、病的に深いドキュメントが危険なものに膨らむのを防ぎます。
- 厳格にクライアントサイドで、1 MB を超える入力には Web Worker を使い、ページの応答性を保ちます。
実例#
再利用されたアンカーとやや不均一なスタイルを持つサービス設定:
入力:
service:
name: &name "api-gateway"
host: example.com
replicas: 3
id: *name
logging:
level: info
outputs: [{name: stdout}, {name: file}]
2 スペース、自動クォートで整形をクリック:
service:
name: api-gateway
host: example.com
replicas: 3
id: api-gateway
logging:
level: info
outputs:
- name: stdout
- name: file
見て取れることが 2 つ。アンカー &name とエイリアス *name はどちらもリテラル値 api-gateway に解決されたため、id は平易な値として読まれ、ドキュメントはもはやアンカーに依存しません。そしてフロー形式のリスト [{name: stdout}, {name: file}] はブロックリストに書き直され、1 行に 1 エントリ——別バージョンと diff するのも、眺めるのもはるかに簡単です。同じ入力で圧縮をクリックすると、同じデータがフロー形式で戻ります:
service: {name: api-gateway, host: example.com, replicas: 3, id: api-gateway}
logging: {level: info, outputs: [{name: stdout}, {name: file}]}
すべてのコレクションがインラインになりました。インデントと改行がなくなったためバイト数は下がりますが、意味は同一です——それこそが、空白に意味を持つ形式にとって圧縮が意味すべきことです。
よくある質問#
コメントはどこへ行きましたか?#
js-yaml を通じた YAML の往復変換はコメントを解析して破棄します——ライブラリにはコメント保持の再ダンパーがありません。コメントは解析中には許容されます(エラーを引き起こすことはありません)が出力には現れません。コメントが重要な文脈を運ぶなら、元のファイルを真実のソースとして保持し、このツールの出力を標準的な機械形式として扱ってください。
YAML の整形と圧縮の違いは何ですか?#
整形はきれいなブロックスタイルでドキュメントを書き直します: 選んだステップでインデントされた入れ子のマッピングとシーケンス、1 行に 1 値、折り返しなし。圧縮は同じデータをフロースタイルで書き直します: 1 行上の {key: value} や [a, b] コレクション。どちらも最初に同じように解析し、データをシリアライズし戻す方法が違うだけです。
YAML/JSON コンバーターとどう違いますか?#
このツールは YAML 入力、YAML 出力です——YAML ドキュメントを正規化または圧縮し、YAML を返します。このサイトの YAML/JSON コンバーターは 2 つの形式の間で翻訳します。同じ形式を、より整った形で欲しいならこのページを、実際に JSON が欲しいならコンバーターを使ってください。
YAML はどこかにアップロードされますか?#
いいえ。js-yaml はページに同梱され、ブラウザ内で走ります。1 MB を超える入力は解析が Web Worker 内で行われますが、それでもローカルです——何も端末から外に出ません。