notes mizzy.org

記述自由度は「言語が決める」か「規約に委ねる」かの二層に分かれる

確認済み 出典: explorations/2026-04-26-cdk-pulumi-terraform-carina-comparison/chapter-1-notation-and-abstraction.md §1-3-1 作成

ユーザーの記述自由度をどこまで許すかという設計判断は、誰が制限するかで二層に分かれる。

ユーザーが書く 望ましくない記述 言語が決める 文法・評価器・型検査 書けない 強制力は絶対 規約に委ねる lint・レビュー・ガイドライン 書けるが許されない 維持コストは組織が負う Terraform / Carinaは上、CDK / Pulumiは下。BicepはCarinaと類似の中間。
止める主体が処理系か組織かで、強制力とコストの落ちる先が変わる。同じ「制約」でも性質が違う。
区分仕組みユーザーから見ると
言語が決める文法・評価器・型検査でユーザーの選択肢が制限される書けない(文法エラー / 型エラー / 評価エラー)
規約に委ねる文法上は何でも書けるが、lint・コードレビュー・社内ガイドラインで縛る書けるが組織内で許されない

両者とも「ユーザーの選択肢を狭める方向の制約」だが、強制力と組織コストが大きく異なる。前者は書いた瞬間に落ちるので強制力は絶対だが、言語拡張のコストが高く逃げ道がない。後者は逃げ道がある代わりに、lintルール・コードレビュー・オンボーディング教育をすべて組織が負担する。

4ツールを当てはめると、Terraform / Carinaは「言語が決める」、CDK / Pulumiは「規約に委ねる」に落ちる。BicepはCarinaと類似の中間(funcあり、高階関数なし)。

この二層と記述言語の選択(外部DSL / 汎用言語)は強い相関を持つが、概念的に区別できる別軸である。外部DSLは言語が決める範囲を広く取りやすく、汎用言語は規約に頼りやすい、という傾向はあるが、それは論理的な含意ではない。この区別を潰すと「DSLだから読みやすい」という誤った因果に落ちる。

#設計判断 #dsl #組織