このツールの動作
字下げを整えます。書き直しはしません。
# 本番データベース——変更前に当番へ連絡
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だけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。