100% ローカル — データがブラウザの外に出ることはありません

YAMLフォーマッタ|コメントもアンカーも残したまま整えます

YAMLを字下げし直します。書いてある内容は動きません。コメントもアンカーもそのまま残るので、コミットしたかったファイルのまま、形のほうだけがきれいに整えられます。

高速 プライベート Cookieゼロ
インデント

YAML 入力

YAML 出力

このツールの動作

字下げを整えます。書き直しはしません。

# 本番データベース——変更前に当番へ連絡
db:
    host: db.example.com   # 手動切り替え
    port: 5432

字下げは空白二つ。それ以外はあなたが書いたとおりです。db の上のコメント、host の後ろのコメント、各スカラーの引用の仕方もそのままです。

素直な実装はコメントを消してしまう

YAML の整形器を書く素直な方法は、ファイルを値として解析し、その値を書き戻すことです。そしてそれは誤りでもあります。しかも痕跡を残さない二つの意味で。

すべてのコメントが消えます。 値にコメントはありません。コメントは文書の中に住んでおり、データの中にはないからです。なぜこのタイムアウトなのか、誰に連絡するのか、触ると何が壊れるのか——誰かが書き残した設定ファイルは、黙って返ってきます。出力は妥当な YAML なので、何が失われたのかを告げるものもありません。

アンカーが展開されます。 次の例が、

base: &defaults
  restart: always
  logging: json
web:
  <<: *defaults
worker:
  <<: *defaults

同じブロックの三つの複製になります。入力より長くなり、相互の結び付きは消えます。次に restart を変える人は、三か所すべてを探すことになります。

この整形器は文書を保ち、配置だけを変えます。

曖昧な値には手を触れない

country: NO は country: NO のままです。

YAML 1.2 の読み手はこれを文字列 NO と見ます。YAML 1.1 の読み手——PyYAML——は真偽値の偽と見ます。引用符を足せばその問いに決着が付きますが、決着を付けるのは著者の役目であって、整形器の役目ではありません。PyYAML 向けに書かれたファイルなら、本当に偽のつもりだったかもしれないのです。

変換の道具はそこに引用符を付けます。それで正しいのです。彼らは、文字列だと分かっている値から出発しているからです。整形器が出発するのはファイルであり、ファイルは何も言いません。

一つのファイルに複数の文書

--- は YAML の文書を区切ります。一つのファイルはいくつでも文書を持てます。それぞれをその場で整形し、区切りも残します。Kubernetes のマニフェストの多くはこの形で、これは流れであって誤りではありません。

設定

字下げ — 既定は空白二つ。任意に変えられます。

キーの並べ替え — 再帰的に辞書順へ並べ替えます。コメントは、付いていた項目に従って移動します。食い違った二つのファイルを比べるときに便利です。キーの順序に意味があるなら切っておいてください。設定ファイルでは意味があることが多いものです。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

コメントは残りますか。
残ります。それがこのページの主題です。文書を値として読み、その値を書き直す整形器は**すべてのコメントを削除**します。しかも結果は妥当な YAML なので、何も警告されません。このツールは文書そのものを保ち、配置だけを変えます。
アンカーやマージキーはどうなりますか。
書いたまま残ります。`base: &defaults` も `<<: *defaults` もそのままで、結び付きも保たれます。展開すれば利用箇所ごとにブロックが複製され、ファイルは元より長くなり、直す場所が一つから二つに増えます。
複数の文書を含むファイルも整形できますか。
できます。`---` で区切られた各文書をその場で整形し、区切りも残します。Kubernetes のマニフェストはたいていまさにこの形であり、これまでは門前払いされていました。

関連ツール