3自由度サマリ表
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多数派) |
|---|---|---|
| 外部DSL | Terraform, 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自由度すべて) | CUE | Terraform, Carina (現状), Bicep, Helm, Crossplane (YAML層) |
| ハイブリッド (抽象化追加だけ規約寄り) | Pkl, KCL, Dhall, Jsonnet, Nickel | (空席) |
| 規約に委ねる (3自由度すべて) | — | CDK, Pulumi, cdktf, cdk8s |
5DSLのハイブリッド象限への収束は構成データ出力DSLに限った観察であり、graph出力DSLでこの位置取りを実装した先例は存在しない。