Azure

ARM テンプレート → Bicep 移行ガイド|decompile・手動調整・段階的移行・What-If 検証

2026-05-24
NicheeLab編集部

Microsoft Azure の伝統的な IaC である ARM テンプレートから後継の Bicep への移行は、新規プロジェクトでは既にデファクトスタンダードとなっています。 本記事では、既存 ARM 資産を Bicep へ段階的に移行する実践的なガイドを、az bicep decompile の活用・手動調整・段階的移行ロードマップ・What-If 検証の観点から整理します。

なぜ Bicep に移行するのか

項目ARM JSONBicep
形式JSON (冗長)DSL (簡潔)
コード量標準約 50% 削減
可読性
IntelliSense限定強力
型チェック弱い強い
Module 化Linked TemplateModule (簡潔)
Microsoft 推奨レガシー主推奨

Microsoft 公式の Azure 推奨 IaC ツールとして位置付けられ、新規プロジェクトは Bicep 一択。既存 ARM 資産も段階的な移行が推奨される (一括移行は不要)。

az bicep decompile の使い方

既存 ARM JSON を Bicep に自動変換するコマンド:

az bicep decompile --file template.json

出力は template.bicep ファイルとして保存されます。

変換後の確認手順

  1. 警告メッセージ確認: BCP の警告 (複雑な式やカスタム関数の手動調整が必要)
  2. 再トランスパイル比較: az bicep build で再度 ARM JSON に変換、元 ARM JSON と diff 比較 (一致すべき)
  3. What-If 検証: az deployment group what-if で適用結果を確認、想定外の変更がないか検証

シンプルなテンプレートでも 80-90% は自動変換可能、残り 10-20% を手動調整するパターンが現実的です。

手動調整が必要なケース

Bicep decompile で完全自動化できない代表的なケース:

  1. ARM の variables を Bicep の var に置き換え (式が複雑な場合は手動最適化)
  2. Copy ループを Bicep の for にリファクタリング (より読みやすく)
  3. Nested Template を Bicep Module に分解 (再利用性向上)
  4. User-defined Function を Bicep の userDefinedFunction に置換 (Bicep 2024 で追加)
  5. Symbolic Names の調整: ARM の resourceId 関数を Bicep の resource シンボル参照に置換
  6. Conditional Resource を Bicep の if 構文に最適化
  7. Output の型注釈追加

例: ARM の Copy ループ → Bicep の for

ARM (Before)

{
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "2023-01-01",
  "name": "[concat('stg', copyIndex())]",
  "copy": {
    "name": "storageLoop",
    "count": 3
  },
  ...
}

Bicep (After)

resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = [for i in range(0, 3): {
  name: 'stg${i}'
  ...
}]

段階的移行の推奨ステップ

Big Bang 移行 (一括変換) は推奨されない。段階的アプローチが標準。

Phase期間アクション
Phase 11-2 ヶ月新規開発を Bicep に統一、既存 ARM は維持。組織標準テンプレート・Module Library 整備
Phase 23-6 ヶ月既存 ARM のメンテナンス頻度が高いテンプレートから優先移行 (週次・月次デプロイ)
Phase 36-12 ヶ月低頻度メンテナンスの ARM を順次移行 (年次更新程度)
Phase 412+ ヶ月一度も触らない ARM はそのまま放置 (移行 ROI 低)

Microsoft 自身も既存 ARM の継続利用を許容しており、無理な全面移行は不要。組織のスキル習熟・チームキャパシティに応じたペース設定が現実的。

Module 化のリファクタリング

ARM の Nested Template や Linked Template を Bicep Module にリファクタリング。

推奨ディレクトリ構造

infra/
├── main.bicep              # エントリポイント
├── main.parameters.json    # 環境別パラメータ
├── modules/
│   ├── network.bicep       # VNet / NSG / Subnet
│   ├── storage.bicep       # Storage Account
│   ├── compute.bicep       # VM / App Service / AKS
│   └── identity.bicep      # Managed Identity / Key Vault
└── README.md

主要技術

  • Azure Verified Modules (AVM) ベースのカスタマイズ (Microsoft 公式 verified Module)
  • 社内 Bicep Registry (Azure Container Registry) で Module 公開・バージョン管理
  • Bicep 2024 の User-defined Types で型安全性向上
  • Bicep Visualizer (VS Code 拡張機能) で依存関係可視化

