LINE Bot を Bot Framework Composer でローコード開発する : その 1 環境の準備

※2020/5/23 Bot Framework Composer が GA したため一部追記。
※ Azure へのリリースで問題があるということで参考記事をリンク。

LINE Bot を開発する方法は複数ありますが、現時点で私が勝手に最強だと思う Microsoft Bot Framework Composer を使って、ローコードで開発する方法を紹介します。

今回は環境の準備とオウム返しボットがつながるまでを説明します。

# Bot Framework Composer とは

元々 Microsoft は Bot Framework というボット開発フレームワークを提供しています。C#, Node.js, Python, Java 向けの SDK があり高度なボットを開発する事ができます。また開発したボットアプリケーションは Azure に展開し、Facebook Messenger や　LINE など複数のチャンネルに同時展開できます。

これまでは開発者が Visual Studio などの IDE を使いコーディングすることでのみ開発ができましたが、Bot Framework Composer は GUI でほぼすべての開発が行えるツールであり、開発言語の知識がなくてもボット開発ができるようになりました。また開発者もこのツールを使うことで、迅速に品質の高いボットが開発できるため、多くの人が活用できるソリューションとなっています。

**画面イメージ**
![](https://docs.microsoft.com/en-us/composer/media/introduction/composer-overview.png)

# メリットとデメリット

**メリット**

- 会話フローの開発が GUI で行えるため開発言語の知識が不要
- ブラウザでの開発でき、誰が作っても品質が一定になる
- 自然言語処理機能がある
    - 自然言語処理はサービスとして独立しているため、柔軟性と透明性が高い
- 柔軟文章作成機能がある
- コードとして結果が生成される
    - バージョン管理
    - CI/CD
- 外部サービスとの連携機能が標準である
    - OAuth サポート (Bot Service 経由)
    - QnAMaker サポート
    - HTTP 連携サポート
- Azure Bot Service と連携する
    - 複数チャネルのサポート
    - 使用状況解析など複数のビルトイン機能
- 関連するサービスの独立性 (デメリットもある)
    - サービスの一部として利用する CosmosDB や LUIS は個別にアクセスも可能なためブラックボックスではない
    
**デメリット**

- 現状ローカルで開発環境が必要
- 開発者が普段つかう git 等のツールをある程度触る必要がある
- ボット開発に必要な、ある程度の学習コスト
- Azure サービスが必須
    - Bot Connector
    - App Service
    - ストレージ
    - Cosmos DB
    - Application Insights
    - LUIS (オプション)
- 関連するサービスの独立性 (メリットもある)
    - 独立しているため、個別に管理が必要
- 現時点でプレビューでありドキュメントの大半が英語
- 既定の展開先が北米リージョンになる
    - Azure の詳細を知っていると別のリージョンに移すことは可能
   
基本的には Microsoft Azure を利用できる環境で使うことが前提となるため、そこをクリアできる場合で、プレビューでもいいよという場合に適したソリューションです。

# 環境のセットアップ

## Azure サブスクリプション

まだ Microsoft Azure サブスクリプションをお持ちでない場合は、[Azure の無料アカウント](https://azure.microsoft.com/ja-jp/free/) を作成してください。

## ローカル環境

ローカルの開発環境は 2 つあります。

- インストーラーで構築
- GitHub よりソースをダウンロードして実行

いずれの場合も以下のツール類が必要です。

**開発ツール**

- [git](https://git-scm.com/downloads): 最新版をインストール
- [Node.js](https://nodejs.org/dist/v12.13.0/): 最新の安定版
- [Yarn](https://yarnpkg.com/en/docs/install): 最新の安定版
- [Bot Framework Emulator](https://github.com/microsoft/BotFramework-Emulator/releases/latest): 最新の安定版
- [Postman](https://www.postman.com/): Bot Composer では使わないが、開発中にあると便利ツール。curl など別のツールでも OK
- [.NET Core SDK 3.1](https://dotnet.microsoft.com/download/dotnet-core/current): テストで必要

**Azure 展開用ツール**

- [Azure CLI](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest): Azure 用コマンドラインツール
- [PowerShell 7](https://docs.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell?view=powershell-7): Azure への展開で利用
- LuBuild: 自然言語処理用ファイルのコンパイルツール。以下手順でインストール。

```shell
npm install -g https://botbuilder.myget.org/F/botbuilder-declarative/npm/lubuild/-/1.0.3-preview.tgz
```
- botframework-cli: Bot Framework 用のコマンドラインツール。以下手順でインストール。

```shell
npm i -g @microsoft/botframework-cli
```

### インストーラーで構築

[GitHub 上の BotFramework Composer リリース](https://github.com/microsoft/BotFramework-Composer/releases) に各 OS 用のインストーラーがあります。ダウンロードして実行してください。

### GitHub よりソースをダウンロードして実行

最新のものやコードを直接使いたい場合は、ソースをダウンロードして使えます。
ローカルでの開発に必要なパッケージやツールをインストールします。

1\. Bot Framework Composer のソースを GitHub よりクローン。

```shell
git clone https://github.com/microsoft/BotFramework-Composer.git
cd BotFramework-Composer
```

2\. 現在のブランチが stable ブランチになっているか確認。

```shell
>git branch
* stable 
```
3\. 利用したいバージョンを tag を使って指定。以下は v1.0.0 を使いたい場合。

```shell
git checkout v1.0.0
```

4\. 以下コマンドで依存関係のインストールとソリューションのビルド。

```shell
cd Composer
yarn install
yarn build
yarn startall
```
※15 分くらいかかるので、以下ビデオでも見ててください。
[![](http://img.youtube.com/vi/Aiv95e2-Yn0/0.jpg)](http://www.youtube.com/watch?v=Aiv95e2-Yn0)
[![](http://img.youtube.com/vi/r9WQPSaLnaU/0.jpg)](http://www.youtube.com/watch?v=r9WQPSaLnaU)

5\. ブラウザで http://localhost:3000 に接続。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/fcf1928f-a099-5fa8-aa93-037c5d2916ac.png)

上記で手順でエディターが表示されたらローカル環境の構築は完了です。

# オウム返しボットの作成

※ GA により一部画面が変わり、新しいダイアログやトリガーは「Add」メニューが別途用意されました。一部古い画面のままで説明を勧めますが、適宜読み替えてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/66872679-a67d-d5d2-d328-fdd10bfa0298.png)

まずは定番のオウム返しを作ります。

1\.「New」をクリック。「Create from template」より「Echo Bot」を選択して「Next」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/6b6c3ad8-343a-4747-9783-4b272ff1d7cf.png)

2\. 任意の名前と説明を付けて「Next」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/8a984886-253b-786d-8971-b6cfdc23643e.png)

3\.「Unknown intent」を選択。これはユーザーの意図が分からない場合にトリガーされる。応答メッセージとして「You said '${turn.activity.text}'」が設定されていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/3c672329-dcfb-cdd5-5595-337b71861d90.png)

4\. 画面右上の「Start Bot」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/2dc78c94-ca4b-41f2-e069-8d3cf89b82fa.png)

5\. しばらくすると横に表示される「Test in Emulator」をクリック。Emulator のインストールやアップデートのポップアップが出た場合は「OK」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/60eaade7-9242-4124-82b0-10747835df97.png)

6\. エミュレーターが起動するので、メッセージを送信して、オウム返しされる事を確認。
※たまに初回起動失敗するので、動かない場合は「Restart Conversation - New User ID」ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/04d675d0-ec02-ecbf-4f65-23906505f88b.png)

7\. 応答を日本語に変更。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/511f9fd1-86a6-b7e1-e542-8bcab97036b3.png)

8\. 「Restart Bot」をクリック後、再度エミュレーターからテスト。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/00228a14-a591-9879-f607-0ced5e837918.png)

# Azure リソースの準備

Bot Framework Composer は Azure の以下のリソースを作成します。

- ボットチャンネル登録: ボットと LINE や Messenger などのクライアントをつなぐサービス
- App Service プラン: ボットをホストする App Service 用のプランを設定
- App Service: ボットをホストするサービス
- Application Insights: ボットの利用状況やリソースをモニタリング
- Azure Cosmos DB: ボットのメモリオブジェクト保存用
- ストレージアカウント: ボットとユーザーのやり取り保存用
- Cognitive Services: 自然言語処理を使う場合に LUIS を利用

※ GA により手順が大幅に変わったため、過去の情報は削除して新しいものに入れ替えています。

まずは、以下の手順でリソースを作成してください。

1\. Settings | Bot Settings より luis の言語を ja-jp に変更。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/7223d65c-f012-a633-9ca3-849b9ecc9a6b.png)

2\. ボットを作成したフォルダー配下の Script フォルダに移動。npm install を実行。

```shell
cd C:\users\kenakamu\documents\composer\myfirstlinebot\scripts
npm install
```

3\. 各種パラメーターを自身のものに変更して provisionComposer.js を実行。

- パスワードは 16文字以上
- リソースグループ名は name と environment を合わせたものになる

```shell
node provisionComposer.js --subscriptionId=<Azure サブスクリプション ID> --name=<リソースグループ名> --appPassword=<任意のアプリのパスワード> --environment=<任意の環境名。既定は DEV>
```

※うまくいかない場合、[Bot Framework ComposerでAzure リソースの準備時にエラーが発生する件への対処](https://qiita.com/tfukumori/items/6090dbaf3f79b7682516) 参照

4\. Azure へのログインを促されるため、ログインを実行。ログイン完了後、プロビジョンが終わるまで待機。（10分くらいかかります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/e160aef7-f399-c92e-e5b3-8a0e8d1244a7.png)

5\. スクリプト完了後、表示された結果は利用するためそのままにしておき、Azure ポータルにて作成されたリソースを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/b855371b-b515-08d5-4fa3-0efa6881b1cc.png)

6\. App Service プランを開き、無償の開発プランに変更しておく。他のプランも無償または一番安いプランになっているか確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/f3103f7e-298b-669b-535d-134162b2e25f.png)

# ボットの展開

次に、作成したリソースにボットのコードを展開します。

1\. Composer の Publish メニューより、「Add new profile」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/f23c6dd5-aa56-9280-caab-1a270523434b.png)

2\. プロファイル名と発行先として WebApp を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/8704a8cf-0ed3-6a67-6244-ac49938e5936.png)

