次の方法で共有


cli コマンドのBicep

この記事では、Bicep CLI で使用できるコマンドについて説明します。 これらのコマンドは、Azure CLIを使用するか、Bicep CLI コマンドを直接呼び出すことによって実行できます。 それぞれの方法で、個別のインストール プロセスが必要です。 インストールの詳細については、Azure CLI および Azure PowerShell を参照してください。

このガイダンスでは、Azure CLIでコマンドを実行する方法を示します。 Azure CLIでコマンドを実行するときは、az で開始します。 Azure CLIを使用していない場合は、各コマンドの開始時に az なしでコマンドを実行します。 たとえば、 az bicep buildbicep buildaz bicep versionbicep --version になります。

ビルド

build コマンドは、Bicep ファイルを JSON Azure Resource Manager テンプレート (ARM テンプレート) に変換します。 通常、このコマンドは、Bicep ファイルをデプロイするときに自動的に実行されるため、実行する必要はありません。 Bicep ファイルから作成された JSON ARM テンプレートを表示する場合は、手動で実行します。

次のいずれかのBicep機能を使用すると、言語バージョン 2.0 のコード生成が自動的に有効になります。

次の例では、main.bicep という名前のBicep ファイルを変換します。main.json という名前の ARM テンプレートに指定します。 新しいファイルは、Bicep ファイルと同じディレクトリに作成されます。

bicep build main.bicep

次の例では、 main.json を別のディレクトリに保存します。

bicep build main.bicep --outdir c:\jsontemplates

次の例では、作成するファイルの名前と場所を指定します。

bicep build main.bicep --outfile c:\jsontemplates\azuredeploy.json

ファイルを stdout に出力するには、次のコマンドを使用します。

bicep build main.bicep --stdout

Bicep ファイルに外部レジストリを参照するモジュールが含まれている場合、build コマンドは自動的に restore を呼び出します。 restore コマンドは、レジストリからファイルを取得し、ローカル キャッシュに格納します。

Note

restore コマンドはキャッシュを更新しません。 詳細については、「restore」を参照してください。

自動復元を防ぐには、 --no-restore スイッチを使用します。

bicep build --no-restore <bicep-file>

--no-restore スイッチを使用するには、Bicep CLI バージョン 0.4.X 以降が必要です。

外部モジュールのいずれかがまだキャッシュされていない場合、--no-restore スイッチを使用したビルド プロセスは失敗します。

The module with reference "br:exampleregistry.azurecr.io/bicep/modules/storage:v1" hasn't been restored.

このエラーが発生した場合は、build スイッチを使用せずに --no-restore コマンドを実行するか、最初bicep restore実行します。

build-params

build-params コマンドは、 ファイルを JSON パラメーター ファイルにビルドします。

bicep build-params params.bicepparam

このコマンドは、 params.bicepparam パラメーター ファイルを params.json JSON パラメーター ファイルへ変換します。

コンソール

console コマンドは、Bicep CLI v0.42.1 以降で使用できます。 Bicep式用の対話型の読み取りEval-Print ループ (REPL) 環境を提供します。 これにより、対話型コンソール セッションでBicep関数と式を試すことができます。特に、式、関数、ユーザー定義関数などのBicepロジックを作成またはテストする場合に便利です。 次の機能がサポートされています。

  • Interactive 式の評価: Bicep式を入力し、評価された結果をすぐに確認します
  • 変数宣言: 'var name = 式構文を使用して変数を定義し、後続の式で再利用します。
  • 複数行入力: 構造完了の自動検出による複雑な複数行式のサポート
  • 構文の強調表示: 入力と出力のリアルタイム構文の強調表示

console コマンドには、次の制限があります。

  • Azure コンテキストを必要とする式はサポートされません (例: resourceGroup())
  • for-loop 式はサポートされません。例: [for i in range(0, x): i]
  • コンソール セッション間に永続的な状態がない
  • 入力候補のサポートなし

次のコマンドを使用して、Bicepコンソール セッションを開始します。

bicep console

コンソールを終了するには、 ESC を押すか、 exit コマンドを使用します。

例示

単純式

> 1 + 2
3

> 'Hello, ${'World!'}'
'Hello, World!'

> length(['a', 'b', 'c'])
3

変数宣言

> var myName = 'John'
> var greeting = 'Hello, ${myName}!'
> greeting
'Hello, John!'

複数行式

式が構造的に完了すると、コンソールによって自動的に検出されます。

> var config = {
  name: 'myApp'
  version: '1.0.0'
  settings: {
    debug: true
    timeout: 30
  }
}
> config.settings.debug
true

