Power Automate を使い、指定した Power Apps アプリを除いて自動削除する方法

#はじめに
管理者が認めていないアプリ（勝手アプリ）はすべて削除するフローを考えてみました。
※ ほんとは自由に使わせたいんだけど、まだ統制の準備が間に合わないの・・・

今回の手順はアプリ削除のみですが、同じ仕組みを使えば Power Automate のフローも削除することができると思います。

#参考にしたサイト
[既定の環境からPowerAppsとMicrosoft Flowを自動で削除・無効化する方法(吉田の備忘録)](https://memo.tyoshida.me/power-platform/powerapps/remove-powerapps-flow-from-default-environment/)
2019年9月末までの旧ライセンス体系だと、当手順に記載しているコネクタは Power Automate for Office 365 で利用できませんでしたが、2019年8月の発表により、管理機能はどのプランでも利用可能となりました。

#環境
- Office 365 開発者プログラム
- Power Apps for Office 365
- Power Automate for Office 365

#注意点
- 当フローを実行すると、**アプリが消えます**。誤ってテナントにある大事なアプリを削除しないようにしてください。
- 当フローを参考にしたフローでアプリを削除した場合、**アプリを復旧することはできません**。不都合や不利益に関しては責任を負いかねます。予めご了承ください。
- パッケージのエクスポート（プレビュー）でバックアップを取得し、細心の注意を払い、自己責任でお試しください。
- 今回は、単純な条件判断でアプリを削除するか・しないかの判断となるため、複数の「削除不可アプリのリスト」から判断する場合はもうちょっとフローを考えなきゃいけないので注意してください

#Power Automate フロー作成手順
※※当セクション下部に全体像を添付しています※※

1. （トリガー）今回はテストのため手動実行とします。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/8136824b-de9c-05e4-29a3-acaa1ab8a52c.png)
2. 規定の環境を取得します ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/b53dad9f-3148-c471-2283-d8d6b8994845.png)
3. 環境に存在しているアプリを取得します![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/8b739c87-b73f-2b93-982c-49d81b6b1a9f.png)取得の際は、「Environment Name」に 「Get Environment as Admin」で取得した「Name」を指定します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/facb7061-b558-2d09-e295-04268cc68fda.png)そのほかの値は規定のままでOKです。

4.  条件を指定します![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/0bfb027f-7097-5cfb-e6f3-5cbec6867930.png)条件には「Get Apps as Admin」で取得した「name」を指定します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/d453cf90-f300-26d3-92f8-5ad4ad9a1684.png)比較対象は、「アプリ ID」を指定します。このフローでは変数に「アプリ ID」を入力して比較させています。※ 変数ではなく文字列として 「アプリID」 を直接入力しても OK です。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/2b37e27e-d191-e646-94b3-24b606f3ad84.png)（補足）アプリの アプリ ID は、アプリ一覧の「…」のメニューから「詳細」を選択し、![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/90f2988f-7444-717a-fb3f-6ef1a2157ccb.png)アプリの詳細に表示される「アプリ ID」から確認・取得することができます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/a5dfc1eb-a3f6-525e-18e3-64ca9c5e110f.png)
5.  （条件の解説）① 既定環境で取得してきた 「アプリID」と ② 削除したくない 「アプリ ID」が一致する場合は ③ 削除したくない「アプリ ID」となるため、**何もしません**（間違ってもこちらにアクションを置かないように・・・）。
逆に、④ 削除したくない「アプリ ID」と一致しない場合は「いいえ」側となるので、こちら側に削除のアクションを入れていきます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/413aca6e-135f-5e72-cb32-97ff6d393c1a.png)
6.  上記の「いいえ」側に削除のコネクタ（Remove App as Admin）を入れます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/b8641e7d-09f3-f090-853d-eae1f4d45a31.png)
7.  「Environment Name」に「Get Environment as Admin」で取得した「Name」を指定します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/85c60044-a34e-5d9d-ce4d-0ad82dc2a689.png)
8.  「PowerApp Name」には「Get Apps as Admin」で取得した「name」を指定します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/ff5fbe3a-82b8-c4bb-5519-630c96730a91.png)
9.  一通り完成。全体イメージは以下の通り。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/6d8a0d71-262e-96e9-a01d-239c8863f693.png)
吹き出しで描いている通り、「作成」のアクションはアプリ削除フローとしては直接関係ありません。
「Remove App Admin」のアクションを実装する前に、「作成」アクションを使って、テスト時にちゃんと分岐できているかを確認するためのものです。

#テスト実施

1. 事前にアプリの一覧を確認。黒塗りのアプリが消したいアプリです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/ce2d1fcb-32a4-b4c5-eb8e-7d9bfffb6536.png)

2. テストを実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/b057d5f1-e91e-14e7-11e0-0e4386630bb2.png)
 
3. 恐る恐る結果を見てみると・・・想定通りの分岐になってる😆![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/d4006cf1-a3ba-fb48-5e99-d35a28ea70fb.png)
※削除しない分岐を確認している画面

4. 削除したいアプリが消えていることを確認！（一覧反映には時間を要するかも）![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438156/9fb8651b-0c2f-18df-31cd-ed087871af5f.png)

#まとめ
今回は超シンプルに、削除したいアプリかどうかを判断するだけの条件分岐としています。本来であれば、登録済みアプリの ID 一覧をカスタムリスト等で保持しておき、取得してきたアプリ単位で削除対象かどうかを判断させる必要があると思いますが、今回は割愛しております。
フローも同様の仕組みで削除ができると思いますので、近々試してみたいと思います。