技術情報ブログ
Power Platform
2024.03.27

Power Automateのベストプラクティス・アンチパターン(5)【Apply to each×コンカレンシー×変数の設定はNG】

Power Automateのベストプラクティス・アンチパターン(5)【Apply to each×コンカレンシー×変数の設定はNG】
小刀稱知哉

こんにちは。アーティサン株式会社の小刀稱(ことね)です。

Power Automateは、コーディングの知識がなくともお手軽に業務の自動化を行うことができる非常に有用なツールです。
しかし、誰でも簡単に始めることができるといえど、そこにはお作法が存在します。

お作法を守らずに作成すると、「他の人がメンテナンスできない」や「修正時のコストが大きい」といった問題が発生します。

そこで、Power Automateに関する案件を数多く対応してきた弊社が、現在までに蓄積した「Power Automate設計時のノウハウ」について紹介します。

本記事を読んでいただくことで、Power Automateを扱う際の「やるべきこと・やってはいけないこと」を知り、より保守性の高いフローを作るコツを掴めるかと思います。

内容としては、既にPower Automateでフローを作成したことがある方に向けた記事です。
また、これからPower Automateを作成したい方も、事前に一読していただくことをお勧めします。

Power Automate初心者の方は、以下の記事も参考にしてください。

第5回目の今回はApply to eachでコンカレンシー制御を行う場合は、変数の設定を行ってはいけないという内容についてお伝えしていきます。

 

アンチ・パターン(Apply to eachの中で変数を設定)

最初にNG例について紹介します。

今回作成したPower Automateは以下です。
(Arrayの各値を1つずつ表示しているだけのフローです。)

Apply to eachの中で変数を設定
Apply to eachの中で変数を設定

ポイントとしては、以下2点です。

  • Apply to each処理の中で、コンカレンシー制御をオンにしている

    コンカレンシー制御
    コンカレンシー制御
  • Apply to each(以下、ループ処理)の中で変数の設定アクションを使用し、変数にて値を保持している

上記フローを実行した際、作成:保持した値の表示アクションには、 各ループの値(one ~ five)がそれぞれ格納されると思ったのではないでしょうか。

しかし、実際に結果を見てみると、予想と異なる値が格納されていることが分かるかと思います。

結果(Apply to eachの中で変数を設定)
結果(Apply to eachの中で変数を設定)

ちなみに本フローを複数回実行すると、実行結果ごとに作成:保持した値の表示アクションに表示される値は異なっておりました。

(みなさんも実際にフローを作成し、確認されることをおすすめします。)

なぜこのような結果となるのでしょうか?
それは、変数はすべてのループ処理で共通のリソースを同時参照するためです。

イメージは以下です。

イメージ(Apply to eachの中で変数を設定)
イメージ(Apply to eachの中で変数を設定)

Apply to eachでコンカレンシー制御を行った場合は、各ループ処理が同タイミングで実行されます。
その際、変数の値は各ループで共通となるため、いずれかのループ処理で設定した値が、他のループ処理から参照されることになるわけです。

よって、Apply to eachでコンカレンシー制御を行う際に、変数の設定を使用すると、予想外の値が格納される可能性があるためおすすめいたしません。

 

ベスト・プラクティス(Apply to eachの中で作成を設定)

上記の対応を回避するためには、変数ではなく作成を用います。

改良したPower Automateは以下です。

Apply to eachの中で作成を使用
Apply to eachの中で作成を使用

変数の設定:現在のアイテムを「変数」で保持アクションを作成:現在のアイテムを「作成」で保持アクションに変更しました。

上記フローを実行すると、予想通り各ループの値(one ~ five)がそれぞれ格納されました。

結果(Apply to eachの中で作成を設定)
結果(Apply to eachの中で作成を設定)

作成の場合は、コンカレンシー制御を行ったとしても、各ループ処理で個別のリソースが参照されます。
よって、いずれかのループ処理で設定した値が、そのループ処理のみから参照されることになります。
(いわゆる「スレッドセーフ」となります)

イメージ(Apply to eachの中で作成を設定)
イメージ(Apply to eachの中で作成を設定)

 

さいごに

