「やーい、おまえんPower Automate、ごみやーしきー！」とマウントをとられないために

# 既定の環境
*Power Automate*を始めたばかりだったり、非IT職から挑戦している方にとって、`環境`は中々考えが及ばない領域ではないでしょうか。
私自身、経験値が増えていくことに伴い、「あ、環境って気にしないとダメなんだ」と気が付いてから悲しくなりました。

環境を分ける理由としては
 - 本稼働へ変更に伴う影響を与えない安全性の確保
     - 既定で作成して公開をするサイクルだと、誤って変更に伴う影響が出てしまう
 - 作業環境の独立
     - 自由に作業できることで試行錯誤しやすい
 - リリース管理
     - 開発・テスト・本稼働とわけることで継続的なデリバリーや手プロ意を効率化
 - ユーザーへの影響を最小限に
     - テスト環境での十分な開発を経てからデプロイすることで、「あ、やってしまった」という事故を防ぐ

といったことが挙げられます。
[Power Platform 環境の種類](https://learn.microsoft.com/ja-jp/power-platform/admin/environments-overview#power-platform-environment-types
)は複数あるので、資料に目を通しておくことを推奨します。

https://learn.microsoft.com/ja-jp/power-platform/admin/environments-overview#power-platform-environment-types

今まで、既定の環境で*Power Automate*や*Power Apps*を作ってきましたが、「そういうものではない」ということを知ってから悲しくなったことが記憶に新しいです。

ということで今回は大掃除をしていきたいと思います。今回は[Power Automate 管理コネクタ](https://learn.microsoft.com/ja-jp/connectors/flowmanagement/)に焦点を当てて、現状の改善を進めていきたいと思います。

# [Power Automate 管理コネクタ](https://learn.microsoft.com/ja-jp/connectors/flowmanagement/)

> Power Automate 管理コネクタを使用すると、Power Automate 管理サービスとのやり取りが可能になります。 例: フローの作成、編集、および更新。
>> [Power Automate Management (Microsoft Learn) ](https://learn.microsoft.com/ja-jp/connectors/flowmanagement/)

Power Automateの画面で見てみると「Power Automate 管理」という名前でヒットします。
このコネクタは`プレミアム`の対象ではないため、標準のライセンスでも利用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/29bf0ee9-25b5-b6ac-448d-f2eec1adb040.png)

*Power Automate*の稼働状況、フローの詳細、所有者の状況といったあらゆる情報が見えます。

## とりま現状をCSVに書き出してみる
ひとまず下記のシナリオで、「既定の環境」の`Power Automate フロー`を一覧化してみます。

1. フローを手動でトリガーする
1. 自分のフローの一覧表示 `既定の環境`を選択
1. [CSV テーブルの作成](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-create-csv-table-action)
1. *OneDrive for Business* - ファイルの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b6d9ab1e-49ac-18b7-aadf-c1302883d43c.png)

(1) 自分のフローの一覧表示
`環境`は自分の環境を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/3d759cf4-0332-3bb3-2cf2-6a0789d9a1b7.png)

(2) [CSV テーブルの作成](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-create-csv-table-action)
データ操作にて`Power Automate 管理`で取得した値を列挙します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/f9451575-6e2e-2238-c895-d7ffabc65225.png)

`From` - `outputs('自分のフローの一覧表示')?['body/value']`

`Columns`で下記の項目のみ抽出します。

|キー|設定値|名前|解説|
|---|---|---|---|
|name|`item()?['name']`|フロー名|JSONからの呼び出しで使う内部名|
|displayName|`item()?['properties/displayName']`|フローの表示名|日本語を含めた自由に設定できるフローの名前|
|id|`item()?['id']`|コネクタ ID||
|status|`item()?['properties/state']|フローの状態|オンやオフなどを調査|
|triggers|`item()?['properties']?['definitionSummary']?['triggers'][0]?['kind']`|フロー トリガーの種類|`Button`・`PowerAppV2`など|
|environment|`item()?['properties']?['environment']?['name']`|環境|この操作では一定の値を返す、フローID|

(3) 結果を*OneDrive for Business*に保存
`ファイルの作成`アクションで結果をCSVファイルとして削除します。
ファイル名はその場しのぎのものを設定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/2c882aa6-5400-0dd0-b9c0-942a948ac7f6.png)

`ファイル コンテンツ`の設定は、日本語の文字化け対策に下記のように設定します。

```plaintext:ファイル コンテンツ
concat(decodeUriComponent('%EF%BB%BF'),body('CSV_テーブルの作成'))
```

## 悲惨な結果

中身は大変なことになっています💦

![image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/395354d4-d34a-1b93-088f-f7172fb7777e.jpeg)

`214`個も作っている💦
これだけ既定の環境でやらかしてきたことがよくわかります。
その分だけいろいろ知見が積み上がってきたと前向きに捉えましょう。

# 稼働していないフローを削除する
さて、この中で`state`が`Stopped`になっているフローは現在稼働していないフローです。
使わないからオフにしよう、と安直に設定した結果ですね。

コチラを削除していこうかと思います。
コネクタに`フローの削除`が存在するため、活用します。

環境は先ほどと同様、`Flow`は、`Power Automate 管理`コネクタで取得した`name`属性です。
そのため、カスタム値の設定で`item()?['name']`と指定することで、繰り返し処理が実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/e3b21f98-12b5-ef59-ac53-10c744d2e63c.png)

## なんとなくバックアップはとりたい
`削除`となると二の足を踏んでしまうのが人間の性。
せめてこのフローが何だったのかは、把握しておきたいというニーズもあると思います。

ここで注目したいものが「自分のフローの一覧表示」の`definitionSummary`です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/beb293fb-42eb-722d-a1bd-05b90c7146eb.png)

フローのトリガーとアクションが列挙されていることがわかります。
削除前に`json`形式で保存しておくことにしましょう。

保存先は*OneDrive for Business*にします。
`ファイルの作成` アクション
ファイル名 - `@{items('For_each')?['name']}.json`
ファイル コンテンツ - `@{item()?['properties']?['definitionSummary']}`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/a11ba1a2-a9b6-76f5-0edd-0d3432a4568f.png)

こちらを実行すると`OneDrive for Business`に`json`ファイルで中身が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b768e68d-da4a-532e-15c9-505baf62d884.png)

*Visual Studio Code*で中身を見ることもできますね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/db62919e-f4b9-b948-1d94-0ca8fb53b2c5.png)

# フロー削除の実行
削除を実行するフロー全体です。

1. フローを手動でトリガーする
1. 自分のフローの一覧表示 `既定の環境`を選択
1. `アレイのフィルター処理`で`state`が`Stopped`のみのフローに絞り込み
1. 繰り返し処理
    1. *OneDrive for Business* - ファイルの作成 - 削除するフローの`definitionSummary`
    1. 削除の実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/44054b68-0c1c-2fff-1c45-776d644b7398.png)

45件削除しました。
まだまだ汚いですね。

# 使わないフローを可視化するために
大掃除計画、今回だけでは終わらない見込みです。
そもそも使っているフローかどうかの判別が必要になります。

さて、その判別をどう実現していくのか、それが次回の課題になりそうです。

ということで今回のブログはここまで！

読んでくださり、ありがとうございました！