cappyzawa
5 min readMay 9, 2019

k14s/ytt: YAML templating tool that works on YAML structure instead of text

これ何

YAML templating tool。これを利用するとYAMLファイルにロジックを持たせることができる。 このようなYAMLを操作するツールは結構存在する。 パッと思いつくのは以下。

GitHubリポジトリ内のドキュメントでこれらの類似ツールとの比較が行われている。 ytt/ytt-vs-x.md at master · k14s/ytt

比較されているツールは利用したことのないものもあるが、自分がいいなと思ったところは以下だ。

  • YAMLファイルとして記述することができる
  • 記述がシンプル
  • 汎用性が高い

YAMLファイルとして記述することができる

YAMLファイルがoutputされる以上、やはりinputもYAMLファイルとして記述したい。

jsonnetでの変換の例は以下。 Jsonnet — The Data Templating Language

jsonnetはYAMLのために作られたものではないからツールの優劣のことを述べるつもりはないが、YAMLファイルを作成したいのであれば、outputを想像しやすいのはyttの方だろう。

記述がシンプル

ifforなどの構文を利用することができる。 利用できるものは以下にまとまっている。 ytt/lang.md at master · k14s/ytt

よく使われている高級言語と同じような感覚で利用できる。

ytt — YAML Templating Tool にいろいろサンプルが置いてあり、いずれもオンライン上で試すことができる。

たとえば、YAMLにはアンカーとエイリアスがあるが、これはytt#Function — YAML Templating Tool を利用して記述することも可能だ。

アンカー & エイリアス

cappyzawa: &cappyzawa
name: cappyzawa
github: https://github.com/cappyzawa

users:
- <<: *cappyzawa

ytt#func

#@ def cappyzawa():
name: cappyzawa
github: https://github.com/cappyzawa
#@ end

users:
- #@ cappyzawa()

この出力はどちらも同じになる。

users:
- name: cappyzawa
github: https://github.com/cappyzawa

記述がシンプルで簡単だ。(毎回アンカーとリンクの記号忘れてうんざりすることもない)

汎用性が高い

1ファイルのYAMLでもforを利用すれば記述を繰り返すことができたり、ifを使えば分岐することできて、それだけでも嬉しいことがだが、YAMLファイルにpatchを当てることもできる。 このpatchを当てるというのは、kustomizeでいうところのoverlayのようなもので、boshでいうところのopsfileのようなものだ。

上記のサンプルは以下。 ytt — YAML Templating Tool

BOSH folksからすると嬉しいかぎり。

まーーーーたConcourseかよと思うかもしれないがyttはConcourseと相性がいいと思う。
Concourseにはpatchを管理する機能はない。(pipelineの読み込みはBOSHと同じものを利用しているのだが、Concourseではopsfileを利用しない設定になっている)

もしyttが広く普及している世界線に生きていたのなら、pipelineのサンプルを公開し、それを利用する人が自分たちでpatchを管理することができる。(Bosh-deploymentの同じ発想)
pipelineのサンプルをコピーして、それをカスタマイズしてしまった場合、サンプルのアップデートへの追従が億劫になる。
その点、patchだけを管理すればいいのであれば幾分か追従は楽になるだろう。

まとめ

今回紹介したのはあくまで個人の所見と、機能の一部である。
yttそのものの詳細はk14s/ytt: YAML templating tool that works on YAML structure instead of textを、ちょっと触ってみたい!と思ったらytt — YAML Templating Tool をみると良い。

感覚的な話だが、とにかく書いていて気持ちいい。ファイルシンタックスが崩れないのもそれを後押ししている要因の1つかもしれない。

ytt — YAML Templating ToolThe Go Playground のように書いたコードがシェアできるようになればもっと便利だと思った。