What-If デプロイ検証

本番デプロイ前の What-If は必須レベル。Bicep 移行プロジェクトでは『元 ARM のデプロイ結果と新 Bicep のデプロイ結果が一致』を What-If で検証するのが最重要ステップ。

az deployment group what-if \
  --resource-group myRG \
  --template-file main.bicep \
  --parameters main.parameters.json

出力カテゴリ

  • + Create: 新規作成
  • - Delete: 削除
  • ~ Modify: 変更 (差分表示)
  • = NoChange: 変更なし
  • * Deploy: デプロイのみ (Idempotent)

CI/CD パイプラインに What-If を組み込み、Pull Request レビューフェーズで自動実行する設計が現代的なベストプラクティス。

Bicep Linter

az bicep lint で Bicep コードの静的解析。

主要ルール

  • no-hardcoded-location: location をハードコードせず Parameter 化
  • no-unused-parameters / no-unused-variables: 未使用要素検出
  • no-loc-expr-outside-params: location 式の Parameter 配置
  • prefer-interpolation: string concat より string interpolation
  • explicit-values-for-loc-params: Parameter デフォルト値明示
  • protect-commandtoexecute-secrets: Secret の Command Line 露出防止

bicepconfig.json でプロジェクト固有ルールカスタマイズ可能。CI/CD パイプラインで Lint を実行、コード品質維持。 VS Code Bicep 拡張機能でリアルタイム Lint 表示、開発時に即座にフィードバック取得が可能です。

CI/CD パイプラインへの統合

Bicep 移行後の CI/CD パイプライン標準パターン:

  1. Lint: az bicep lint
  2. Build: az bicep build (ARM JSON 生成、Validation)
  3. What-If: az deployment group what-if
  4. Manual Approval (Production 環境)
  5. Deploy: az deployment group create

詳細は Bicep チュートリアル の CI/CD 統合パターン参照。

移行ベストプラクティス

  1. 段階的移行: 一括変換は避け、優先順位付け
  2. 新規開発は Bicep 一択、既存 ARM は段階的
  3. az bicep decompile で自動変換 → 手動調整
  4. Symbolic Names・for ループ・Module 化でBicep らしい記述に最適化
  5. What-If で変換結果を必ず検証
  6. CI/CD パイプラインで Lint・Build・What-If 自動化
  7. Azure Verified Modules (AVM) 活用
  8. 社内 Bicep Registry で Module 集中管理
  9. VS Code Bicep 拡張機能でリアルタイム開発支援
  10. 定期的なチーム勉強会で Bicep スキル展開

関連認定試験

よくある質問

ARM テンプレートから Bicep への移行が必要な理由は?

ARM テンプレートは Azure の伝統的な IaC で、JSON 形式の冗長な記述・読みにくさ・モジュール化困難という課題があった。Bicep (2021 GA) は ARM の後継として設計され、ARM JSON へ自動トランスパイル (1:1 対応) されつつ、コード量が約 50% 削減・IntelliSense・型チェック・Module 機能を提供。Microsoft 公式の Azure 推奨 IaC ツールとして位置付けられ、新規プロジェクトは Bicep 一択。既存 ARM 資産も段階的な移行が推奨される (一括移行は不要) というのが Microsoft 公式ガイダンスで、長期的なメンテナンス性向上・新規メンバーへの引き継ぎ容易化のため移行価値が高いです。

Bicep decompile の使い方は?

az bicep decompile --file template.json コマンドで、既存 ARM JSON ファイルを Bicep に自動変換可能。出力は template.bicep ファイルとして保存される。変換後の確認: 1) 警告メッセージ確認 (BCP の警告が出ることが多い、複雑な式やカスタム関数の手動調整が必要)、2) 生成された Bicep を az bicep build で再度 ARM JSON にトランスパイルし、元 ARM JSON と diff 比較 (一致すべき)、3) terraform plan 相当の az deployment group what-if で適用結果を確認、想定外の変更がないか検証。複雑なテンプレート (ネストされた Copy ループ・User-defined Function 等) では手動調整が必須で、シンプルなテンプレートでも 80-90% は自動変換可能、残り 10-20% を手動調整するパターンが現実的です。

