逃げ道の有無が表現力の上限と組織コストを交換する
記述自由度の二層は、逃げ道の有無という一点でトレードオフを作る。
言語が決める(Terraform / Carina)が得るもの:
- 「読めない書き方」を構造的に書けない → ベテランも新人も同じ表現力に揃う
- 静的解析・LSP・自動修正ツールが効きやすい
- レビュアーが「文法が通っているなら最低ラインは満たす」と判断できる
- 組織コストが低い(規約を作って教育する手間が要らない)
失うもの:
- 逃げ道がない — 文法の表現力を超えると別アプローチに逃げる必要がある。Terraformでは
dynamicブロックがlimitedでfor_eachの制約に苦しみ、結局moduleを切ったり外部スクリプトで生成したりする。高階関数や一級関数値がない言語では、関数を引数で渡したりmoduleを引数で受け取って加工する設計が書けない - 言語拡張のコストが高い — 新しい構文を追加するにはparser/evaluator/LSPすべてを触る必要がある
- 「言語の表現力」がツールの上限を決める
規約に委ねる(CDK / Pulumi)は鏡像になる。得るのは逃げ道 — 何でも書けるので複雑な構成も表現でき、社内のベテランがutilを作れば全員が使える。言語のエコシステムと統合され、IDE/デバッガ/テストフレームワークが普通に使え、ツール側の実装コストも低い。失うのは、「読めない書き方」を防げないこと、lintルール・コードレビュー・オンボーディング教育という規約の維持コストを組織が負担すること、「ベテランしか保守できないコード」が生まれやすいこと、そして表現力の差がチーム内のスキル差として顕在化することである。
つまり交換されているのは「表現力の上限」と「組織コスト」であり、どちらかが単純に優れているのではない。