3\. リソース作成スクリプトの結果を「Publish Configuration」に反映し、「Save」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/eea00e79-1229-390c-553b-28913b12b43e.png)

4\. 作成したプロファイルを選択して「Publish to selected profile」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/3feac194-1e25-2b2e-0c3a-abb18377ed1a.png)

5\. コメントを入れて「Okay」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/64245e79-b8cd-0552-f9e2-645cb092d856.png)

6\. 進捗が画面に表示される。完了するまで待機。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/12645663-66da-1995-ffd6-6f16df144650.png)

7\. Azure ポータルよりボットチャンネル登録を開き、「Web チャットでテスト」をクリック。ボットに話かけて展開ができているか確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/e5954bc8-5cff-b7dc-2fb4-11f7d84482c7.png)

これで Azure への展開は完了です。今後の展開も同じ手順で行えます。

# LINE との接続

最後に LINE と接続します。

1\. [LINE 開発者ポータル](https://developers.line.biz/ja/) よりプロバイダーを選択。プロバイダーが無い場合は画面に沿って作成。

2\.「新しいチャネル作成」より「Messaing API」を追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/50b5c5ee-63f3-7872-4c9f-945c03602390.png)

3\. ウィザードに従ってチャネルを登録。登録後、「チャネル基本設定」タブから「チャネルシークレット」をコピー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/f61f9601-38e9-16db-3a21-98fab36654b8.png)

