今回は Bicep の v0.34.1 で GA になった Resource Derived Types という機能を試してみます
この機能は Bicep でのリソース定義をさらに型安全にし、開発体験を向上させるものです
Bicep とは
Bicep は Azure Resource Manager (ARM) テンプレートを簡潔に記述するための言語です
JSON 形式の ARM テンプレートと比較して、よりシンプルな構文で Azure リソースを定義できます
デプロイ時には Bicep ファイルが ARM テンプレートに変換されて実行されます。
従来の Bicep パラメータの課題
これまでの Bicep では、リソースのプロパティを指定する際には次のような課題がありました:
- 型安全性の欠如 - パラメータに指定できる値の種類が限定的(string, int, bool など)で、特定のリソースタイプに対する正確な値の制約を表現できませんでした
- 開発体験の不足 - 有効な値を知るために常にドキュメントを参照する必要がありました
- エラー検出のタイミング - 無効な値はデプロイ時にのみ検出され、開発中のフィードバックが遅れていました
例えば、ストレージアカウントを作成する従来の Bicep ファイルはこのようなものでした:
|
|
このコードでは以下のような問題があります:
storageAccountSku
パラメータは単なる文字列として定義されており、有効な値が何かをコード上で確認できません- 誤った値(例えば「Standerd_LRS」のようなタイプミス)を指定しても、デプロイ時までエラーが検出されません
- Intellisense による補完やヒントが限定的です

パラメーターを使わず直接指定する場合は、候補が表示されます
Resource Derived Types の登場
Bicep v0.34.1 で導入された Resource Derived Types は、これらの問題を解決します
特定のリソースタイプとバージョンからプロパティの型情報を取得することで、より型安全な開発体験を提供します
新しい構文は resourceInput<'リソース@バージョン'>.プロパティ.パス
の形式で、例えば:
|
|
これにより:
- リソースの特定プロパティに対して有効な型情報が提供されます
- IDEでの入力補完と型チェックが可能になります
- デプロイ前に型エラーを検出できるようになります
Resource Derived Types を使ったサンプル
以下は Resource Derived Types を使ったストレージアカウント作成の例です:
|
|
このコードでは:
resourceInput
を使って、ストレージアカウントの SKU と Kind に対して型情報を提供- これにより Visual Studio Code などの IDE では、有効な値の一覧が表示され入力補完が可能に
resourceOutput
を使って、出力値の型も厳密に定義

Resource Derived Types のメリット
この新機能によって得られるメリットは多岐にわたります:
- 開発時の型安全性 - パラメータの型が明確に定義され、無効な値はコーディング段階で検出
- IDE サポートの強化 - IntelliSense による入力補完、ヒント、エラー検出が充実
- ドキュメント参照の削減 - 有効な値の一覧がコード補完で確認できるため、ドキュメントを頻繁に参照する必要がなくなる
- バグの早期発見 - デプロイ前に多くの問題を検出可能
Resource Derived Types の使い方
Resource Derived Types には、主に2つの形式があります:
-
resourceInput - リソース定義のパラメータとして使用
1
param storageSku resourceInput<'Microsoft.Storage/storageAccounts@2024-01-01'>.sku.name
-
resourceOutput - リソースからの出力として使用
1
output endpoint resourceOutput<'Microsoft.Storage/storageAccounts@2024-01-01'>.properties.primaryEndpoints
これらを使うことで、Visual Studio Code などの IDE では適切なプロパティの補完と型チェックが可能になります。
まとめ
Bicep の Resource Derived Types は、Azure リソースの定義をより型安全に、より開発者フレンドリーにする重要な機能です
従来の文字列ベースのパラメータ定義と比較して、コーディング時のエラー検出や補完機能が強化され、開発効率と品質の向上に貢献します
特に複雑なリソースタイプや、頻繁に使用しないリソースを扱う際に、正しいプロパティや値を覚えておく必要がなくなるため、開発者の認知負荷が軽減されます
Bicep を使用している方は、ぜひこの新機能を試してみてください。開発体験が大きく向上するはずです。