IaC

Bicep ばいせっぷ

Infrastructure as CodeAzure Resource ManagerARM テンプレートドメイン固有言語Microsoft Azureクラウドインフラ
Bicepについて教えて

簡単に言うとこんな感じ!

BicepはMicrosoft Azureのクラウド環境を「コードで設計図として書いて、自動で構築する」ための言語だよ!筋肉みたいな名前だけど、実はAzureのインフラ管理を”力強く・スッキリ”こなすために生まれたツールなんだ。難解なJSONを書かなくても、シンプルな文法でサーバーやネットワークをコードで作れちゃうってこと!


Bicepとは

Bicepは、Microsoft Azureのクラウドリソース(仮想マシン・ネットワーク・データベースなど)をコードで定義・自動構築するためのドメイン固有言語(DSL: Domain Specific Language)です。Infrastructure as Code(IaC の考え方に基づき、「インフラの設計図をコードとして管理する」ことを可能にします。

従来、AzureのIaCはARM(Azure Resource Manager)テンプレートと呼ばれるJSON形式のファイルで行われていましたが、記述が冗長で難解でした。Bicepはそれを”人間が読み書きしやすい”シンプルな構文に置き換えたものです。書いたBicepコードは裏側でARMテンプレート(JSON)に自動変換されてAzureに適用されるため、既存のAzureの仕組みをそのまま活用できます。

2020年にMicrosoftが公開し、現在はAzure公式のIaC手段として積極的に推奨されています。AzureポータルやAzure CLIとも深く統合されており、CI/CDパイプラインへの組み込みも容易なため、システム構築の自動化・標準化を目指す現場で急速に普及しています。


Bicepの基本的な仕組み

Bicepで書いたコードは以下の流れでAzureに反映されます。

  .bicep ファイル
  (人間が書く)
       ↓  bicep build(コンパイル)
  ARM テンプレート(JSON)
  (自動生成)
       ↓  az deployment コマンド
  Azure へデプロイ
  (リソースが実際に作られる)

主な構成要素

要素役割記述例のイメージ
resource作成するAzureリソースを定義仮想マシン・ストレージなど
param外部から渡せる変数(環境ごとに値を変えられる)リージョン・サイズなど
varファイル内で使い回す変数名前の命名規則など
outputデプロイ後に取り出したい値エンドポイントURLなど
module他の.bicepファイルを部品として呼び出す共通テンプレートの再利用

Bicepコードの例(ストレージアカウント作成)

param location string = 'japaneast'
param storageAccountName string = 'mystorage${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

output storageEndpoint string = storageAccount.properties.primaryEndpoints.blob

同じ内容をARMテンプレート(JSON)で書くと3〜4倍の行数になります。Bicepのシンプルさが実感できます。

覚え方:「腕の筋肉=力強く・無駄なく」

名前の由来は文字通り「上腕二頭筋(Bicep)」。AzureのARMを”力強く動かす筋肉”という比喩です。「ARM(腕)を動かすBicep(筋肉)」と覚えると関係性がスッと入ります。


歴史と背景

  • 2014年 — MicrosoftがARM(Azure Resource Manager)を導入。JSONテンプレートでインフラを定義できるようになる
  • 2016年〜 — JSONテンプレートの複雑さが問題視され、開発者コミュニティから「もっとシンプルな記法を」という声が高まる
  • 2020年 — MicrosoftがBicepをOSSとしてGitHubで公開。プレビュー版提供開始
  • 2021年3月 — Bicep v0.3 がGA(一般提供)開始。Azure CLIに統合される
  • 2021年〜 — Azure Portalのデプロイ画面でBicepエクスポートに対応。公式ドキュメントもBicep優先に切り替わる
  • 2022年以降 — Visual Studio CodeのBicep拡張機能が強化され、補完・検証・可視化が充実。企業導入が本格化
  • 現在 — MicrosoftはAzureのIaCとしてBicepを第一推奨。Terraformとの選択肢として並ぶ存在に

BicepとARMテンプレート・Terraformとの比較

AzureのIaC手段として代表的な3つを比較します。

比較項目BicepARMテンプレート(JSON)Terraform
記法のシンプルさ◎ 読みやすい△ 冗長なJSON○ HCL言語で読みやすい
Azure対応の速さ◎ 最新機能をすぐサポート◎ 同上(Bicepの変換先)△ プロバイダ更新待ちがある
マルチクラウド対応✗ Azureのみ✗ Azureのみ◎ AWS・GCPにも対応
学習コスト低〜中
Microsoft公式サポート◎ 公式推奨◎ 公式△ サードパーティ
既存ARMテンプレートとの互換◎ 相互変換可能△ 変換ツールが必要
BicepとARMテンプレートの関係 Bicep ファイル (.bicep) resource(リソース定義) param(変数) module(部品化) output(出力) bicep build (コンパイル) ARM テンプレート (JSON) {"$schema": "...", "resources": [ {"type": "Microsoft .Storage/...", "apiVersion":... } ]} Azure へデプロイ az deployment コマンド Bicepは人間が書きやすい構文 → 自動でJSONに変換 → Azureへ適用

BicepとTerraformの使い分け指針

  • Azureだけを使う場合 → Bicepが有利(最新API対応が速く、Microsoftの公式サポートも厚い)
  • AWS・GCPも含めてマルチクラウドを管理したい場合 → Terraformが向いている
  • 既存のARMテンプレートがある場合bicep decompileコマンドでBicepに変換できる

関連する規格・RFC

※ Bicepは特定のIETF RFCやISO規格には直接対応していないため、このセクションは省略します。


関連用語

  • Infrastructure as Code — インフラをコードで定義・管理する考え方
  • ARM テンプレート — AzureリソースをJSONで定義するMicrosoft公式テンプレート形式
  • Terraform — HashiCorp製のマルチクラウド対応IaCツール
  • Azure Resource Manager — Azureのリソースを統合管理するデプロイ・管理レイヤー
  • CI/CD — コードの変更を自動でテスト・デプロイするパイプラインの仕組み
  • DevOps — 開発と運用を連携させてシステム改善を高速化する考え方・文化
  • クラウドコンピューティング — インターネット経由でITリソースを提供・利用するサービス形態
  • Microsoft Azure — Microsoftが提供するクラウドプラットフォーム