記述自由度は「言語が決める」か「規約に委ねる」かの二層に分かれる
ユーザーの記述自由度をどこまで許すかという設計判断は、誰が制限するかで二層に分かれる。
| 区分 | 仕組み | ユーザーから見ると |
|---|---|---|
| 言語が決める | 文法・評価器・型検査でユーザーの選択肢が制限される | 書けない(文法エラー / 型エラー / 評価エラー) |
| 規約に委ねる | 文法上は何でも書けるが、lint・コードレビュー・社内ガイドラインで縛る | 書けるが組織内で許されない |
両者とも「ユーザーの選択肢を狭める方向の制約」だが、強制力と組織コストが大きく異なる。前者は書いた瞬間に落ちるので強制力は絶対だが、言語拡張のコストが高く逃げ道がない。後者は逃げ道がある代わりに、lintルール・コードレビュー・オンボーディング教育をすべて組織が負担する。
4ツールを当てはめると、Terraform / Carinaは「言語が決める」、CDK / Pulumiは「規約に委ねる」に落ちる。BicepはCarinaと類似の中間(funcあり、高階関数なし)。
この二層と記述言語の選択(外部DSL / 汎用言語)は強い相関を持つが、概念的に区別できる別軸である。外部DSLは言語が決める範囲を広く取りやすく、汎用言語は規約に頼りやすい、という傾向はあるが、それは論理的な含意ではない。この区別を潰すと「DSLだから読みやすい」という誤った因果に落ちる。