4\.「Messaging API 設定」より「チャネルアクセストークン」を発行してコピー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/ee0dc1b1-4846-04b0-a18b-42cafa91e59b.png)

5\. Azure ポータルに戻り、ボットチャンネル登録より「チャンネル」を選択。LINE をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/10f01acc-3fa2-2c8a-22ac-b680fc74fa11.png)

6\. 取得したキーを設定し、コールバックアドレスをコピーして、「保存」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/acdc6e96-5f8b-c370-038a-342847e1a62b.png)

7\. LINE 開発者ポータルに戻り、取得したコールバックアドレスを設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/c9d3a938-715d-1f32-49e9-a3a5459a1b73.png)

8\. その後表示される「Webhook の利用」を有効にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/030cdf07-680e-c194-e43d-86b684922935.png)

9\. 応答メッセージ右にある「編集」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/b22fcdaf-97ea-d2b1-d8ba-09b828a68401.png)

10\. Greeting message と Auto-response を無効に設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/08ad49ca-9b89-2e12-db5e-6cbab419be1e.png)

11\. LINE クライアントよりボットを QR で読み込んで追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/f8e87f47-26a3-a24c-bd9f-189231746bae.png)

あとは LINE クライアントよりメッセージを送信して、オウム返しができるか確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/195fc760-c840-6d85-d15e-e8470f3857cd.png)

# まとめ

今回は Bot Framework Composer のインストールと LINE ボットに接続するまでを説明しました。次回はデバッグ環境の設定とダイアログの開発について紹介します。

[次の記事へ](https://qiita.com/kenakamu/items/bd00bd5646f1d7e163c8)

# 参考

[Bot Framework ComposerでAzure リソースの準備時にエラーが発生する件への対処](https://qiita.com/tfukumori/items/6090dbaf3f79b7682516)