なぜAzureチームはついにARMテンプレートから離れつつあるのか
By Mirko Peters ·
長年、Microsoft Azureを扱うクラウドエンジニアや開発者は、Infrastructure as Code(IaC)の導入において、喜びと苦さが入り混じった現実に直面してきました。一方では、Azure Resource Manager(ARM)テンプレートが、クラウドインフラを確実にプロビジョニングand管理するためのネイティブで強力な手段を提供していました。他方では、そうしたテンプレートの記述と保守には、冗長なJSONファイル、深いネスト、肥大化したコード構造、そしてチームメンバーがリポジトリに触れるたびに発生する厄介なマージコンフリクトとの格闘が伴いました。1,000行のJSONドキュメントで、位置がずれた括弧や目に見えないカンマのデバッグに何時間も費やした経験があれば、従来のAzureデプロイに付きまとう苛立ちがどのようなものか、よくご存じでしょう。
Automatically translated with AI from the original post. Read the English original

長年、Microsoft Azureを扱うクラウドエンジニアや開発者は、Infrastructure as Code(IaC)の導入において、喜びと苦さが入り混じった現実に直面してきました。一方では、Azure Resource Manager(ARM)テンプレートが、クラウドインフラを確実にプロビジョニングand管理するためのネイティブで強力な手段を提供していました。他方では、そうしたテンプレートの記述と保守には、冗長なJSONファイル、深いネスト、肥大化したコード構造、そしてチームメンバーがリポジトリに触れるたびに発生する厄介なマージコンフリクトとの格闘が伴いました。1,000行のJSONドキュメントで、位置がずれた括弧や目に見えないカンマのデバッグに何時間も費やした経験があれば、従来のAzureデプロイに付きまとう苛立ちがどのようなものか、よくご存じでしょう。
幸いなことに、クラウドの状況は進化しています。Azureチームは、Azure Resource Managerの確実性を損なうことなくJSONの問題点を抽象化するように設計された、よりすっきりと人にとって扱いやすいドメイン固有言語であるBicepへと、生のARMテンプレートから着実に移行しています。この包括的なガイドでは、この移行が起きている理由、Bicepの内部の仕組み、そして移行によってインフラコードベースを最大60%削減できる理由を解説します。
ARMテンプレート疲れの紹介
Bicepがなぜ Azureコミュニティを席巻しているのかを理解するには、まずARMテンプレート疲れの根本原因を見極める必要があります。Azureがテンプレートによるデプロイを広めた当初、JSONはデータ交換の標準でした。しかしJSONは、プログラミング言語やインフラ定義ツールとして設計されたものではありません。クラウド環境が大規模化し、高度になるにつれて、JSONの限界は明白になりました。
従来のARMテンプレートでは、複雑さが指数関数的に増大します。仮想ネットワーク、サブネット、Key Vault、マネージドIDを含む標準的なエンタープライズ向けデプロイは、あっという間に数千行に及ぶ肥大化したファイルになります。JSONには標準でネイティブなループ構文や高度なモジュール化機能がないため、エンジニアは複雑なcopy関数や煩雑なネストに頼ることが頻繁にあります。複数のチームメンバーが同じ巨大なテンプレートファイルを編集しようとすると、頻繁なマージコンフリクトは例外ではなく当たり前になります。これらのファイルのデバッグは、干し草の山から針を探すようなものに感じられ、多くのチームが、ミスの起きやすい手作業によるポータルでのクリック操作を選び、自動化されたIaCを断念する原因になっています。これでは、DevOpsによる自動化の目的そのものが損なわれてしまいます。
Bicepの概要
こうした開発者の広範な課題を受けて、Microsoftは、ARMテンプレートの上に位置する透過的な抽象化レイヤーとしてBicepを導入しました。Bicepは Azure Resource Managerの代替ではなく、それを操作するためのよりスマートで簡潔な方法です。ARMテンプレートでできることは、すべてBicepでもできますが、認知的負荷はごくわずかです。
Bicepの中核には、ほぼ平易な英語のように読める簡素化された構文があります。JSONの構文上のノイズ(終わりのない引用符、括弧、カンマ)を取り除き、それをすっきりとした宣言的な記述に置き換えます。Bicepはコンパイル言語であるため、コードが唯一の正として機能し、デプロイの段階で標準のARM JSONにトランスパイルされます。この巧みなアーキテクチャにより、Azureの基盤となるデプロイエンジンとの100%の互換性を保ちつつ、日々の開発者の体験を大幅に向上させています。
Bicepの仕組み
Bicepの仕組みを理解すると、人間にとっての読みやすさと、機械による実行との間をBicepがどのように橋渡ししているかがよく分かります。Bicepでインフラコードを書くときは、拡張子が.bicepのファイルを作成します。これらのファイルは、Azureリソースのプロビジョニングに特化して最適化されたドメイン固有言語を使用します。
ワークフローは非常にシンプルです。
- 作成: Visual Studio Codeなどの最新の統合開発環境を使って、ローカルで
.bicepファイルを作成・編集します。IntelliSense、構文検証、リアルタイムのリンティングを提供する豊富な拡張機能を活用できます。 - コンパイル: Bicep CLIコマンド
bicep build main.bicepを使用して、整理されたコードを標準のARM JSONテンプレートにコンパイルします。 - デプロイ: 生成されたテンプレートは、これまでと同じく Azure CLI または Azure PowerShell を使って Azure に直接デプロイします。
このコンパイル工程により、Azure の中核となるデプロイエンジンは変更されません。そのため、エンタープライズ ポリシー、ロールベースのアクセス制御、デプロイ時の安全性チェックは、引き続き問題なく機能します。
Bicep のメリット
JSON ベースの ARM テンプレートから Bicep へ移行すると、エンジニアリング組織には即座に測定可能な効果が現れます。まず何より、コード量が大幅に減ります。チームからは、コードが 50% から 60% 削減されたという報告が定期的に寄せられています。つまり、記述、レビュー、保守が必要な行数が減ります。
さらに、Bicep はチームでの共同作業を大きく後押しします。インフラストラクチャの定義を小さく再利用可能なモジュールに分割できるため、メンバーはお互いの作業を妨げることなく、アーキテクチャの別々の部分を同時に進めることができます。バージョン管理がはるかに整理され、コードレビューも数時間ではなく数分で済みます。また、クラウド プロジェクトへの新しいエンジニアの参加もスムーズになり、大変な試練ではなく円滑な立ち上がりが可能になります。
Bicep の使い始め
Bicep は、ほとんど手間をかけずに始められます。Bicep CLI は軽量で、Azure CLI とネイティブに統合されているため、Windows、macOS、Linux のいずれでも数分で使える状態になります。
まず、Azure CLI と Visual Studio Code がインストールされていることを確認してください。そのうえで、公式の Bicep 拡張機能を VS Code にインストールします。これにより、コード補完、パラメーターの検証、リソースの種類の自動検出といった高度な機能が使えるようになります。設定が完了したら、Azure ストレージ アカウントや仮想ネットワークなどの最初のリソースを記述します。従来は数十行の密な JSON の定型コードが必要だった内容が、数行のすっきりしたコードで済みます。
Bicep のユース ケース
Bicep は、特にエンタープライズの次の 2 つのシナリオで力を発揮します。基盤となる Infrastructure as Code の実装と、複数環境へのデプロイです。
標準的な IaC パイプラインでは、Bicep は GitHub Actions や Azure DevOps などの CI/CD プラットフォームとシームレスに統合できます。これにより、完全に自動化された再現性のあるデプロイが可能になり、構成のドリフトを防げます。開発、テスト、ステージング、本番といった複数環境のアーキテクチャでは、Bicep のパラメーターとモジュール式テンプレートのサポートにより、単一の標準化されたコードベースを維持しながら、環境固有の変数や構成を都度安全に組み込むことができます。
よくある質問
Bicep とは何ですか?
Bicep は、Microsoft が作成した透明性の高いオープンソースのドメイン固有言語です。従来の ARM テンプレートよりすっきりとした構文で、Azure リソースを宣言的にデプロイできます。
Bicep は ARM テンプレートとどう違いますか?
ARM テンプレートは冗長な JSON 構文のため、読みにくく保守もしにくい一方、Bicep は簡潔で読みやすい構文と高度なツールのサポートを提供します。Bicep ファイルは、デプロイの前に ARM テンプレートにコンパイルされます。
既存の ARM テンプレートを Bicep に変換できますか?
はい、可能です。Bicep CLI を使えば、既存の ARM JSON テンプレートを Bicep ファイルに簡単に逆コンパイルでき、すぐにその簡潔な構文を活用できます。
Bicep は無料で使えますか?
はい、Bicep は完全に無料でオープンソースです。また、Microsoft が Azure インフラストラクチャ管理の第一級の機能として全面的にサポートしています。
Bicep はモジュール化をサポートしていますか?
もちろんです。Bicep は最初からモジュール式のコード設計をサポートするように作られており、大規模なインフラストラクチャのデプロイを、再利用可能で管理しやすいコンポーネントに分割できます。
レガシーな ARM テンプレートから離れることは、先進的なチームだけの実験的な選択ではなく、効率的でスケーラブルな Azure エンジニアリングの基本標準になりつつあります。コードの複雑さを大幅に減らし、共同作業を強化し、複数環境へのデプロイを合理化することで、Bicep はクラウド実務者が設定ファイルと格闘するのではなく、優れたソフトウェアの構築に集中できるようにします。
このトピックをさらに深く理解し、現代のチームがクラウド戦略をどのように近代化しているかについての実践的な知見を得るには、関連するポッドキャスト エピソード Bicep - Simply Explained をぜひご覧ください。