手動調整が必要なケースは?

Bicep decompile で完全自動化できない代表的なケース: 1) ARM の variables を Bicep の var に置き換え (式が複雑な場合は手動最適化)、2) Copy ループを Bicep の for にリファクタリング (より読みやすく)、3) Nested Template を Bicep Module に分解 (再利用性向上)、4) User-defined Function を Bicep の userDefinedFunction に置換 (Bicep 2024 で追加された機能)、5) Symbolic Names の調整 (ARM の resourceId 関数を Bicep の resource シンボル参照に置換)、6) Conditional Resource (condition プロパティ) を Bicep の if 構文に最適化、7) Output の型注釈追加。これらは自動変換後に手動で『より Bicep らしい記述』に書き換える作業で、コード可読性・メンテナンス性を最大化するために必須のステップです。

段階的移行の推奨ステップは?

Big Bang 移行 (一括変換) は推奨されない。段階的アプローチ: Phase 1 (1-2 ヶ月): 新規開発を Bicep に統一、既存 ARM は維持。Bicep の組織標準テンプレート・Module Library を整備。Phase 2 (3-6 ヶ月): 既存 ARM のメンテナンス頻度が高いテンプレートから優先移行 (週次・月次デプロイされるもの)。bicep decompile + 手動調整。Phase 3 (6-12 ヶ月): 低頻度メンテナンスの ARM を順次移行 (年次更新程度)。Phase 4 (12+ ヶ月): 一度も触らない ARM テンプレートはそのまま放置 (移行 ROI 低)。Microsoft 自身も既存 ARM の継続利用を許容しており、無理な全面移行は不要。組織のスキル習熟・チームキャパシティに応じたペース設定が現実的です。

Bicep の Module 化はどう進めますか?

ARM の Nested Template や Linked Template を Bicep Module にリファクタリング。標準パターン: 1) main.bicep をエントリポイントとし parameters.bicepparam で環境別構成、2) modules/ ディレクトリに機能別 Module (network.bicep・compute.bicep・storage.bicep・identity.bicep)、3) Azure Verified Modules (AVM) ベースのカスタマイズ (Microsoft 公式 verified Module、業界ベストプラクティス準拠)、4) 社内 Bicep Registry (Azure Container Registry) で Module 公開・バージョン管理、5) Bicep 2024 の User-defined Types で型安全性向上、6) Bicep Visualizer (VS Code 拡張機能) で依存関係可視化。Module 化により大規模 Bicep プロジェクトでも保守可能、Bicep の真価が発揮されるのは Module 設計が適切に行われた時です。

What-If デプロイは必須ですか?

本番デプロイ前の What-If は必須レベル。az deployment group what-if --resource-group myRG --template-file main.bicep --parameters main.parameters.json で、実際にデプロイする前に『何が変更されるか』を予測表示。出力カテゴリ: + Create (新規作成)・- Delete (削除)・~ Modify (変更)・= NoChange (変更なし)・* Deploy (デプロイのみ)。Bicep 移行プロジェクトでは『元 ARM のデプロイ結果と新 Bicep のデプロイ結果が一致』を What-If で検証するのが最重要ステップ。CI/CD パイプラインに What-If を組み込み、Pull Request レビューフェーズで自動実行する設計が現代的なベストプラクティス。想定外のリソース削除や設定上書きを事前に検知可能で、本番事故防止の生命線です。

Bicep Linter の活用は?

az bicep lint で Bicep コードの静的解析。組み込みルール: 1) no-hardcoded-location (location をハードコードせず Parameter 化)、2) no-unused-parameters / no-unused-variables (未使用要素検出)、3) no-loc-expr-outside-params (location 式の Parameter 配置)、4) prefer-interpolation (string concat より string interpolation)、5) explicit-values-for-loc-params (Parameter デフォルト値明示)、6) protect-commandtoexecute-secrets (Secret の Command Line 露出防止) など 20+ ルール。bicepconfig.json でプロジェクト固有ルールカスタマイズ可能。CI/CD パイプラインで Lint を実行、コード品質維持。VS Code Bicep 拡張機能でリアルタイム Lint 表示、開発時に即座にフィードバック取得が可能です。

関連認定試験は?

