Check! `az bot create` で Bot Service を新規作成する

こんにちは、 @dz_ こと大平かづみです。

Prologue - はじめに
====

いつのころからか、 Azure CLI で `az bot` サブコマンドがつかえるようになりました！

Bot Service の新規作成、ソースコードのダウンロードやデプロイ、チャンネルの管理などができるようです。

なお、現段階では、  _botservice_ の拡張機能をインストールしておくと吉です。（ここでは書きませんが、 `az bot download` で `.env` ファイルが自動で作成されるなど便利です♪）

References
----

- [az bot | Microsoft Docs](https://docs.microsoft.com/en-us/cli/azure/bot?view=azure-cli-latest)
- [Download and redeploy bot source code - Bot Service | Microsoft Docs](https://docs.microsoft.com/en-us/azure/bot-service/bot-service-build-download-source-code?view=azure-bot-service-4.0)

Azure CLI の `az bot` をつかって、Bot Service を新規作成する
====

まず手始めに、 Azure CLI で Bot Service を新規作成してみましょう。

事前準備
----
アカウントはそれぞれ準備してください。

- Azure アカウント
    - [Azure の無料アカウントを今すぐ作成しましょう | Microsoft Azure](https://azure.microsoft.com/ja-jp/free/)
- Microsoft アカウント
  - [新しい Microsoft アカウントを作成する方法](https://support.microsoft.com/ja-jp/help/4026324/microsoft-account-how-to-create)
- Azure CLI
    - Azure アカウントにログインしておく
        - 参考: [Azure CLI の概要 | Microsoft Docs](https://docs.microsoft.com/ja-jp/cli/azure/get-started-with-azure-cli?view=azure-cli-latest)
    - _botservice_ 拡張機能（後述）


_botservice_ の拡張機能のインストールは、下記のコマンドで行えます。

```bash
# Azure CLI に botservice の拡張機能を追加する
az extension add --name botservice
```

大まかな流れ
----

- [Application Registration Portal](https://apps.dev.microsoft.com/) でアプリケーションを追加する
- 追加したアプリケーションのパスワードを発行する
- `az bot` コマンドで Bot Service を新規作成する

手順
----

まず、アプリケーションを登録しましょう。

[Application Registration Portal](https://apps.dev.microsoft.com/) にアクセスし、「Add an app」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3812/35f56277-c4fe-d4bd-17b4-5a1c9538de8c.png)

_Application Name_ に任意のアプリケーション名を入力し、「Create」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3812/f5bb2fb2-5fa4-a4ad-4724-cf45b6de1a5f.png)

作成ができると、以下の画面に遷移します。ここで _Application Id_ が表示されるので、控えておいてください。そして、「Generate New Password」ボタンをクリックし、パスワードを発行します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3812/dbb697f3-bb54-84e0-1015-d37bdf4552d9.png)

発行されたパスワードが表示されるので、控えておいてください。なお、このパスワードはこのタイミングでしか表示されないので、お気を付けください。もし忘れてしまった場合は、再度発行してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3812/cac8f535-ebf4-86c8-1956-1039e11a88f6.png)

ここまでで、 _Application Id_ と _Application Secret(password)_ が用意できました。

それでは、 `az bot create` で Bot Service を作成しましょう。ここでは、以下の条件で作成します。先ほど控えた _Application Id_ と _password_ を指定して、下記のコマンドを実行します。

| 項目 | 値 |
| --- | --- |
| Bot Service の種類 | Web App |
| Bot Framework バージョン | `v4` |
| 言語 | Node.js |

```bash
# 各種変数を定義する（任意）
RESOURCE_GROUP=<リソースグループ名>
BOTSERVICE_NAME=<Bot Service の名前>
LOCATION=japaneast

# まずリソースグループを作成する
az group create --name ${RESOURCE_GROUP}

# Bot Service を作成する
az bot create --resource-group ${RESOURCE_GROUP} --name ${BOTSERVICE_NAME} --kind webapp --location ${LOCATION} --lang Node --version v4 --appid <Application Id> --password <Application Secret>
```

コマンドの実行が完了すると、以下のようなリソースが作成されます。（※ Azure ポータル上のリソース一覧のキャプチャです。）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3812/f4a1cb7a-9865-7385-0c00-93c6fdc7ec01.png)

なお、 「App Service プラン」は Web App の料金体系などを定めるリソースです。リソース名は Bot Service と同名です。このプランには無料（ `FREE` ）もあるのですが、ここでは `S1` で作成されるので、変えたい方はポータルから変えるか、またはCLIで以下のように変更できます。

```bash
# App Service プランのプランを変更する
az appservice plan update --resource-group ${RESOURCE_GROUP} --name ${BOTSERVICE_NAME} --sku FREE
```

ここまでで、 Bot Service を新規作成できました。簡単ですね！

トラブルシューティング
====

MSA id の自動プロビジョンができない
----
`az bot create` は、 `--appid` および `--password` を指定しない場合、下記のように、MSA id (Microsoft Account ID) が準備できませんでしたというエラーが発生することがあります。

```bash
Unable to provision MSA id automatically. Please pass them in as parameters and try again.
```

実は、Azure ポータルで Bot Service を新規作成するときは、 App ID を自動で新規作成してくれて便利なので、ここでもそれを期待したのですが、これはそういうものではないようです。残念。

ということで、現段階ではおとなしく _Application Registration Portal_ でアプリケーションを手動で登録するか、そもそも Bot Service の作成は Azure ポータル上で行う（ App ID を自動生成できる）方法がよさそうです。

なお、App ID の自動生成について調べたところ、 REST API もあるようですが、まだ _beta_ 版であることと、アクセストークンを取得して云々と手間がかかりそうなので諦めました。

- [Create application - Documentation - Microsoft Graph](https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/application_post_applications)
- [Get auth tokens - Documentation - Microsoft Graph](https://developer.microsoft.com/en-us/graph/docs/concepts/auth_overview)

Epilogue - おわりに
====

`az bot create` で意気揚々と App Id も自動作成して、あらカンタン！という流れを想像していたのですが、それができなくて残念です。

ですが、実は、 `az bot` コマンドの真の魅力は `create` ではなく、 `download` と `publish` なのです！ふふふ！

次回改めてまとめようと思います(`･ω･´)