Azure Logic Apps を触ってみる（簡単なデモ付き）

株式会社船井総研デジタルの高田です。

今回はAzureを勉強する中で、「Azure Logic Apps」について知る機会があったので、簡単な説明とデモを行ってみたいと思います。

# Azure Logic Apps とは

Azure Logic AppsはAZ-900の試験などではサーバレスの一種として紹介されています。
それはもちろん間違いないのですが、個人的には「トリガーとアクションを直感的に組み合わせ、やりたいことを実現するローコードサービス」というほうがしっくりくるかと思います。

# 具体的には？

といっても、イメージができないと思うので、一例として以下のことが直感的に実装できると考えてもらえたらと思います。
- 作成・更新・削除の通信が呼ばれたら（トリガー）、データベースへ行を追加、更新、削除（アクション）する
- 特定の時間になったら（トリガー）、メールを通知する（アクション）
- twitterの投稿の中に特定の文字列が含まれた場合（トリガー）、メールに送信し（アクション）、Slackへも通知する（アクション）。
- 配送サービスで注文がきたら（トリガー）、登録・決算処理を行うAzure Functionsを実行し（アクション）、メールにて配送担当者に通知する（アクション）　など。

ここで、お気づきになられたと思うのですが、Azure側で外部サービスやAzureリソースに接続し、トリガーやアクションを簡単に設定できるような機能を提供してくれています。
これらはコネクタと呼ばれ、特に外部サービスを呼ぶ実装をなどをしなくても、簡単にやりたいことが実現できます。

以下はコネクタの一覧です。
https://learn.microsoft.com/ja-jp/connectors/connector-reference/connector-reference-logicapps-connectors

# デモ
## 作成するもの
それでは実際にイメージがわきやすいように簡単なデモを行います（今回はイメージをつかむ目的のため、Azureポータルにて作成します）。
今回は単純に「Outlookでメールを受け取ったら」「Gmailに通知する」といった内容で作成します。

## 実演
### リソースの作成
1. Azureポータルにアクセスして、「すべてのサービス」→「統合」→「ロジック アプリ」を選択します。
2. 追加アイコンを押して、基本タブの中を入力します。以下の入力項目を変更し、残りはデフォルトのままに設定します。
    - サブスクリプション：任意の値
    - リソースグループ：任意のグループ（ただし、デモが終わったあと、すぐに削除できるようにすぐ下の新規作成ボタンから、新しいリソースグループを作成したほうが良いと思います。）
    - ロジックアプリ名：任意のもの（今回は単純に「mail-demo」としています。）
    - 地域：Japan East（一番近いリージョンを選択してください）
    - プランの種類：消費（消費とすることで、実行分のみの課金とすることができます。）
    - 実際の画面は以下の通り
    ![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/56d3d76c-8d1d-e33f-3b4a-3ea4a27c2de6.png)
3. 「確認および作成」→確認画面に遷移するので、「作成」を押す
4. しばらくするとデプロイ完了画面となり、真ん中付近にでてくる「リソースに移動」ボタンを押し、「Logic Apps デザイナー」画面に遷移。(Logic Apps デザイナーにて、ロジックを組んでいきます。)

### トリガーの作成
Logic Apps デザイナー画面をみていただくと、すでにAzure側がいくつかのテンプレートを用意してくれています。ただし、今回はイメージをつかみたいため、すべて自分で実装します。
トリガーについては「Outlookで件名にtestという文字列が入っていた場合」に発動するように設定します。
1. スクロールしていき、テンプレートのなかから、「空のロジックアプリ」を選択
2. タブを「すべて」に切り替え。検索欄に「outlook」を入力し、検索。「新しいメールが届いたときに(Office 365 Outlook)」を選択。
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/306b6007-4e60-9b2a-367f-02393b51ea25.png)
注意）もしかすると、のちほどのOffice 365 Outlookとの連携の際、接続先が見つからない場合があります。個人用のOutlookを使用している場合になる可能性があるので、その場合は「Office 365 Outlook」ではなく、「Outlook」を選ぶようにしてください。
3. Outlookへ接続するために、サインインを求められるので、指示に従いサインインをする。
4. トリガーの条件を設定します。今回はフォルダだけ、「受信トレイ」に変更します。また、「Add new parameter」を使用することで、フィルターすることができます。今回は「件名フィルター」を選択し、testという文字列を入力します（つまり、件名にtestという文字列が含まれた場合のみ、トリガーの条件となります。）
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/e910f813-3320-858d-d609-8db82b6d3731.png)
たったこれだけで、トリガーが作成完了です。

