[Power Automate] クラウドフローのパフォーマンス①初級編

# ご挨拶 #
はじめまして。susumu tanakaです。
Power Platform界隈には長らくいるのですが、
Power automateのアドベンティストは、この記事が初投稿となります。

いま、とある会社に所属して、Slerとして、
お客様のPower Platfromを活用した大規模ワークフローシステムを構築しているのですが、
そんななかで、今プロジェクトでホットな話題が、
Power Automateクラウドフロー（&Power apps）のパフォーマンスになります。
※もちろん、Power Pagesの話もあるのですが...

Power Apps版のパフォーマンスの話はこちら↓
[Power Apps]キャンバスアプリ、大規模開発における勘所①パフォーマンス編
https://qiita.com/susumutanaka/items/a406f82ae7e09b909d0a

システムのロジック部分の大半はPower AppsのPower FXで書かれてますが、
共通処理や時間のかかるものは、クラウドフローで記述して、
Power Appsから呼び出す形で、処理実装しています。
※その数、100個以上（個別開発のものも含めると、3桁超えています。）

<!--
コメントかくしておく
■参考URL（Markdown記法 チートシート）
https://qiita.com/Qiita/items/c686397e4a0f4f11683d
-->

# なんの話するの？ そう、パフォーマンスの話#

Power Automateのクラウドフローの悩みどころですが、
UIが秀逸（？あたらしいUI使ってる？ｗ　まだ慣れなていない僕）で、
パフォーマンスを考慮せずに記述していくと、ポンポン作れてしまうことが、
僕は悪だと思っていますｗ

ある意味、ローコード恩恵も供述しつつも、パフォーマンスとなるとある程度考慮にしておかないとドはまりする危うさがあることは理解しておいたほうがいいです。

個人利用している中では、パフォーマンスはあまり意味がないかもしれませんが、
大規模となるとそうもいかない、ほんと悩ましい問題かと思います。

# Power Automate クラウドフローのベストプラクティス

そのなかかで、公式ドキュメントをみるとひっそり、
英語版でベストプラクティスのドキュメント（PDF）があるのはご存じだろうか？
↓これをひととおり読めば、パフォーマンスに関する悩みは解消するかなと思います。

Power automate クラウドフロー　ベストプラクティス　のホワイトペーパー
https://go.microsoft.com/fwlink/?linkid=2290320

Learn上でもこの位置にあるの？みたいなところにあったので、
認知度低めな気がしますが、しっかり、章立てられた資料にまとめてあるので
いいなとおもいましたが、英語のみでしたｗ

こちらでは、無料翻訳ツール（僕はDeepLで翻訳）で翻訳できているので、
Upしたかったのですが、
Qiita記事でも添付できるファイルの種類がPDF対応しているので断念。

上記URLからダウンロードして翻訳してみてください。

# 検討しなければならないこと

そんなホワイトペーパーもありますが、
リアルなところで、パフォーマンス対応で検討しなければならないことを３つ挙げるとするなら、以下３つが重要かなと思います。
※もっとある気がしますが、記事が長くなりそうなので、一旦３つとさせてください。

①アクションの並列化
②1アクションの並列実行
③どこまで同期でやるか？どこから非同期でよいか？

（こまいテクニックは、ホワイトペーパーで確認してください。
また機会あれば記事がさせてもらいます。）


## ①アクションの並列化
普通に処理すると、直列でつないでいきがちですが、
場合によっては並列実行でも問題ないものがきっとあるはずです。

通常このような形で、Power Appsから呼び出されたものを、
クラウドフローで処理していきますが、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322851/0c5e723b-6fc7-0452-bf68-0187c01a68b3.png)

以下のように、アクションを並列実行することで処理時間をぐっと抑えることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322851/6e0929bd-72ec-b8b3-6d8e-493d637ce4b3.png)

これは、クラウドフローをあまり意識しないで進めていると陥りますし、
複雑なフローを作成すれば、するほど陥りやすいので、他者レビューなどで並列処理ができないか？などの観点で担保する必要があると思います。
（ある程度設計時でやれそうな気しますが、ソースコードレビューも重要な気がします。）

