notes mizzy.org

SDKが型を提供することは言語が制約を課すことではない

解釈 出典: explorations/2026-04-26-cdk-pulumi-terraform-carina-comparison/chapter-1-notation-and-abstraction.md §1-3-4, explorations/2026-04-26-cross-dsl-design-position/README.md問い3 作成

PulumiのOutput<T>やCDKのToken / BucketPropsのように、SDK側が型を提供して依存追跡や未知値伝播を表現するパターンがある。これを「言語が決める」象限の実例と数えるのは過大評価である。

理由は、これらがホスト言語の型システムの機能をSDKが活用しているだけで、ツール側が言語を拡張しているわけではないから。効くのは次の二条件が揃ったときだけである。

条件付きでしか効かない仕組みは、文法エラーとして必ず落ちる制約とは強制力が違う。外部DSLが「文法レベルで望ましくない書き方を禁止できる(ユーザーの記述意思に依存しない)」のに対し、SDKの型はユーザーの記述意思に依存する。

Pulumiの内部構造についても正確に押さえておく必要がある。Pulumiはランタイム実行経路には静的中間テンプレートを持たない — コード実行中にengineへgRPCストリーミングでRegisterResourceを逐次送信し、engineが随時差分判断・実行する。ただしエコシステム全体には中間表現的なものが存在する。pulumi convertでTF/CFN/BicepをPulumiコードに変換する際のPCL (Pulumi Configuration Language) は公式に「intermediate representation」と呼ばれ、pulumi preview --save-plan静的planファイル(Update Plans)を生成して後でpulumi up --planで適用できる(Terraformのplan -out相当)。

#型システム #dsl #評価