Power Automateで処理を高速化する場合には、Apply to eachアクションのコンカレンシー制御はよく使われる内容だと思います。
しかし、今回の内容を知っていないと予想と異なる値が格納されることになるため、注意が必要です。

今回ご紹介した内容も、とても有用な内容ですので、是非覚えていただきたいです!

Power Platform(SharePoint・Power Apps・Power Automate)に関する営業活動や設計、開発などを担当:小刀稱知哉

小刀稱知哉

大分県出身(温泉大好き)、現在は東京都在住

1990年生まれ

30才でメーカーの技術営業からIT業界にジョブチェンジ!!!

趣味は読書

主にMicrosoftのローコード(SharePoint・Power Platform)に関するに関する営業活動や設計、開発などを担当しております!

(最近はCopilot Studioについても勉強中)

持ってる資格はPL-200/PL-300/PL-400/PL-600/MS-700/AZ-104/AZ-305/SC-200/SC-100

シェアする
記事カテゴリ
最新記事
2025.04.30

Power Apps, Power Automate で作る NFC タグを活用したアプリ例

2025.04.16

Power Apps で NFC タグを使ってみる

2025.04.02

Copilot Studioで作成したコパイロットをTeams に追加する方法

2025.03.19

SharePoint リストで主キーを実装し、比較してみた

2025.03.12

SharePointのデザインをもっとおしゃれに!(X-SP Design | SharePoint デザイン拡張サービスのご紹介)(4) サンプルの紹介その2

AccessCSSBreakpointObserverSet承認フローメールの送信非表示Microsoftshortcut key通知体験談JavaScriptSharePoint Framework転職InfoPathxUnitメディアクエリForAllform差出人アプリdesignconcat関数ファイル勉強表示SPFx主キーMatTable.Net Core 3.1スマホUpdateContextエクスポートインスタントクラウドフロー[市民開発者JSON文字制限フィルター クエリ内製化切替サンプルCopilot StudioAngular MaterialVSCodePCロードマップインポート自動化したクラウドフロー構築デザインフロー実行ドキュメント ライブラリ市民開発登録者samplePowerAppsデータ構造.Net Core Test Explorerレスポンシブ技術カスタマイズ委任自動化したクラウド フロー運用開発環境filter query管理システム列X-SPNFCタグモデル駆動型アプリSortByColumns関数Dataverse for Teams入門ItcomponentVBAフローの種類選択肢列環境sortガバナンス登録日StylePowerAutomatePower AppsTypeScriptitem関数初心者情報技術ダイアログエラーインスタント クラウド フロー参照列本番環境ソートerror notification更新者StudioPower PlatformHTMLGoogle Maps中級者メッセージIDコンポーネントエクセルスケジュール済みクラウド フローChatGPTライセンスmultiple itemエラー通知更新日AISharePointEF CoreMarker Clustererキャンバスアプリメールdialogerrorレスポンシブ レイアウトOpenAI環境構築手順複数項目削除変更生成系AIExcelマイグレーションRANK()関数DatePickerfirst()関数Tips復元responsive layoutオープンAIpipelineシェアポイントフォルダ外部DBCopilotPower AutomateFramework CoreDynamics 365 SalesDropdownnest新機能restoreデータ行の制限チャットGPTCI/CD便利機能ゴミ箱連携licenseC#Attribute directivesMicrosoft Translatorview入れ子変数Power BI引き継ぎgalleryパイプラインカレンダー完全削除接続添付ファイルコントロールattributeO/Rマッパーマーカークラスタリングライブラリビュー動的リスト検索個人列退職ギャラリーDevOpsCalendarモデル駆動型データフローファイルサイズvalidationazure sql databasetailwindcssアクセス制限collectionMicrosoft 365グループユーザー列所有者を変更スクロールMicrosoft 365Teamsセキュリティロールrecycle binフルリモートワークローコードCase式マルチテナント承認コレクションセキュリティグループSharePoint Online異動コンテナ簡易在庫管理ローコード開発ビジネスルールごみ箱アーティサンAngularHTTP Requestドロップダウンメニューリマインド複数の添付ファイル送信元リストLoopショートカットキー時間外非エンジニアDataverseアクセス許可Artisan
PageTop
ページトップに戻る