ノンコーディングで Microsoft Teams のチームをすべて取得する

今回は Power BI ネタではなく Microsoft Flow で Microsoft Graph API を叩く方法です

#はじめに
Twitter を見ていたら、Office 365 MVP の目代さんがこんな投稿をしていたのを見つけて、試してみました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/1e266abb-10ad-3c0e-89a0-69dcffb460b7.png)
https://twitter.com/mokudai/status/1067599182188269568

#Microsoft Teams のチーム = Office 365 グループ
**Microsoft Teams** はにわかに社内コミュニケーションに使われてきていて、かなりの勢いで広がっています。Office 365 を導入されている企業さんでは最近よく聞きます。社内のやりとりでメールが減少したというのは、非常に良いことだと思います。

さて、そんな勢いがある **Microsoft Teams** ですが、Office 365 の管理者の方を困らせることがあります。それは Teams のチームは Office 365 グループであるということです。そしてそのチームは Public と Private の設定があり、Private にされると、全体管理者の権限を持っていても、チームが見えないということです。

他にも Public なチーム一覧が欲しいなーと思ったりします。（Teams のアプリで見れる画面はあるのですが...）

というわけで、とにもかくにも Teams のチーム一覧を Public / Private 関わらず、取得してみましょう。

#方法
今回は Microsoft Graph API を使用します。API と聞くと「あぁ、開発が必要なのか」と思われる方が多いかもしれませんが、ご安心を。今回はソースコードは書きません。なので、コーディングスキルを持っていない方でもできます。

**Microsoft Flow** を使用します。理由は、おそらくこの記事を読んでいる方は Office 365 が使える環境をお持ちだという想定だからです。よって、**Microsoft Flow** も使えるだろうと勝手に想定しています。

#まずは Micorosoft Graph
Office 365 は Microsoft Graph と呼ばれる API が備えられており、これを使うことで、Office 365 で管理されているデータにアクセスすることが可能です。Microsoft Teams のチームが Office 365 グループだと知っていれば、つまり Office 365 グループを取得すれば、だいたい一致することになります。

厳密に言うと、
**Office 365 グループがあって、Teams のチームがない** という場合はありますが、
**Teams のチームがあって、Office 365 グループがない** ということはありえません。

そして Microsoft Graph は Graph Explorer という Web アプリケーションで GUI によって試すことができます。つまり画面でポチポチしながら、実際に呼び出すための URI を作成することができるのです。またレスポンスの JSON も確認することができます。

**[Graph Explorer]**
https://developer.microsoft.com/ja-jp/graph/graph-explorer 

また使用する API は以下の Get a list of gruops です。

**[Get a list of groups]**
https://docs.microsoft.com/ja-jp/graph/teams-list-all-teams#get-a-list-of-groups

#次は Azure Portal で Azure Active Directory の設定
先に今回のゴールとなる Flow をお見せします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/239c56e9-a771-0595-5bc0-5d9a1a18add4.png)

非常に単純でトリガーはボタントリガーにして、HTTP アクションで Graph API を呼び出し、レスポンスの JSON を解析して、そのデータを Apply to each でグルグル回し、一件ごとに Flow のスマホアプリに通知をするというものです。

ポイントは上から二つ目の **HTTP** アクション。本来であれば Office 365 への認証と認可を通して、トークンを取得して…と API を呼ぶのにお作法があるのですが、そこは **Azure AD** のチカラを利用します。詳しくはこれまた **Office 365 MVP の太田さん**( @hrfmjp ) の以下の記事を参照してください。私もこの記事を見てやりました。

**[Microsoft Flow の HTTP アクションにある Active Directory OAuth 認証で Microsoft Graph API を利用する]**
https://idea.tostring.jp/?p=3726

HTTP アクションに設定が終わるとこんな感じになります
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/d6003745-ef0c-acc5-f3d7-18d820d6651b.png)
URI は以下のようにしました。
https://graph.microsoft.com/v1.0/groups?$select=id,displayName,description,visibility,createdDateTime,renewedDateTime

select= より後ろが欲しい値になります。私の場合は id, displayName, description, visibility, createdDateTime, renewedDateTime の6項目を指定しました。ちなみにすべての項目が欲しい場合は $select= 句以降がない状態で Graph Explorer で試してみてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/7a926b9c-912b-4931-1ef1-e59d61526c4f.png)
画像の上部の URL で試して [クエリ実行] を押せば試すことが可能です。

#Flow の [JSON の解析] アクション
さて、HTTP アクションで無事に Graph API を呼び出すと JSON が返ってきます。
「ノンコーディングって言ったのに、やっぱり何かコーディングしないといけないの？」と思っちゃいますよね？大丈夫です。JSON データが返却されても、びびるこたぁねーんです。そう、[JSON の解析] アクションを追加してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f915e7dc-895b-eb24-8394-a3f2ce95218e.png)
コンテンツには HTTP アクションの [本文] を指定。問題は [スキーマ] です。そもそも開発者じゃないと「スキーマ？なにそれ、おいしいの？」ってなりますよねー。ご安心を。画像下部にある [サンプルのペイロードを使用してスキーマを生成する] をクリックしてください。そして新たに開いた画面に Graph API で試したレスポンスの JSON をドヤっとコピペしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/b1f44585-076e-5537-c270-449bb59c21c4.png)
そうして [完了] を押せば、[スキーマ] が完成です。要はサンプルデータを見て、定義を作ってくれた、ということです。いやー便利ですね。

#最後に
さーて、最後です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/b2181ee9-36a8-cd66-15ac-4057da5c0d2a.png)

[+新しいステップ] をクリックして、notification と入力して以下の画像の赤い [Send me a mobile notification] をクリックしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/a45b4fef-9db8-c315-93a5-e10cdd3537e9.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/90d83afd-c3d9-7ba2-9dc0-090883aa934b.png)

[Text] に `id:` と入力してマウスカーソルを置いた状態で右側の窓から [id] をクリックしてください。そうするとループ処理である [Apply to each] が自動的に追加され、以下の画像のようになります。あとは Text に好きなように知りたい値を指定してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/9a3bbe1b-24ab-c978-af1a-270de78752fc.png)

ここまでくれば、完成です。名前を付けて [保存] をしてください。
保存後は画面右上の [テスト] を押すとテスト実行ができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/a24fe7a2-de9b-597c-176b-2209c5ba58e9.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/4d00305b-e71d-2957-1161-32923d8441e2.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f4b839c4-2e1c-5786-7a64-81097f2e8336.png)
[フローの実行] を押せば実行されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/80683ad4-2bbd-2adc-95d0-f7daaf001a5a.png)
[フロー実行アクティビティの表示] をクリックすると
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/9f228ae0-28b6-9018-392b-e28a20741158.png)
日時がリンクになっているのでクリックすると以下のように実行結果を見ることができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/581927b8-5ee8-766b-2a89-b88b8757ae1a.png)

#以上です！
というわけでいかがでしょうか？ノンコーディングで Graph API を利用して Teams のチーム、ゲットできちゃいましたね。
[visibility] の値には Public / Private があって、Public は誰でもが見れるチーム、Private はメンバーのみ見れるチームです。ここら辺の値をうまく使って活用してみてはいかがでしょうか？

最後まで読んでいただき、ありがとうございましたー(*'▽')