AZ-104 (Administrator) のドメイン 1 で Bicep / ARM が問われる。AZ-400 (DevOps Engineer Expert) のドメイン 3 で CI/CD パイプライン内 Bicep 統合が深く問われる本領域の本命認定。AZ-204 (Developer Associate、2026-07 リタイア注意) で開発者視点での IaC、AZ-305 (Solutions Architect Expert) でアーキテクト視点での IaC 戦略選定 (Bicep vs ARM vs Terraform)。新規 Azure プロジェクトのデファクトスタンダードである Bicep の理解は、Azure を扱うすべてのエンジニアにとって必須スキルです。

関連記事・技術深掘り

Azure Bicep チュートリアル|ARM 後継 IaC の基本構文・モジュール化・What-If・CI/CD 統合【2026 年版】

Azure 純正 IaC ツール Bicep の完全チュートリアル。ARM JSON との違い・基本構文 (param/var/resource/module/output)・モジュール化ベストプラクティス・What-If デプロイ・GitHub Actions / Azure Pipelines 統合・ARM からの移行手順・関連認定試験 (AZ-104 / AZ-204 / AZ-400 / AZ-305) を日本語で網羅。

Azure DevOps エンジニア キャリアロードマップ|AZ-104 → AZ-400 → SC-100 シニア DevOps への道【2026 年版】

Azure DevOps Engineer になるための認定取得ロードマップ完全版。AZ-900 → AZ-104 → AZ-400 の王道ルート、GitHub と Azure DevOps の両方を扱う AZ-400 の構成、Kubernetes 認定 (CKA / CKAD / CKS) との二刀流、IaC (Bicep / Terraform) 戦略、年収レンジまで日本語で網羅。

Azure Architect キャリアロードマップ|AZ-900 → AZ-305 → SC-100 シニアアーキテクトへの道【2026 年版】

Azure Solutions Architect になるための認定取得ロードマップ完全版。AZ-900 → AZ-104 → AZ-305 の王道ルート、AZ-400 / SC-100 / AZ-700 との二刀流 / 三刀流戦略、マルチクラウド対応 (AWS / GCP)、未経験から 7-12 ヶ月の学習プラン、年収レンジまで日本語で網羅。

AZ-104 完全ガイド|Microsoft Azure Administrator Associate 出題範囲・学習リソース・合格戦略【2026 年版】

Microsoft Certified: Azure Administrator Associate (AZ-104) の完全ガイド。5 ドメイン (ID・ガバナンス / Storage / Compute / Network / Monitor) の出題範囲、必須実機演習、3-4 ヶ月の合格ロードマップ、AZ-305 / AZ-400 へのキャリアパス、renewal assessment 更新法を日本語で網羅。

本記事の技術情報は Azure Bicep Documentation に基づいています。 本記事は Microsoft Corporation の公式商品ではなく、いかなる提携・後援関係もありません。 Microsoft、Azure は Microsoft group of companies の商標です。 情報は 2026 年 5 月 24 日時点の公式公開資料に基づきます。最新情報は必ず公式ページをご確認ください。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

Azure 試験対策ページを見る
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Azure

AZ-900 完全ガイド|Microsoft Azure Fundamentals 出題範囲・学習リソース・合格戦略

Microsoft Azure Fundamentals (AZ-900) の 2026 年 1 月 14 日改訂版に対...

Azure

Azure 認定資格ロードマップ 2026 完全版|全 26 試験の体系と大型再編 (AI-901/AI-103/SC-500)

Microsoft Azure 認定資格 全 26 試験 (現行 23 + 退役 3) の 2026 年版ロードマップ。...

Azure

AI-901 完全ガイド|Azure AI Fundamentals 新試験

Microsoft Certified: Azure AI Fundamentals (AI-901) の出題範囲・Mi...

Azure

Microsoft Entra ID 入門|旧 Azure AD から学ぶ ID 管理 (AZ-900/SC-900/AZ-104 必須知識)

Microsoft Entra ID (旧 Azure Active Directory) の入門解説。2023 年 7...

Azure

DP-900 完全ガイド|Azure Data Fundamentals 出題範囲・学習リソース・合格戦略

Microsoft Azure Data Fundamentals (DP-900) の完全ガイド。4 ドメインの出題範...

Azureの記事一覧 (103件)
© 2026 NicheeLab All rights reserved.