🧰 UtlKit

YAML フォーマッタの使い方: コメントが消え, エイリアスは完全なコピーに展開され, 3.0 は 3 になる. フォーマットとミニファイの 2 モード, 2 か 4 スペースのインデント, 行番号と列番号付きエラーメッセージまで具体例で説明

YAML フォーマッタの正確な挙動を具体例で説明します. コメントの破棄, エイリアスの完全コピー展開, キー順の維持(整数風キーを除く), 数値の正規化, ミニファイモードの flow スタイル, 行番号と列番号付きエラーメッセージ.

YAML は Docker Compose, Kubernetes, CI/CD パイプライン, Ansible のデフォルト設定フォーマットで, YAML フォーマッタが解決するのはこれらのファイルをもう一度読みやすくすることです. 任意の YAML ドキュメントを貼り付け, 2 つのモードのどちらかを選び, ツールはブラウザ内でドキュメント全体を一貫した間隔で再出力します. 何も保存され, アップロードもされず, パーサーとシリアライザはどちらもあなたのマシン上で動きます.

YAML を貼り付けてモードを選ぶ

ライブ再整形はありません. ボタンを押したときだけドキュメントが処理されます. フォーマットは既定のモードで, ドキュメントをブロックスタイル, つまり 1 行 1 キーのレイアウトで再構築します. ミニファイは別の目標を向いており, パーサーが読める最もコンパクトな表現を生成します. 小さなインデントセレクタでフォーマットは 2 スペースと 4 スペースを切り替えられます. ミニファイは常に 2 スペースなので, このセレクタはフォーマットモードでのみ表示されます.

フォーマットがすること: きれいな 1 つのブロックスタイル・ドキュメント

フォーマットはドキュメントのすべてのレベルをあなたが選んだインデントに揃えます. 入れ子になったマッピングとシーケンスは固定オフセットに整列し, 行末のスペースは消え, 1 レベルは常に 1 ステップのインデントになります. 長い値は決して折り返されません. 400 文字の値も 1 行のままで, 設定ファイルでは構造の可読性が行長より重要だからです.

ミニファイがすること: ブロックのトップレベルより下の flow スタイル

ミニファイはドキュメントを 1 行に圧縮しません. これは多くの人の予想を裏切ります. トップレベルはブロックスタイルのままですが, トップレベルのキーの下にある各値は flow 形式で書かれます. 文字列のリストは items: [a, b] のようになり, 入れ子のマッピングは a: {b: [1, 2]} のようになります. トップレベルのマップのリストは 1 行 1 つの flow マップになり, ダッシュと開き括弧で始まります. flow では誤読されかねない値, たとえば y という名のキーは, 意味を正確に保つためにクォートされます.

フォーマッタが捨て, 書き換えるもの

出力を diff する前に知っておくべきは 3 つのことです. コメントは捨てられます. パーサーはまずドキュメントをデータ構造に変換し, コメントはその工程を生き残れません. アンカーとエイリアスは解析時に理解されますが, シリアライザは参照を出力しないよう設定されており, すべてのエイリアスは指す値の完全なコピーとして戻ります. 数値も正規化されます. 3.0 は 3 に, 1e5 は 100000 に, 0x10 は 16 になり, 空の値, チルダ, null はどれも null と出力され, 空の文字列はクォート付きの空の文字列のままです.

キーの順序: 維持, 例外は 1 つ

フォーマッタはキーをソートしません. 文字列キーはドキュメント内の順序をそのまま保ち, zebra, ant, m の順に並んだファイルは同じ順で戻ってきます. ソートのように見える例外が 1 つあります. 整数のように見えるキー, たとえば 123 は, マッピングの先頭に移動します. これはフォーマッタが順序を選んだのではなく, 解析済みドキュメントを保持する JavaScript オブジェクトのプロパティ列挙の仕方で, 整数風のキーは常に先頭に来ます.

行番号と列番号付きエラーメッセージ

不正な YAML は曖昧な失敗を返しません. パーサーは行番号と列番号 (どちらも 1 始まり) で問題を報告し, 壊れた場所へ直接ジャンプできます. 重複キーも同じ方法で拒否され, コピーしたブロックがうっかり 2 回入ったときに役立ちます. 1 つだけ違う場合があります. 入力に 2 つ目のドキュメントマーカーがあることもエラーですが, そのメッセージには位置がなく, パーサーがストリームレベルで止まるためです. 何も貼り付けると, 専用のメッセージが表示されます.

入れ替え, クリア, 次のステップ

2 つの小さなコントロールがワークフローを締めます. 入れ替えボタンは出力があるときに表示され, 出力を入力へコピーして出力をクリアします. 段階的な修正が速くなります: フォーマット, 直したい値を見つける, 入れ替え, 編集, もう一度フォーマット. クリアは両側とエラー行を空にします. ページのデータは保存されないため, 機密の設定内容はブラウザの外へ出ません. データが JSON として始まる場合は, まず JSON フォーマッタを走らせてから, JSON/YAML 変換でそのまま変換できます. XML 設定は XML フォーマッタで同じ扱いを受け, マークアップファイルは HTML フォーマットの解説記事で, 保護スクリプトブロック付きの同じフォーマットとミニファイの仕組みを学べます.

関連ツール

よくある質問

フォーマット時に YAML のコメントは保持されますか?

いいえ. フォーマッタはまずドキュメントをデータ構造に解析し, コメントはその構造の一部ではないため, フォーマットでもミニファイでも出力から消えます. コメントを残す必要があるなら, エディタやバージョン管理に残し, 整形後のコピーには残さないでください.

なぜ私のアンカーとエイリアスがなくなったのですか?

パーサーはアンカーとエイリアスを理解しますが, シリアライザは参照を出力しないよう設定されています. すべてのエイリアスは指す値の完全なコピーとして戻り, 結果にはアンカー名が出ません. 内容の重複は, 自己完結したドキュメントを得るための代価です.

ミニファイはドキュメント全体を 1 行にしますか?

いいえ. トップレベルはブロックスタイルのまま, トップレベルのキーの下にある各値は items: [a, b] や a: {b: [1, 2]} のようなコンパクトな flow 形式で書かれます. トップレベルのマップのリストは 1 行 1 つの flow マップになります. どちらのモードでも長い行は折り返されません.

なぜ私のキーの一つが先頭に移ったのですか?

文字列キーは元の順序を保持し, アルファベット順へのソートは行われません. 例外は整数のように見えるキー, たとえば 123 です. 解析済みドキュメントは JavaScript オブジェクトで保持され, 整数風のキーは常に他のキーより前に列挙されるため, そのキーが先頭に飛びます.

エラーメッセージはどうなりますか?

構文の問題は行番号と列番号 (どちらも 1 始まり) を伴うエラーメッセージを返し, 壊れた場所へ直接ジャンプできます. 重複キーも同じ方法で拒否されます. 入力に 2 つ目のドキュメントマーカーがあることもエラーですが, そのメッセージには位置がありません. パーサーがストリームレベルで止まるためです. 何も貼り付けると, 専用の空入力メッセージが表示されます.

関連記事