複合式

ラムダ
> var users = [
  { name: 'Alice', age: 30 }
  { name: 'Bob', age: 25 }
]
> map(users, user => user.name)
['Alice', 'Bob']

> filter(users, user => user.age > 26)
[
  {
    age: 30
    name: 'Alice'
  }
]
ユーザー定義型と関数
> type PersonType = {
  name: string
  age: int
}
> func sayHi(person PersonType) string => 'Hello ${person.name}, you are ${person.age} years old!'
> var alice = {
  name: 'Alice'
  age: 30
}
> [ sayHi(alice), sayHi({ name: 'Bob', age: 25 })]
[
  'Hello Alice, you are 30 years old!'
  'Hello Bob, you are 25 years old!'
]

ファイルからコンテンツを読み込む

Bicepコンソールでは、load*() 関数もサポートされています。 bicep console コマンドの実行元のディレクトリは、load*()関数を評価するときに現在のディレクトリとして使用されます

次の例は、loadDirectoryFileInfo() を使用して、ディレクトリ内のすべてのBicep ファイルに関する情報を読み込む方法を示しています。

> loadDirectoryFileInfo('./modules/', '*.bicep')
[
  {
    relativePath: 'C:/Bicep/modules/appService.bicep'
    baseName: 'appService.bicep'
    extension: '.bicep'
  }
]

配管と標準入出力リダイレクト

コンソール コマンドは、パイプ処理またはリダイレクトされた標準入力によって提供される式の評価をサポートし、次のようなシナリオを可能にします。

  • エコーを使用して式テキストを渡す
  • 式をコンソールにフィードするスクリプトの作成
  • 生成または変換されたBicep スニペットの迅速なテスト

Powershell:

# piped input
"parseCidr('10.144.0.0/20')" | bicep console

Bash:

# piped input
echo "parseCidr('10.144.0.0/20')" | bicep console
# stdin redirection from file content
bicep console < test.txt

複数行入力もサポートされています。

"{
> foo: 'bar'
> }.foo" | bicep console

出力は 'bar' になります。

出力リダイレクトもサポートされています。

"toObject([{name:'Evie', age:4},{name:'Casper', age:3}], x => x.name)" | bicep console > output.json
more output.json

出力は次のとおりです。

{
  Evie: {
    name: 'Evie'
    age: 4
  }
  Casper: {
    name: 'Casper'
    age: 3
  }
}

逆コンパイル

decompile コマンドは、JSON ARM テンプレートをBicep ファイルに変換します。

bicep decompile main.json

このコマンドでは、main.json と同じディレクトリの中に main.bicep という名前のファイルが作成されます。 main の場合。同じディレクトリにbicepが存在する場合は、--force スイッチを使用して、既存のBicep ファイルを上書きします。

このコマンドの使用方法の詳細については、「decompile JSON ARM template to Bicep」を参照してください。

decompile-params

decompile-params コマンドは、JSON パラメーター ファイルを.bicepparam パラメーター ファイルに逆コンパイルします。

bicep decompile-params azuredeploy.parameters.json --bicep-file ./dir/main.bicep

このコマンドは、 azuredeploy.parameters.json パラメーター ファイルを azuredeploy.parameters.bicepparam ファイルに逆コンパイルします。 --bicep-file を使用して、using 宣言で参照されるBicep ファイル (.bicepparam ファイルを基準とする) へのパスを指定します。

format

format コマンドは、推奨されるスタイル規則に従うようにBicep ファイルを書式設定します。 これは、Bicep ファイルのコード フォーマッタまたは "より美しい" と考えてください。 Visual Studio Codeの SHIFT+ALT+F ショートカットと同じ関数があります。

bicep format main.bicep

generate-params

generate-params コマンドは、指定されたBicep ファイルからパラメーター ファイルをビルドし、既存のパラメーター ファイルがある場合は更新します。

bicep generate-params main.bicep --output-format bicepparam --include-params all

このコマンドは、main.bicepparam という名前のBicep パラメーター ファイルを作成します。 パラメーター ファイルには、既定値で構成されているかどうかに関係なく、Bicep ファイル内のすべてのパラメーターが含まれます。

bicep generate-params main.bicep --outfile main.parameters.json

このコマンドは、 main.parameters.jsonという名前のパラメーター ファイルを作成します。 パラメーター ファイルには、Bicep ファイルで既定値が構成されていないパラメーターのみが含まれています。

インストール

install コマンドは、Bicep CLI をローカル環境に追加し、Azure CLIでのみ使用できます。 詳細については、「install Bicep tools を参照してください。

