Azure Developer CLIで優勝していくことにするわね

## この記事で伝えたいこと（ポイント）

- Azure Developer CLIについて見ていくよ
- 特徴をまとめたよ
- 使い方や注意点をまとめたよ

## はじめに

この記事ではAzure Developer CLI（以下、本文ではazd）について解説した記事です。
内容としては2023年10月の.NETラボ勉強会で発表した内容を記載しています。

登壇資料：[Azure Developer CLIの振り返りとDeep Dive](https://speakerdeck.com/ymd65536/azure-developer-clinozhen-rifan-ritodeep-dive)

公式ドキュメント：[Azure Developer CLI (azd) | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/developer/azure-developer-cli?wt.mc_id=MVP_357747)

## Azure Developer CLIとは

2022年7月にAzure CLIとは別の系統として開発された開発者向けデベロッパーツールです。翌年の2023年5月にGAしたのち、現在においても継続して機能が追加されています。

- [Introducing the Azure Developer CLI (azd): A faster way to build apps for the cloud](https://devblogs.microsoft.com/azure-sdk/introducing-the-azure-developer-cli-a-faster-way-to-build-apps-for-the-cloud?wt.mc_id=MVP_357747)

- [Azure Developer CLI (azd) 1.0.0 release](https://devblogs.microsoft.com/azure-sdk/azd-ga-announcement?wt.mc_id=MVP_357747)
- [Azure Developer CLI (azd) - github](https://github.com/Azure/azure-dev/)

簡単にいうとAzureのインフラをテンプレート単位で展開できるCLIです。

Azure CLIとは別の形で開発されているため、Azure CLIに依存することなく利用できます。（Azure CLIが無くても利用できます）

azdテンプレートというテンプレートを使ってインフラをプロビジョニングし、その後にデプロイします。

どのようなテンプレートがあるかは[Awesome AZD Templates | Awesome Azure Dev CLI](https://azure.github.io/awesome-azd/)で確認できますので気になる方はチェックしてみましょう。

なお、テンプレートはBicepあるいはTerraformで構成できます。
※Terraformによるテンプレート作成はまだベータ版です。

[Terraform を Azure Developer CLI (azd) のコードとしてのインフラストラクチャ ツールとして使用する](https://learn.microsoft.com/ja-jp/azure/developer/azure-developer-cli/use-terraform-for-azd?wt.mc_id=MVP_357747)

### テンプレートは自分で作れるのか

V1.3.0で`Adds support for custom template sources.`の記載があるとおり
テンプレートは自作して展開できます。

### 実装

azdの実装としてはGolangが使われており、具体的にはCobraというGolangでモダンなCLIアプリケーションを開発するためのフレームワークが使われています。

- [cobra](https://github.com/spf13/cobra)

## azdのセットアップ

azdのセットアップ方法はいくつかありますが、実際に使ったことがある使い方をいくつか紹介すると4つほどあります。

- CLIで利用
- Visual Studio Code
- Visual Studio
- GitHub Codespaces
    - devcontainer.jsonのfeatureで定義できる

参考：[サポート対象言語と環境](https://learn.microsoft.com/ja-jp/azure/developer/azure-developer-cli/supported-languages-environments?wt.mc_id=MVP_357747)

### インストール方法

Windowsでは3つの方法があります。

- winget
- chocolatey
- スクリプトをPowerShell上で実行する

Linuxでは3つの方法があります。

- スクリプトをbash上で実行する
- .debパッケージ
- .rpmパッケージ

[参考:Azure Developer CLI をインストールまたは更新する](https://learn.microsoft.com/ja-jp/azure/developer/azure-developer-cli/install-azd?wt.mc_id=MVP_357747)

最後にmacOSでは2つの方法があります。

- HomeBrew（推奨）
- スクリプトをシェルで実行する

## azdでよく使うコマンド・使い方

よく使うコマンドとしては以下の通りです。

|コマンド|説明|
|:---|:---|
|azd auth login|認証|
|azd config list|azdの設定|
|azd env list|azdで利用する環境変数のリスト|
|azd package|ビルドとパッケージング|
|azd provision|環境構築|
|azd deploy|デプロイ|
|azd up|package,provision,deployを1工程で実行|
|azd down|リソースを削除する。azd upの逆|


使い方を図解すると以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/cfa697dc-1c7f-db65-9fa3-877afe7998b6.png)

なお、`az auth login`については過去バージョンだと`az login`と定義されている場合があります。バージョンによってはwarningが出ますが、動作には影響がありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/b59027a8-2331-7565-d428-47dc6e2798ee.png)

### 補足：Provisioning（プロビジョニング）とは

筆者が昔過ごしていた某通信キャリアにおいては割と当たり前に使われている業界用語みたいなものでした。知らない人も多いのかなと思ったので補足しておきます。

`Provisioning`とはとりわけIT分野においてはリソースを割り当てるという意味があります。
クラウド技術ではインフラストラクチャーを展開する意味で使われる言葉になります。

なお、azdではアプリケーションをインフラに乗せることをデプロイ、インフラを展開することをプロビジョニングと定義しています。つまり、プロビジョニングまで実行するとインフラだけできて、アプリはデプロイされないということになります。

## まとめ

azdを使うことでインフラをテンプレート化しつつ、アプリケーションを簡単にデプロイできます。
今までのツールと違うところはインフラの展開とアプリケーションの展開が全く別のコマンドで行えるというところです。

個人的にはTerraformの対応が進むともっと良いツールに化けるのではないかとちょっと期待しています。

## おわり