yml-sorterを使ってYAMLファイルの属性情報をソートする
はじめに
最近 Kubernetes 、 Docker Compose 、 OpenAPI といったツールで YAML ファイルを触ることが多いです。
参加したプロジェクトでは、この設定ファイルが環境別に管理されていました。
環境は以下のものがあり、それぞれに YAML ファイルが用意されています。
- 本番環境
- ステージング環境
- 開発環境
設定ファイルが多重管理されているという問題に対処するために、
まずはそれぞれの環境の設定ファイルの違いを diff
で確認しようと思いました。
しかし、そもそもそれらの設定ファイルの属性がきれいに並べられておらず、 diff
が大変です。
なんとかならないものでしょうか?
検証環境
YAML ファイルの各フィールドをソートするために yml-sorter
を使う
これに対処するために YAML の内容を属性名でソートさせてから diff
すれば良さそうです。
探してみたところ、YAML ファイルの各フィールド名でソートするためのツールを見つけました。
こちらのツールは、 js-yaml という別のツールのラッパーということです。
インストール
npm なら以下の通り。
yarn なら以下の通り。
使い方
YAML ファイルを引数に指定して実行するだけです。
適当な docker-compose.yaml
サンプルがほしかったので、以下の Github リポジトリのものを拝借します。
ソートしてみます。
実行しても何も表示されません。
指定したファイルがそのまま上書きされてしまったので、その点だけ注意が必要です。
Git で diff を見てみます。
確かにフィールドがアルファベット順にソートされています。
ソートだけではなく、インデントも修正されていますが、今回は yml-sorter
でぞれぞれソートしたファイルを diff
するため問題ないと考えています。
ファイルを上書きしたくない場合(標準出力に出力したい)
2021-04-12追記 : 開発元にバグ報告 + プルリクエストをあげ、修正を取り込んでいただきました!最新版を取得すれば修正されています。
--dry-run
オプションを使えば、ソート結果でファイルを上書きせずに標準出力に出力できるということなので試してみました。
実行した結果、何も表示されません。
ファイルを見てみると、上書きされてしまっていました。
バグのようですね。以下のようにすると上書きされずに正しく出力されました。
またプルリクエスト上げておきたいと思います。
ひとこと
また後日投稿しますが、発端は GKE 上の複数のクラスタの設定が異なっている、という問題に対処するためでした。
GKE のクラスタ設定を YAML 形式で出力して、diff したいというものでした。
ディスカッション
コメント一覧
まだ、コメントがありません