📑
Google 製 yaml フォーマッター「yamlfmt」を試してみる
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