IaCが必要とする再利用は検証済みパターンのパラメータ付き合成であって任意計算ではない
IaCが本当に必要とする再利用は、検証済みパターンのパラメータ付き合成であって、任意計算ではない。それはモジュール・for・exportsという有界な合成手段 — すべて蒸発条件を満たす — で足りる。
汎用言語に人が求める「表現力」の実態の多くは繰り返しの除去であり、チューリング完全性はそれに対して過剰である。必要なのは「同じ形のものをN個作る」「同じ構成をパラメータ違いで使い回す」であって、「任意の計算をして構成を導く」ではない。
実需要を分解すると三つに収まる。
- 値計算の再利用(命名規則、環境別パラメタ) → ユーザー定義関数で足りる
- 構成のテンプレート化(VPC + Subnet × N + IGWのセット) → moduleで足りる
- 多数生成(multi-region展開、リスト要素ごと) →
for式で足りる
経験的な裏付けもある。Terraformは高階関数なしで長年成立しており、for_each / dynamicで大半の用途を満たしている。Bicepは意図的に高階関数を入れず、funcのみでAzure IaCとして広く使われている。CDK / Pulumiでの高階関数の実際の活用も、命名関数やmapでのループ程度が中心で、Constructを関数で渡す/返すパターンは現場では稀である。
つまり高階関数は「あれば嬉しいが必須ではない」機能かもしれない、という位置づけになる。
根拠の確度
「Terraformが高階関数なしで長年成立している」は一般知識ベースで、統計的な用法調査に基づくものではない。「現場では稀」も同様に印象ベースの観察。