Power Automateの裏側をみてみよう (2/2)

#前回
前回はPower AutomateのメニューにあるPeak codeの紹介と、トリガー・アクションの入力・出力をどうやって取り出すかを紹介しました。
  前回：[Power Automateの裏側をみてみよう！ (1/2)](https://qiita.com/h-nagao/items/be565fdac60a9b2968d5)

今回はもうひとつの「Settings」について、トリガー・アクションでそれぞれ代表的と思われるものを紹介します。
念のため、Settingsには↓ここからアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/7954786d-ed2b-b0ea-86c9-d538fedb3b55.png)

# Split-On (トリガーのみ)
トリガーにしかない設定です。
**Split-On**はトリガーしたときのアイテムsを分割してFlow実行してくれる機能です。
例えばSharePoint listのクイック編集でアイテム作成した場合、Split-On：OFFだと、トリガーは作成されたアイテムsで発生するので、配列を対象に処理することになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/fe482bc6-dd79-df90-c10c-8888a34239f5.png)
Split-Onを有効にすると、トリガーしたときの配列をバラバラにして、個別にFlowを実行してくれます。このため、トリガー以降の処理を簡単にすることができます。

もともとPower Automateの旧ライセンス形態では、**Flowの実行回数に上限があった**ため、この設定をOffにすることで実行回数が節約できたんだろうと予想されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/c5e27d55-0339-2b33-116c-621800dd67dd.png)

# Concurrency control
Apply to eachなど並列実行できるアクションに関する、並列化の多重度の設定です。
最低は1、最大は50。1の場合には直列に実行されます。
この並列化の多重度、万能なように思えますが、並列化の多重度を上げると、処理順がバラバラになったり、ループの中で依存関係のあるようなアクション(たとえばUpdate variableやAppend to array variableなど)がある場合には十分に恩恵が得られない場合があるので、利用には注意が必要です。
ただし、単純なループ処理では劇的に実行速度が改善されるため、処理の内容に応じて設定してみてください。

※並列実行の多重度の恩恵を最大限活用するための方法として、[Pieterの方法](https://sharepains.com/2019/07/09/compose-actions-inside-apply-to-each-steps-in-microsoft-flow/)が有効です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/76839376-994d-349f-74f1-11bf3d97c0ac.png)

# Secure Inputs/Outputs
アクション/トリガーのInput/Outputを実行履歴に表示しないというものです。
有効にすると、入力をセキュアにする (設定をONにする)と、ほかのアクションでその入力を参照場合でも、履歴上で非表示になります。
もちろん、セキュアな入力値を加工したとしても、履歴上では隠蔽されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/237bf273-3f90-2dc8-a375-11545b2a8551.png)
Flowの編集権限は持っていても、履歴に表示されないので、用途としては個人の位置情報を特定できるような入力の隠蔽、あるいはAPI実行時のAPIKeyを含む入力の隠蔽かなと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/dd569279-f760-a4c6-022a-a5625937f5db.png)


# Tracked Properties
アクションに追加できる追加のプロパティです。
ほかのアクションから参照可能 ```actions('action name')?['trackedProperties']``` の書式でデータを取り出します。

Tracked Propertiesはjson形式のデータとして扱われるので、指定する際にはKey : Valueのペアを設定します。
また、Valueは、""ダブルクォーテーションでくくり、関数を使う場合には@(アットマーク)から始める必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/eef2c379-6f23-0946-115b-0c03acd1557d.png)

さらに自分自身の入力も、Tracked Propertiesに含めることができます。この場合には前回のブログで紹介した ```action()?['inputs']``` を利用します。
自分自身をTracked Propertiesに含めることができるので、これで自分自身のコピーを生成し、通常エラーになるような自己参照した処理も可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/d6897b6d-81ad-ef00-3b95-fa5ef8ffcd40.png)

その他の利用例は以下をご覧ください。1アクションで、すべてのフォーマットで時間を定義しています。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Tonight&#39;s <a href="https://twitter.com/hashtag/FlowNinja?src=hash&amp;ref_src=twsrc%5Etfw">#FlowNinja</a> hack is an idea I had previously: &quot;how to build MomentJS&quot; in <a href="https://twitter.com/MicrosoftFlow?ref_src=twsrc%5Etfw">@MicrosoftFlow</a> <br><br>The nice part of this is the block itself is copy and paste, and the &quot;input&quot; is on the front of the compose action<br><br>So, if I squint a bit - this is a way to write inline functions. <a href="https://t.co/zD7Do7Gsg9">pic.twitter.com/zD7Do7Gsg9</a></p>&mdash; John Liu 劉 (@johnnliu) <a href="https://twitter.com/johnnliu/status/1090957263492153344?ref_src=twsrc%5Etfw">January 31, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# Trigger Conditions
Trigger Conditionsは別途まとめているので、こちらをどうぞ
https://qiita.com/h-nagao/items/46d5d95cfacb3c70841b

# 裏側まとめ
普段あまり除かない、Power Automateの裏側を見てきました。基本的には、ここらへんはディープなのであまり触らなくてもよいと思いますが、パフォーマンス改善の一つの切り口だったり、個人に紐づく情報の隠蔽だったり、あるいは通常の方法だと1つ変数を増やさないといけないようなケースのワークアラウンドとして、これらを知っておくと幅が広がるかなと思います。