📑

Google 製 yaml フォーマッター「yamlfmt」を試してみる

2022/08/21に公開

Google 製の yamlfmt なるものを知ったので試しに触ってみました。

https://github.com/google/yamlfmt

検証環境

  • yamlfmt v0.1.0

インストール

Go で作られてるので go install でインストールできます。

$ go install github.com/google/yamlfmt/cmd/yamlfmt@latest

使い方

yamlfmt を実行するだけで yaml ファイルを再帰的に探して ( **/*.{yaml,yml} ) フォーマットを実行します。

$ yamlfmt

例えばカレントディレクトリに次のような a.yaml ファイルがある場合、

a.yaml
# コメントは保持される
list1:
- item1
- item2
list2: [   item1,   item2   ]
struct: {   key:   value   }

yamlfmt を実行すると次のようにフォーマットされます。

a.yaml
# コメントは保持される
list1:
  - item1
  - item2
list2: [item1, item2]
struct: {key: value}

対象のファイルを直接指定することもできます。

$ yamlfmt a.yaml
# 複数指定したり Glob で指定することも可能
$ yamlfmt a.yaml b.yaml config/**/*.yaml

-dry フラグ

-dry フラグを指定すると、実際にはフォーマットを実行せずに実行後の差分を表示してくれます。

 yamlfmt -dry
a.yaml:
  string(Inverse(multiline, []string{
        "# コメントは保持される",
        "list1:",
-       "- item1",
+       "  - item1",
-       "- item2",
+       "  - item2",
-       "list2: [   item1,   item2   ]",
+       "list2: [item1, item2]",
-       "struct: {   key:   value   }",
+       "struct: {key: value}",
        "",
  }))

-lint フラグ

-lint フラグを指定するとフォーマットをかける前後に差分があるかどうかをチェックします。
差分がある場合は該当箇所が表示され、 exit code 1 で終了します。

$ yamlfmt -lint
2022/08/23 15:35:18 encountered the following linting errors:
a.yaml:
  string(Inverse(multiline, []string{
        "# コメントは保持される",
        "list1:",
-       "- item1",
+       "  - item1",
-       "- item2",
+       "  - item2",
-       "list2: [   item1,   item2   ]",
+       "list2: [item1, item2]",
-       "struct: {   key:   value   }",
+       "struct: {key: value}",
        "",
  }))

,

設定

カレントディレクトリに .yamlfmt という名前でファイルを作成し、さまざまな設定を記述することができます。

include / exclude

include にはフォーマット対象に含めるファイルを、 exclude には除外するファイルを記述します。

.yamlfmt
include:
- config/**/*.{yaml,yml}
exclude:
- excluded/**/*.yaml

formatter

formatter にはフォーマッターに関する設定を記述することができます。
例えば Basic Formatter の場合はインデントレベルを指定することができます。

.yamlfmt
formatter:
  # 使用するフォーマッター
  type: basic
  # フォーマッターの設定
  indentation: 4

type が指定されていない場合はデフォルトのフォーマッター ( Basic Formatter ) が使用されます。

その他

Goals を見ると、単なる CLI ツールとしてだけではなくライブラリとしての利用も想定されているみたいです。
カスタムフォーマッターを作って拡張したり、 yamlfmt を活用した新しいツールを作ったりできそうです。

Discussion