※トリガーの発動については「ポーリングトリガー（定期監視）」と「プッシュトリガー（条件発動時、今回のパターン）」（+α）があります。今回は説明を割愛しますが、コネクタによってはポーリングトリガーしか設定できない場合があるので、ご注意ください。

### 条件分岐（コントロール）の設定
アクションについてはGmailに通知を行います。
ただ、せっかくなので条件分岐（コントロール）も設定し、件名に「Azure」という文字が含まれるか？によって、通知内容を変えてみたいと思います。

1. 「新しいステップ」をクリック
2. タブを「すべて」に切り替え。検索欄に「制御」を入力し、検索。選択する。
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/ff122054-83a3-55f0-47a0-7114154dfc69.png)
3. アクションから「条件を選択」。以下のように条件を設定。
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/e38b672e-23b4-e42a-14fc-e72f67988729.png)

### アクションの設定
最後にアクションを設定していきます。

1. 緑のTrueバーをクリックすると、中身が開くため、Gmailからメールの送信をするアクションを選択!
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/890f3173-314b-566b-9227-9b5671c19ead.png)
2. 接続名に任意の値を入れる（今回はMy Gmail）。Authentication Typeについてはデフォルトのままとし、サイインを行う。
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/8f5a5d24-0931-41ad-d84c-bc96aee9b802.png)
3. 具体的なアクションを入力。宛先に自分のGmailアドレスを設定し、他は以下のように入力（なお、件名とボディ欄についてはデフォルトではないため、下のAdd new parameterを押すことで、追加することができます）
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/3df3eb4a-d366-75af-5923-87579091dc89.png)

4. falseについても同様です。最終的には以下のようなイメージ。アクションについても直感的・簡単に作成できました。
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/6012dac6-a86f-5985-2ea3-a0b94726552f.png)

5. 最後にLogic Apps デザイナーのタブにある保存ボタンを押してロジックを保存します。
![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/0aded65c-bbe6-3cdd-224b-5a6fbe305574.png)

以上です。10分とかからず、実装することができました。



### 動作確認
それでは実際に動作確認をしてみます。

1. トリガーはoutlookでメールを受信した時のため、自分宛（Outlook）にメールを送ってみます。最初にトリガー時点のフィルター確認をしたいため、testという文字を件名に含まず、「最初のメッセージ」としてみます。この場合何も起きず、成功となります。
2. 今度は「testです」という件名で自分宛（Outlook）にメールを送ってみます。すると以下のように、「Azureが含まれていない場合」という件名でGmail側で受信ができています。そのため、「test」という文字列を含んでいるのでトリガーは起動しているのですが、「Azure」という文字列は含んでいないため、コンロトール（条件分岐）でfalseの扱いになったことが確認できます。

![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/96c1146f-0617-6b62-b852-4a61b5c056c5.png)
3. 最後に「testです（Azure）」という件名で自分宛（Outlook）にメールを送ってみます。すると以下のように「Azureが含まれている場合」という件名でGmail側で受信ができています。きちんとトリガー、コントロールの条件も満たしていることが確認できます。

![スクリーンショット 2022-10-11 154522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883992/8304c658-30fe-9b83-28a3-9a74b15b4f7e.png)


## 個人的に思うこと

以上が、簡単なデモになります。最後に個人的に感じたことをまとめとして書きたいと思います。

- 組み合わせが直感・簡単にできる。コネクタの種類も豊富なため、大規模でないアプリケーションなどであったら、作成もできそう。
- ただ、ローコードだから開発者以外の人が扱えるかといわれるとおそらく厳しいと思われる。その理由は以下の通り。
    - 基本的にサービスを作成・運用する上で、ある程度複雑なロジックは出てくると思う。そのため、多くのケースでAzure Functionsなどとの組み合わせが発生する可能性が高い（とは言え、外部サービスとの連携実装する手間が省けるだけでも、ありがたい）。
    - チーム開発になった場合は結局Azureポータルではなく、コードでAzure Logic Appsを定義する必要が出てくる（同じ環境のリソースを作成したいから。）。基本的にはAzureポータルで直感的に作成→それをコードに落としこんで共有という流れになりそう。
 
まだ簡単に触れただけなので、詳しく触れるとわかってくることもあると思いますが、現時点の感想です。
今回はAzureポータルからの作成だけだったので、今後どこかのタイミングでコードベースへの落とし込みを行ってみたいとおもいます。