Microsoft FormsとPower Automateを使って、アンケート結果からランダムに一つ取得してTeamsに投稿するアプリを作ってみた（前編）

## 目的
グループメンバーがフォームから投稿したテーマの中からランダムで一つ取得して、MTG前にチャネルに投稿してくれるアプリを作りたい

## 背景
会社では毎週決まった時間に所属グループ全員が集まるMTGがあり、そこで3,4人に分かれたブレイクアウトルームを作り、
コミュニケーションを取る時間を設けています。
毎週グループリーダーがその場でテーマを決めるのは大変なので、メンバーから募集を募ることにしました。
そこで、メンバーにはフォームから自分が考えたテーマを投稿してもらい、集まったテーマ一覧の中からランダムに一つピックアップして、MTG時間に投稿してくれるようしたいと思います。


## 使う技術・ツール
【１】Microsoft Forms
　→ メンバーがテーマを投稿するためのフォームを作るのに使います

【２】Power Automate
　→ 投稿されたテーマをSharePointリストに追加する処理と、Teamsのチャネルに自動投稿する処理に使います。

【３】Microsoft Teams
　→ ここのチャネルに選ばれたテーマを投稿するようにします

【４】Share Point
　→ Formsから取得したテーマをリストに保存するのに使います

## 実装
#### １、まずは投稿できるフォームを作成

https://forms.office.com/?redirecturl=https%3a%2f%2fforms.office.com%2fPages%2fDesignPage.aspx%3forigin%3dMarketing

↑Microsoft Formsにアクセスして、フォームの作成を始めます。

タイトルと説明を入れて、入力フォームを一つ追加します。
テーマの入力に関しては「長い回答」「必須」どちらもオンにします。
![スクリーンショット 2023-03-11 11.41.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/627aeed2-e704-8bd6-4472-6d914b68912f.png)

次に投稿したテーマは誰がしたか分かると躊躇してしまう方もいるかもしれませんので、投稿は匿名にしたいと思います。
![スクリーンショット 2023-03-11 11.43.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/9e826300-7b09-8dad-5b6e-0de3bcf985d1.png)
これでFormsの方の設定は完了です！
***
#### ２、投稿されたテーマをShare Pointのリストに格納するようにする
https://powerautomate.microsoft.com/ja-jp/

ここでは一連の処理をPower Automateを使って実現させます。
大まかにやる内容は、

>１、Formsに誰かが投稿した時を検知する
２、その投稿内容を取得
３、取得した投稿内容をSharePointリストに保存

になります。それではやっていきましょう

上のリンクからPowerAutomateに遷移して、サイドバーにある「作成」を選択
その中から、「**自動化したクラウドフロー**」というのを選択します
![スクリーンショット 2023-03-11 11.49.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/ca32b13c-57d5-3861-b2d2-c3c9e4d89c5e.png)

選択するとモーダルが出てくるので、フローのトリガーに「forms」と入力してください。
すると検索結果に「**新しい応答が送信されるとき**」というのが出てくるので、それを選択。
また、今回のフロー名も適当に入れてください。
最後に作成ボタンをクリックします。
![スクリーンショット 2023-03-11 11.50.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/9ddaa138-af3d-dfa9-26b9-b73ef0f15021.png)

作成が終わると以下のような画面になります。
これから実際にフローを作っていきます。
![スクリーンショット 2023-03-11 11.54.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/350f0fa5-35ab-e016-9cf0-9f631d3dc3bb.png)

まず取得するFormsのIDを設定します
以下のスクショの用に候補の中に先ほど作成したフォーム名が出てくると思うので選択
![スクリーンショット 2023-03-11 13.35.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/94dc9594-5907-5042-ed7f-72bea4909691.png)

※もし、どこかのチームの中にFormを作成した場合はここに出てこないので、カスタム値から自分で入力する必要があります。
カスタム値は以下のスクショの用に対象のFormsのURLのクエリパラーメータから取得することができます
![スクリーンショット 2023-03-11 13.45.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/ce30825c-aaf1-f24e-913b-8258deb9e859.png)
これで設定したFormに誰か投稿した時のイベントを検知することができるようになりました。

次に、その受け取った投稿を取得するフローを追加します。
新しいステップから検索で「forms」と入力すると、検索結果一覧に「**応答の詳細を取得する**」というアクションが出てくるので選択
![スクリーンショット 2023-03-11 13.48.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/6513a2d6-2cf4-1b75-fd8f-887041e440b2.png)

フォームIDは先ほどと同じものにして、応答IDには動的なコンテンツに表示される「**応答ID**」を入れます。
![スクリーンショット 2023-03-11 13.51.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/14c59976-63c0-4b84-e383-a2495333395e.png)
これで投稿されたテーマを取得することができました。

次はその値をSharePointリストに追加していきます。
先ほどと同じように新しいステップをクリックして、今度は「share point」と入力すると、「**項目の作成**」というのが出てくるので、それを選択します。
![スクリーンショット 2023-03-11 13.52.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/975fe201-0c4f-bc69-d10d-a8e83f6ac17b.png)

SharePointは会社の情報が含まれるため、詳しくは割愛しますが、SharePoint内にサイトとその中にリストを作っておけば一覧から選択できると思います。
![スクリーンショット 2023-03-11 13.55.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/c2ca3fd8-1e2a-b7b0-945a-843bd0a7a252.png)
　以上で、フォームに投稿~投稿されたらPowerAutomateの方で検知して値を取得~その値をSharePointに保存までいきました！

実際にテストして動かしてみます。
右上のテストボタンを押して、出てくるサイドバーから「フローの実行」をクリック。
そのあと対象のFormsから何か投稿してみるとフローが実行されます。
![スクリーンショット 2023-03-11 16.06.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/81f26247-2c6c-dc9e-f189-bc1b96aa86b6.png)
問題なくフローが実行されたそうです！
前編はここまでで、後半でSharePointリストからランダムに一つテーマを取得して、Teamsに投稿する処理をやっていきます。

後編はこちら↓
https://qiita.com/flutter_daisuki/items/5dfa11d0bb83d57f021a