最新バージョンをインストールするには、次のコマンドを実行します。

N/A

特定のバージョンをインストールするには、次のコマンドを使用します。

N/A

jsonrpc

jsonrpc コマンドは、JSON-RPC インターフェイスを使用して Bicep CLI を起動し、Bicep ファイルとのプログラムによる高速な対話を可能にします。 詳細な使用方法、ワイヤ形式、使用可能な方法、接続オプションについては、Bicep CLI jsonrpc コマンドを参照してください。

lint

lint コマンドは、Bicep ファイルのエラーと linter rule 違反を返します。

bicep lint main.bicep

Bicep ファイルに外部レジストリを参照するモジュールが含まれている場合、lint コマンドは自動的に restore を呼び出します。 restore コマンドは、レジストリからファイルを取得し、ローカル キャッシュに格納します。

Note

restore コマンドはキャッシュを更新しません。 詳細については、「restore」を参照してください。

自動復元を防ぐには、 --no-restore スイッチを使用します。

bicep lint --no-restore <bicep-file>

外部モジュールのいずれかがまだキャッシュされていない場合、--no-restore スイッチを使った lint プロセスは失敗します。

The module with reference "br:exampleregistry.azurecr.io/bicep/modules/storage:v1" has not been restored.

このエラーが発生した場合は、lint スイッチを指定せずに --no-restore コマンドを実行するか、最初に bicep restore を実行します。

list-versions

list-versions コマンドは、使用可能なすべてのバージョンの Bicep CLI を返します。 新しいバージョンにアップグレードするか新しいバージョンをインストールする場合は、このコマンドを使用します。 このコマンドは、Azure CLIでのみ使用できます。

N/A

パブリッシュ

publish コマンドは、レジストリにモジュールを追加します。 Azure コンテナー レジストリが存在し、レジストリに発行するアカウントに適切なアクセス許可が必要です。 モジュール レジストリの設定の詳細については、「 Bicep モジュールのプライベート レジストリを使用するを参照してください。 モジュールを発行するには、レジストリにアクセスするための適切なプロファイルとアクセス許可がアカウントに必要です。 Bicep構成ファイルで、レジストリに対する認証のプロファイルと資格情報の優先順位を構成できます。

ファイルをレジストリに発行すると、それをモジュール内で参照できます。

publish コマンドと --documentationUri/-d パラメーターを使用するには、Bicep CLI バージョン 0.14.X 以降が必要です。

モジュールをレジストリに発行するには、次のコマンドを使用します。

bicep publish <bicep-file> --target br:<registry-name>.azurecr.io/<module-path>:<tag> --documentationUri <documentation-uri>

次に例を示します。

bicep publish storage.bicep --target br:exampleregistry.azurecr.io/bicep/modules/storage:v1 --documentationUri https://www.contoso.com/exampleregistry.html

publish コマンドは、bicepconfig.json ファイルで指定されたエイリアスを認識しません。 モジュールの完全なパスを指定してください。

警告

同じターゲットに発行すると、古いモジュールが上書きされます。 更新時にバージョンをインクリメントします。

復元

Bicep ファイルで、レジストリに発行するモジュールが使用されている場合、restore コマンドはレジストリから必要なすべてのモジュールのコピーを取得します。 これらのコピーはローカル キャッシュに格納されます。 Bicep ファイルは、ローカル キャッシュで外部ファイルを使用できる場合にのみビルドできます。 通常、復元はビルド プロセスによって自動的にトリガーされるため、実行する必要はありません。

外部モジュールをローカル キャッシュに復元するには、レジストリにアクセスするための適切なプロファイルとアクセス許可がアカウントに必要です。 profile と資格情報の優先順位を構成して、Bicep構成ファイル内のレジストリに対する認証を行うことができます。

restore コマンドを使用するには、Bicep CLI バージョン 0.14.X 以降が必要です。

ファイルの外部モジュールを手動で復元するには、次のコマンドを使用します。

bicep restore <bicep-file>

指定するBicep ファイルは、デプロイするファイルです。 これには、レジストリにリンクするモジュールが含まれている必要があります。 たとえば、次のファイルを復元できます。

module stgModule 'br:exampleregistry.azurecr.io/bicep/modules/storage:v1' = {
  name: 'storageDeploy'
  params: {
    storagePrefix: 'examplestg1'
  }
}

ローカル キャッシュは次の中に見つかります。

  • Windows時

    %USERPROFILE%\.bicep\br\<registry-name>.azurecr.io\<module-path\<tag>
    
  • Linux の場合

    /home/<username>/.bicep
    
  • Mac の場合

    ~/.bicep
    