## ②1アクションのスレッド実行
これは、完全にクラウドフローの実行並列数の設定になりますが、
Apply to each(for each)の場合に設定で、50処理並列実行が可能となります。
初期設定はOFFされていて、ONしたあと、初期値が20並列。
この設定をしておくことで、一括の更新処理などが早くなるので、お試しください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322851/f54d2aa3-ab36-09d3-0fea-f920e9984b65.png)

非同期でいい場合は、Bulk実行などでも対応できるかと思いますが、
サクッとやる場合はこちらがいい気します。

## ③どこまで同期でやるか？どこから非同期でよいか？
これは、Power Appsから呼ばれる前提かもしれませんが、
完全同期とした場合に、処理時間がかかるケースがあります。

こんな、処理があったとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322851/5ae12880-9e64-9c00-dbb9-479ba7c51aeb.png)

２つのアクションは、何かしらのテーブルのデータ更新なので、同期が必要ですが、
ログ出力はおまけみたいなもの（重要な要素ではあるもの）なので、
非同期でいけるのであれば、データ更新が終わった段階で、Power Appsに処理を戻すというのも一つ手かなと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322851/52620425-9935-4b01-5529-95d753266db1.png)

実施、僕の今のプロジェクトでもやってますし、
信頼性の高さがないとできないことではあるものの、こ
れで十分パフォーマンス対応につながりますので、何かの気がありましたら、お試しあれ。
要件によってダメなケースもあると思うので、ご利用は計画的に。。

<!--
# さらに気を付けておかないといけない点
製品特性というか、推奨・非推奨という観点からになりますが、
パフォーマンス要件がある場合は考慮する必要があります。

①クラウドフロー呼び出すのに、約0.6秒かかる！？
②推奨は非同期！？（Power Appsから呼び出す場合？）

これを十分加味して、パフォーマンス要件をまとめる必要がある気がします。
ただ、パフォーマンス要件満たせないから、失注したなど悲しいことにならないように..

## ①クラウドフロー呼び出すのに、約0.6秒かかる！？
公式ドキュメントにあるのですが、クラウドフローを呼び出すのに、0.6秒かかるそうです。
これはパフォーマンス要件があるアプリケーションを作成する際にはかなり注意する点かと思います。非機能要件などで、3,5,7秒とか、要件を決める際にはこれを考慮しておく必要がありますので、注意してください。

# ②推奨は非同期！？Power Appsから呼び出す場合？
この公式ドキュメントを見つけたときは、「本当か」と？
耳というか、目を疑ったのですが、
Power AppsからPower Automate クラウドフローを呼びだすのは、非同期が推奨とされてますｗ
要件次第かと思いますが、パフォーマンスと仕様の要件とのせめぎ合いにさいなまれますので、
本と注意が必要です。
-->

# おまけ
Power Platfromの大規模開発やるひとは、
とりあえず、このドキュメントを一式読みましょうｗ
僕も斜め読みしているだけの人間かもしれませんが、
ある程度の知識がないと太刀打ちできません。
パフォーマンスなに？というかはぜひご一読してみるとよいかと思います。

■パフォーマンス効率のクイック リンク
https://learn.microsoft.com/ja-jp/power-platform/well-architected/performance-efficiency/

# あとがき
如何だったでしょうか？
2時間弱でここまで書きましたが、
うーん、1日アドベンティストの日を勘違いしており、突貫で記事を作成していまいました。
夏休みの宿題ぎりぎりにやるタイプとはいえ、これはさすがにきつかった。

とりあえず書くと決めて、何を書こうかと、頭の中にあったとはいえさすがにきつかったし、
伝えたいことの半分も伝えられてない気もしますが、大作書いたらとて、読んでもらえるわけでもないから、ちょこちょこ小出ししていこうかと思います。

では。Power Platform 生活をエンジョイしてください。
引き続きよろしくお願いします。