この記事では、Bicep ファイルの構造と構文について説明します。 ファイルの各種セクションとそれらのセクションで使用できるプロパティを紹介します。
Bicep ファイルを作成する手順を説明したチュートリアルについては、「クイックスタート: Visual Studio Code を使用した Bicep ファイルの作成」を参照してください。
Bicep 形式
Bicep は宣言型言語であり、要素を任意の順序で表示できます。 命令型言語とは異なり、要素の順序は配置の処理方法に影響しません。
Bicep ファイルには、次の要素があります。
@<decorator>(<argument>)
metadata <metadata-name> = ANY
targetScope = '<scope>'
@<decorator>(<argument>)
type <user-defined-data-type-name> = <type-expression>
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>
@<decorator>(<argument>)
var <variable-name> = <variable-value>
@<decorator>(<argument>)
resource <resource-symbolic-name> '<resource-type>@<api-version>' = {
<resource-properties>
}
@<decorator>(<argument>)
module <module-symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
@<decorator>(<argument>)
output <output-name> <output-data-type> = <output-value>
次の例は、これらの要素の実装を示しています。
metadata description = 'Creates a storage account and a web app'
@description('The prefix to use for the storage account name.')
@minLength(3)
@maxLength(11)
param storagePrefix string
param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Metadata
Bicep のメタデータは、Bicep ファイルに含めることができる型指定されていない値です。 メタデータは、名前、説明、作成者、作成日など、Bicep ファイルに関する補足情報を提供します。
ターゲット スコープ
既定では、ターゲット スコープは resourceGroup に設定されます。 リソース グループ レベルでデプロイする場合は、Bicep ファイルでターゲット スコープを設定する必要はありません。
使用できる値は、次のとおりです。
-
resourceGroup: リソース グループのデプロイに使用される既定値。 -
subscription: サブスクリプションの デプロイに使用されます。 -
managementGroup: 管理グループの展開に使用されます。 -
tenant: テナントデプロイメントに使用されます。
モジュールでは、Bicep ファイルの残りの部分のスコープとは異なるスコープを指定できます。 詳細については、「 モジュール スコープの構成」を参照してください。
デコレーター
以下の各要素に対して 1 つ以上のデコレーターを追加できます。
次の表に、デコレーターの一覧を示します。
| デコレーター | 適用対象の要素 | 適用対象のデータ型 | 引数 | 説明 |
|---|---|---|---|---|
| allowed | param | all | アレイ | このデコレーターを使用して、ユーザーが正しい値を指定するようにします。 このデコレーターは、 param ステートメントでのみ使用できます。 プロパティが、type または output ステートメントで定義済みの値セットのいずれかでなければならないことを宣言するには、共用体型の構文を使用します。 また、 param ステートメントで共用体の型構文を使用することもできます。 |
| batchSize | module、resource | 該当なし | 整数 | 順番にデプロイするようにインスタンスを設定します。 |
| 説明 | func、param、module、output、resource、type、var | all | 文字列 | 要素の説明を指定します。 説明テキストには Markdown 形式のテキストを使用します。 |
| discriminator | param、type、output | オブジェクト | 文字列 | このデコレーターを使用して、正しいサブクラスが識別および管理されていることを確認します。 詳細については、「Custom-tagged union data type (カスタム タグ付き共用体データ型)」を参照してください。 |
| エクスポート | func、type、var | all | なし | 別の Bicep ファイルが要素をインポートできることを示します。 |
| maxLength | param、output、type | array、string | INT | string 要素と配列要素の最大の長さ。 この値は包含値です。 |
| maxValue | param、output、type | INT | INT | integer 要素の最大値。 この値は包含値です。 |
| メタデータ | func、output、param、type | all | オブジェクト | 要素に適用するカスタム プロパティ。 description デコレーターと同等の description プロパティを含めることが可能です。 |
| minLength | param、output、type | array、string | INT | string 要素と配列要素の最小の長さ。 この値は包含値です。 |
| minValue | param、output、type | INT | INT | integer 要素の最小値。 この値は包含値です。 |
| シールド | param、type、output | オブジェクト | なし | ユーザー定義データ型のプロパティ名が入力ミスである可能性がある場合に、 BCP089 を警告からエラーに昇格させます。 詳細については、「Elevate error level (エラー レベルの昇格)」を参照してください。 |
| secure | param、type | string、object | なし | パラメーターを、セキュリティで保護されているとしてマークします。 セキュリティで保護されたパラメーターの値はデプロイ履歴に保存されず、ログに記録されません。 詳細については、「セキュリティで保護された文字列とオブジェクト」を参照してください。 |
パラメーター
パラメーターは、さまざまなデプロイに応じて変化する必要がある値に使用します。 デプロイ中に値が指定されていない場合に使用されるパラメーターの既定値を定義できます。
たとえば、 SKU パラメーターを追加して、リソースのさまざまなサイズを指定できます。 テスト環境と運用環境のいずれかに配置するかに応じて、異なる値を渡すことができます。
param storageSKU string = 'Standard_LRS'
このパラメーターは Bicep ファイルで使用できます。
sku: {
name: storageSKU
}
パラメーターごとに 1 つ以上のデコレーターを追加できます。 詳細については、「Use decorators (デコレーターを使用する)」を参照してください。
詳細については、Bicep のパラメーターに関する記事を参照してください。
変数
Bicep ファイルを読みやすくするには、変数に複雑な式をカプセル化します。 たとえば、複数の値を連結して構築されたリソース名の変数を追加できます。
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
複合式が必要な場合は常にこの変数を適用します。
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
各変数に対して 1 つ以上のデコレーターを追加できます。 詳細については、「Use decorators (デコレーターを使用する)」を参照してください。
詳細については、Bicep の変数に関する記事を参照してください。
型
ユーザー定義データ型を定義するには、type ステートメントを使用できます。
param location string = resourceGroup().location
type storageAccountSkuType = 'Standard_LRS' | 'Standard_GRS'
type storageAccountConfigType = {
name: string
sku: storageAccountSkuType
}
param storageAccountConfig storageAccountConfigType = {
name: 'storage${uniqueString(resourceGroup().id)}'
sku: 'Standard_LRS'
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: storageAccountConfig.name
location: location
sku: {
name: storageAccountConfig.sku
}
kind: 'StorageV2'
}
ユーザー定義の各データ型に対して 1 つ以上のデコレーターを追加できます。 詳細については、「Use decorators (デコレーターを使用する)」を参照してください。
詳細については、「 Bicep のユーザー定義データ型」を参照してください。
Functions
Bicep ファイルでは、独自の関数を作成したり、Bicep ファイル内で自動的に使用できる 標準の Bicep 関数 を使用したりできます。 Bicep ファイルで繰り返し使用される複雑な式がある場合は、独自の関数を作成します。
func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
詳細については、「User-defined functions in Bicep (Bicep 内のユーザー定義関数)」を参照してください。
リソース
デプロイするリソースを定義するには resource キーワードを使用します。 リソース宣言には、リソースのシンボリック名が含まれます。 resource から値を取得するには、このシンボリック名を Bicep ファイルの他の部分で使用します。
リソース宣言には、リソースの種類と API バージョンが含まれます。 リソース宣言の本文内に、リソースの種類に固有のプロパティを含めます。
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
各 resource に対して 1 つ以上のデコレーターを追加できます。 詳細については、「Use decorators (デコレーターを使用する)」を参照してください。
詳細については、Bicep のリソース宣言に関する記事を参照してください。
一部のリソースには親子関係があります。 子リソースは、親リソースの中にも外側にも定義できます。
次の例では、親リソース内に子リソースを定義する方法を示します。 これには、ストレージ アカウント内で定義された子リソース (ファイル サービス) を持つストレージ アカウントが含まれています。 ファイル サービスには、その中で定義されている子リソース (共有) もあります。
resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
次の例は、親リソースの外側の子リソースを定義する方法を示しています。 parent プロパティを使用して、親子関係を識別します。 同じ 3 つのリソースが定義されています。
resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2025-06-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2025-06-01' = {
name: 'exampleshare'
parent: service
}
詳細については、「Bicep での子リソースの名前と種類の設定」を参照してください。
モジュール
モジュールを使用すると、他の Bicep ファイル内の Bicep ファイルからコードを再利用できます。 モジュール宣言では、再利用するファイルにリンクします。 Bicep ファイルをデプロイすると、モジュール内のリソースもデプロイされます。
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
シンボリック名を使用すると、ファイル内の別の場所からモジュールを参照できます。 たとえば、シンボリック名および出力値の名前を使用して、モジュールから出力値を取得できます。
各 module に対して 1 つ以上のデコレーターを追加できます。 詳細については、「Use decorators (デコレーターを使用する)」を参照してください。
詳細については、「Bicep モジュールを使用する」を参照してください。
出力
出力を使用し、デプロイから値を返します。 通常は、別の操作に値を再利用する必要がある場合に、デプロイされたリソースからその値が返されるようにします。
output storageEndpoint object = stg.properties.primaryEndpoints
各 output に対して 1 つ以上のデコレーターを追加できます。 詳細については、「Use decorators (デコレーターを使用する)」を参照してください。
詳細については、Bicep の出力に関する記事を参照してください。
ループ
Bicep ファイルに反復ループを追加して、次の複数のコピーを定義します。
- リソース
- モジュール
- 変数
- プロパティ
- 出力
for 式を使用してループを定義します。
param moduleCount int = 2
module stgModule './example.bicep' = [for i in range(0, moduleCount): {
name: '${i}deployModule'
params: {
}
}]
配列、オブジェクト、または整数インデックスを反復処理できます。
詳細については 、「Bicep の反復ループ」を参照してください。
条件付きデプロイ
条件付きでデプロイされた Bicep ファイルにリソースまたはモジュールを追加できます。 デプロイ中に条件が評価され、その結果によりデプロイ対象としてリソースまたはモジュールが決定されます。
if 式を使用し、条件付きデプロイを追加します。
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
詳細については、「if 式を使用した Bicep での条件付きデプロイ」を参照してください。
空白
Bicep ファイルを作成する場合、スペースとタブは無視されます。
Bicep では改行が識別されます。 次に例を示します。
resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' = if (newOrExisting == 'new') {
...
}
これを次のように記述することはできません。
resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' =
if (newOrExisting == 'new') {
...
}
説明
1 行のコメントには // を使用し、複数行のコメントには /* ... */ を使用します。
次の例に、単一行のコメントを示します。
// This is your primary NIC.
resource nic1 'Microsoft.Network/networkInterfaces@2025-01-01' = {
...
}
次の例は、複数行のコメントを示しています。
/*
This Bicep file assumes the key vault already exists and
is in same subscription and resource group as the deployment.
*/
param existingKeyVaultName string
複数行の文字列
文字列を複数の行に分割することができます。 複数行の文字列を開始および終了するには、 ''' 3 つの単一引用符を使用します。
複数行の文字列内の文字は、そのまま処理されます。 エスケープ文字は不要です。 複数行の文字列の中に ''' を含めることはできません。 文字列補間は現在サポートされていません。
開始 '''の直後に文字列を開始するか、新しい行を含めることができます。 どちらの場合も、結果として得られる文字列に改行は含まれません。 Bicep ファイルの行の終わりに応じて、改行は \r\n または \n として解釈されます。
次の例に、複数行の文字列を示します。
var stringVar = '''
this is multi-line
string with formatting
preserved.
'''
上記の例は、次の JSON と同じです。
"variables": {
"stringVar": "this is multi-line\r\n string with formatting\r\n preserved.\r\n"
}
複数行の宣言
関数、配列、およびオブジェクトの宣言内で複数の行を使用できるようになりました。 この機能を使用するには、Bicep CLI バージョン 0.7.X 以降が必要です。
次の例では、resourceGroup() 定義が複数行に分割されています。
var foo = resourceGroup(
mySubscription,
myRgName)
複数行宣言のサンプルについては、配列とオブジェクトを参照してください。
既知の制限事項
-
apiProfileの概念はサポートされていません。この概念は、リソースの種類ごとに 1 つのapiProfileをセットapiVersionにマップするために使用されます。 - 現時点では、ユーザー定義関数はサポートされていません。 現在、試験段階の機能にアクセスできます。 詳細については、「User-defined functions in Bicep (Bicep 内のユーザー定義関数)」を参照してください。
- 一部の Bicep 機能では、中間言語 (Azure Resource Manager JSON テンプレート) に対応する変更が必要です。 これらの機能は、必要なすべての更新プログラムがグローバル Azure にデプロイされた後で利用可能であることをお知らせします。 Azure Stack などの別の環境を使用する場合は、機能の可用性に遅延が発生する可能性があります。 Bicep 機能は、その環境で中間言語も更新された後にのみ使用できます。