ご挨拶
はじめまして。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桁超えています。)
なんの話するの? そう、パフォーマンスの話#
Power Automateのクラウドフローの悩みどころですが、
UIが秀逸(?あたらしいUI使ってる?w まだ慣れなていない僕)で、
パフォーマンスを考慮せずに記述していくと、ポンポン作れてしまうことが、
僕は悪だと思っていますw
ある意味、ローコード恩恵も供述しつつも、パフォーマンスとなるとある程度考慮にしておかないとドはまりする危うさがあることは理解しておいたほうがいいです。
個人利用している中では、パフォーマンスはあまり意味がないかもしれませんが、
大規模となるとそうもいかない、ほんと悩ましい問題かと思います。
Power Automate クラウドフローのベストプラクティス
そのなかかで、公式ドキュメントをみるとひっそり、
英語版でベストプラクティスのドキュメント(PDF)があるのはご存じだろうか?
↓これをひととおり読めば、パフォーマンスに関する悩みは解消するかなと思います。
Power automate クラウドフロー ベストプラクティス のホワイトペーパー
https://go.microsoft.com/fwlink/?linkid=2290320
Learn上でもこの位置にあるの?みたいなところにあったので、
認知度低めな気がしますが、しっかり、章立てられた資料にまとめてあるので
いいなとおもいましたが、英語のみでしたw
こちらでは、無料翻訳ツール(僕はDeepLで翻訳)で翻訳できているので、
Upしたかったのですが、
Qiita記事でも添付できるファイルの種類がPDF対応しているので断念。
上記URLからダウンロードして翻訳してみてください。
検討しなければならないこと
そんなホワイトペーパーもありますが、
リアルなところで、パフォーマンス対応で検討しなければならないことを3つ挙げるとするなら、以下3つが重要かなと思います。
※もっとある気がしますが、記事が長くなりそうなので、一旦3つとさせてください。
①アクションの並列化
②1アクションの並列実行
③どこまで同期でやるか?どこから非同期でよいか?
(こまいテクニックは、ホワイトペーパーで確認してください。
また機会あれば記事がさせてもらいます。)
①アクションの並列化
普通に処理すると、直列でつないでいきがちですが、
場合によっては並列実行でも問題ないものがきっとあるはずです。
通常このような形で、Power Appsから呼び出されたものを、
クラウドフローで処理していきますが、、
以下のように、アクションを並列実行することで処理時間をぐっと抑えることができます。
これは、クラウドフローをあまり意識しないで進めていると陥りますし、
複雑なフローを作成すれば、するほど陥りやすいので、他者レビューなどで並列処理ができないか?などの観点で担保する必要があると思います。
(ある程度設計時でやれそうな気しますが、ソースコードレビューも重要な気がします。)
②1アクションのスレッド実行
これは、完全にクラウドフローの実行並列数の設定になりますが、
Apply to each(for each)の場合に設定で、50処理並列実行が可能となります。
初期設定はOFFされていて、ONしたあと、初期値が20並列。
この設定をしておくことで、一括の更新処理などが早くなるので、お試しください。
非同期でいい場合は、Bulk実行などでも対応できるかと思いますが、
サクッとやる場合はこちらがいい気します。
③どこまで同期でやるか?どこから非同期でよいか?
これは、Power Appsから呼ばれる前提かもしれませんが、
完全同期とした場合に、処理時間がかかるケースがあります。
2つのアクションは、何かしらのテーブルのデータ更新なので、同期が必要ですが、
ログ出力はおまけみたいなもの(重要な要素ではあるもの)なので、
非同期でいけるのであれば、データ更新が終わった段階で、Power Appsに処理を戻すというのも一つ手かなと思います。
実施、僕の今のプロジェクトでもやってますし、
信頼性の高さがないとできないことではあるものの、こ
れで十分パフォーマンス対応につながりますので、何かの気がありましたら、お試しあれ。
要件によってダメなケースもあると思うので、ご利用は計画的に。。
おまけ
Power Platfromの大規模開発やるひとは、
とりあえず、このドキュメントを一式読みましょうw
僕も斜め読みしているだけの人間かもしれませんが、
ある程度の知識がないと太刀打ちできません。
パフォーマンスなに?というかはぜひご一読してみるとよいかと思います。
■パフォーマンス効率のクイック リンク
https://learn.microsoft.com/ja-jp/power-platform/well-architected/performance-efficiency/
あとがき
如何だったでしょうか?
2時間弱でここまで書きましたが、
うーん、1日アドベンティストの日を勘違いしており、突貫で記事を作成していまいました。
夏休みの宿題ぎりぎりにやるタイプとはいえ、これはさすがにきつかった。
とりあえず書くと決めて、何を書こうかと、頭の中にあったとはいえさすがにきつかったし、
伝えたいことの半分も伝えられてない気もしますが、大作書いたらとて、読んでもらえるわけでもないから、ちょこちょこ小出ししていこうかと思います。
では。Power Platform 生活をエンジョイしてください。
引き続きよろしくお願いします。