notes mizzy.org

3自由度サマリ表

確認済み 出典: explorations/2026-04-26-cross-dsl-design-position/README.md各DSLの3自由度サマリ / 全体の2×2マッピング 作成

IaC 4ツールと構成記述系DSL 11本を、3自由度 — 抽象化の追加 / 複数量の制御 / 実装の切替 — で横断評価した一覧表。各自由度を「言語が決める」(文法・評価器・型検査で制限)か「規約に委ねる」(lint・レビュー・ガイドラインで縛る)かで判定する。調査日は2026-04-26。

各DSLの3自由度サマリ

DSL抽象化の追加複数量の制御実装の切替
Terraform言語が決める言語が決める言語が決める
CDK規約に委ねる規約に委ねる規約に委ねる
Pulumi規約に委ねる規約に委ねる規約に委ねる
Carina言語が決める(fnあり、高階関数なし)言語が決める言語が決める(二段)
Pkl規約に委ねる言語が決める + 標準ライブラリ言語が決める
Bicep言語が決める(funcあり、高階関数なし)言語が決める(for)言語が決める
KCL規約に委ねる言語が決める(comprehension)言語が決める
CUE言語が決める(関数なし)言語が決める(comprehension)言語が決める
Dhall規約に委ねる言語が決める(組込み再帰子)言語が決める
Jsonnet規約に委ねる言語が決める(comprehension)言語が決める
Nickel規約に委ねる規約に委ねる言語が決める
cdktf規約に委ねる規約に委ねる + Terraform for_each規約に委ねる
cdk8s規約に委ねる規約に委ねる規約に委ねる
Crossplane二層(YAML言語 + function言語)function経由Composition Selector (動的) + function (静的)
Helm言語が決める(defineあり、高階関数なし)言語が決める(range)言語が決める(dependenciesリテラル)

太字は「単純2×2だと収まりが悪い」象限(3自由度のうち抽象化追加だけ規約寄りのハイブリッド)。

全体の2×2マッピング(主要傾向で配置)

3自由度のうちどれが多数派かで各ツールを配置したもの。

記述言語言語が決める(3自由度すべてor多数派)規約に委ねる(3自由度すべてor多数派)
外部DSLTerraform, Carina, Bicep, CUE, Helm, Crossplane (YAML層)(空に近い、Nickelが部分的に該当)
外部DSL × ハイブリッド (3自由度のうち抽象化追加だけ規約寄り)Pkl, KCL, Dhall, Jsonnet, Nickel
汎用言語 (言語が決める)(空席)
汎用言語(ベタ書き)CDK, Pulumi, cdktf, cdk8s

新たに見えた象限が「外部DSL × ハイブリッド(抽象化追加だけ規約寄り)」で、Pkl / KCL / Dhall / Jsonnet / Nickelの5つが集まる。

出力形態による分類

出力形態内容
構成データ出力値ツリー(JSON/YAML/設定値)Pkl, KCL, CUE, Dhall, Jsonnet, Nickel
graph出力ノード + エッジの宣言Terraform, CDK, Pulumi, Carina, Bicep, cdktf, cdk8s, Crossplane, Helm

graph出力 × ハイブリッドの空席

構成データ出力graph出力
言語が決める (3自由度すべて)CUETerraform, Carina (現状), Bicep, Helm, Crossplane (YAML層)
ハイブリッド (抽象化追加だけ規約寄り)Pkl, KCL, Dhall, Jsonnet, Nickel(空席)
規約に委ねる (3自由度すべて)CDK, Pulumi, cdktf, cdk8s

5DSLのハイブリッド象限への収束は構成データ出力DSLに限った観察であり、graph出力DSLでこの位置取りを実装した先例は存在しない。

#参照 #比較表 #dsl