Jsonnet vs CUE: 構成言語の比較
Jsonnet は構成を生成するためのテンプレート言語であり、CUE はデータ、スキーマ、バリデーションを 1 つの言語に統合します。Jsonnet は構成の生成に、CUE は制約と検証に重きを置きます。
どちらも手書きの YAML/JSON を改善しますが、哲学が異なります。Jsonnet は関数と合成による生成を重視し、CUE は型と制約を重視して、値とスキーマを同一のものとして扱います。ここでは率直な比較を示します。
| Jsonnet | CUE | |
|---|---|---|
| 主な強み | 構成の生成 (テンプレート化) | 構成の検証 + 統合 |
| 型/スキーマ | 動的、組み込みスキーマなし | 型と制約がファーストクラス |
| モデル | 関数、継承、ミックスイン | 値と制約の統合 |
| バリデーション | 外部ツール | 組み込み (制約を強制) |
| 学習曲線 | 中程度 | 中程度から急 (統合モデル) |
| エコシステム | Tanka、kube ライブラリ | 成長中、k8s + 構成ツール |
生成 vs 検証
Jsonnet は、抽象化から多くの類似した構成を生成する必要がある場合に最適です。関数、import、オブジェクトの合成によって DRY を保てます。CUE は正しさが最も重要な場合に最適です。スキーマとデータを同じ言語で表現し、CUE がそれらを統合するため、無効な構成は単純に評価されません。多くのチームは生成に Jsonnet、保護に CUE を用います。
統合モデル
CUE の中心的な考え方は統合です。制約と具体的な値が結合され、その結果は一貫していなければ失敗します。これにより強力なバリデーションが得られ、デフォルトやポリシーを重ねられます。テンプレート化とは異なるメンタルモデルであり、身につけるには時間がかかりますが、構成エラーの全クラスを早期に捕捉します。
CI で
どちらも CLI ステップとして実行されます。Jsonnet は manifest をレンダリングし、CUE はレンダリングと検証の両方が可能です。CI に CUE の検証ゲート (または Jsonnet と別のバリデータ) を追加することで、不正な構成が cluster に到達するのを防げます。
結論
再利用可能な抽象化から構成を生成することが主な目的なら Jsonnet を、バリデーションとスキーマの強制が優先事項なら CUE を選びましょう。両者は補完的であり、一方で生成しもう一方で検証するパイプラインもあります。