モジュールが既にキャッシュされている場合、restore コマンドはキャッシュを更新しません。 キャッシュを更新するには、キャッシュからモジュール パスを削除するか、--force コマンドで restore スイッチを使用します。

スナップショット

Bicep CLI v0.41.2 以降を使用すると、snapshot コマンドを使用して、.bicepparam ファイルからBicepデプロイの正規化された確定的表現を作成できます。 このスナップショットを後のスナップショットと比較して、Azureに何もデプロイせずに、リファクタリングによって引き起こされる変更を理解できます。 このコマンドは、次の場合に特に便利です。

  • Visual Diffs: リファクタリング (モジュールへのコードの移動など) によって基になるリソース定義がどのように変更されるかを正確に確認します。
  • 複合式: デプロイ前に複雑な文字列または変数が実際に評価される内容を理解します。
  • CI/CD 検証: プル要求中にインフラストラクチャ ロジックの意図しない変更を自動的にキャッチします。

スナップショットの作成

このコマンドは、 .snapshot.json ファイルを生成します。 このファイルは "正規化" されています。つまり、モジュールの境界のようなノイズが除去されるため、リソース自体に集中できます。

bicep snapshot --mode overwrite <bicep-param-file>

次の JSON ファイルは、スナップショットの例を示しています。

{
  "predictedResources": [
    {
      "id": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Storage/storageAccounts/stmyappstorage001', subscription().subscriptionId, resourceGroup().name)]",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "stmyappstorage001",
      "apiVersion": "2025-01-01",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    }
  ],
  "diagnostics": []
}

変更を検証する

スナップショットを作成したら、検証モードでコマンドを実行します。 現在のBicep コードを保存されたスナップショットと比較し、what-if コマンドと同様に、視覚的な相違を示しますが、完全にローカルです。

bicep snapshot --mode validate <bicep-param-file>

サンプル出力は次のようになります。

PS C:\bicep> bicep snapshot --mode validate main.bicepparam
Snapshot validation failed. Expected no changes, but found the following:

Scope: <unknown>

  ~ [format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Storage/storageAccounts/stmyappstorage001', subscription().subscriptionId, resourceGroup().name)]
    ~ apiVersion: "2025-01-01" => "2025-06-01"
    ~ sku.name:   "Standard_LRS" => "Standard_GRS"

"スナップショットの検証に失敗しました" は、2 つのスナップショットの違いを示します。

Bicep CLI スナップショットと What-if には、次の違いがあります。

機能 bicep snapshot az deployment group what-if
実行 ローカルのみ (オフライン) クラウドベース (オンライン)
比較 コードと保存されたファイルを比較します コードとライブ Azure状態を比較します
速度 非常に高速 低速 (API 呼び出しが必要)
ユースケース(事例) リファクタリングとロジック テスト デプロイ前の最終チェック

コンテキストを提供する

スナップショットBicep実行すると、CLI によってコードのローカル評価が実行されます。 Azureとは通信しないため、サブスクリプション ID または現在のリソース グループ名をクラウドに "要求" することはできません。

コードで環境関数 ( subscription().id など) を使用している場合、CLI 引数を使用して特定のコンテキストを指定しない限り、スナップショットは失敗するかプレースホルダーを返します。

実際のデプロイ環境をシミュレートするには、次のフラグを渡します。

引数 目的 値の例
--subscription-id 返される値を置き換えます。 subscription().subscriptionId 00000000-1111-2222-3333-444444444444
--resource-group 返される値を置き換えます。 resourceGroup().name my-production-rg
--location の既定の場所を設定します。 deployment().location westeurope
--tenant-id 返される値を置き換えます。 tenant().tenantId 72f988bf-86f1-41af-91ab-2d7cd011db47
--management-group 返される値を置き換えます。 managementGroup().name my-corp-mg
bicep snapshot main.bicepparam \
  --subscription-id 00000000-0000-0000-0000-000000000000 \
  --resource-group my-temp-rg \
  --location eastus \
  --mode overwrite

アップグレード

upgrade コマンドは、インストールされているバージョンを最新バージョンで更新します。 このコマンドは、Azure CLIでのみ使用できます。

N/A

バージョン

version コマンドは、インストールされているバージョンを返します。

bicep --version

Bicep CLI をインストールしなかった場合は、Bicep CLI が見つからなかったことを示すエラー メッセージが表示されます。

このコマンドには、バージョン番号が表示されます。

Bicep CLI version 0.29.45 (57a44c0230)

次のステップ

Bicep ファイルのデプロイの詳細については、以下を参照してください。