Power Automate 開発チートシート

実務でPower Automate開発を2年ほど経験し、教える機会も増えてきたのでまとてみた。
初級者から中級者へレベルアップする過程の方向け。



## テンプレート

Power Automateで開発するときは必ずと言っていいほど、以下のTry,Catch,Finallyのテンプレートを利用する。これは他のプログラム言語にも共通する考え方で、Tryにはメインの処理、Catchには失敗したときの処理、Finallyには最終的な処理を入れる。
>Try, Catch, and Finally Template | Power Automate
>https://make.powerautomate.com/galleries/public/templates/e8e028c6df7b4eb786abdf510e4f1da3/try%E3%80%81catch%E3%80%81finally-%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88



## 変数


### 型の種類について
|型		|初期値	|備考|
|---|---|---|
|Boolean|false	|｢true｣｢false｣|
|Integer|0		|整数|
|Float	|0		|小数|
|String	|		|文字列|
|Object	|		|JSON形式の値 {"name": "xxx","age": 20} |
|Array	|[]		|配列 ["xxx","yyy","zzz"] [1,2,3] |


### 初期値かどうか判定する方法
|型		|変数名	|初期値	|判定式|
|---	|---	|---	|---|
|Boolean|bln	|false	|```equal(variable('bln'), 'false')```|
|Integer|int	|0		|```equal(variable('int'), 0)```|
|Float	|flt	|0		|```equal(variable('flt'), 0)```|
|String	|str	|		|```equal(variable('str'), '')```|
|Object	|obj	|		|```equal(variable('obj'), json(''))```|
|Array	|arr	|[]		|```equal(variable('arr'), json('[]'))```|

※初期値にしたいときは「null」を代入すればOK。
※変数は自己参照ができないので注意。


### メモ：すごくよく使う変数

フローの名前を変数に代入
* アクション名：変数を初期化する
* 名前：ツール名
* 種類：文字列
* 値：```workflow()?['tags/flowDisplayName']```


### メモ：定数を1つのアクションで宣言する
定数の概念はなく「変数を初期化する」で1アクションごとに宣言するが、まとめて1つのアクションで宣言することで、アクション消費数を節約することができる

1.「変数を初期化する」アクションを追加して、名前、種類、値を以下の通り設定。
* 名前	：定数
* 種類	：Object
* 値	：```{ "定数1":"string", "定数2":"string", "定数3":"string" }```


2.「JSONの解析」アクションを追加して、コンテンツとスキーマを以下の通り設定。
* コンテンツ	：```variable('定数')```
* スキーマ	：
```json:スキーマ
{
    "type": "object",
    "properties": {
        "定数1": {
            "type": "string"
        },
        "定数2": {
            "type": "string"
        },
        "定数3": {
            "type": "string"
        }
    }
}
```
        
>Power Automate のオブジェクト変数はこうやって使うべし #JSON - Qiita
>https://qiita.com/Rinatamu/items/cf4172bda3778397be9e





## 日時
Power Automateでは日時は文字列として扱われる。
UTCが基準になるため、UTCから日本時刻に変換する必要がある。

### 日時変換

日本時間で現在時刻を取得する
```convertFromUtc(utcNow(), 'Tokyo Standard Time', 'yyyy-MM-dd hh:mm:ss')```

日本時間をUTC時刻に変換する
```convertToUtc('2025-04-28 02:25:41', 'Tokyo Standard Time', 'yyyy-MM-dd hh:mm:ss')```

表示形式を変換する
```formatDateTime('2025-04-28 02:25:41', 'yyyy/M/d')```

### 日時の表示形式
上記のサンプルでは```yyyy-MM-dd hh:mm:ss``` を指定しているが、省略した場合は```2025-04-28T11:28:29.6260840```の形式で値が戻ってくる。
その他の指定方法は以下サイトが良くまとめてくださってるので参考。
>Power Automate の 日付書式を調べてみた (夏の自由研究) - MoreBeerMorePower
>https://mofumofupower.hatenablog.com/entry/format_Specifiers


### Excelの日時と連携
Excelテーブルから日時を読み込む、あるいは書き込む場合には、DateTime形式に「ISO 8601」を指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072996/e2ce9b42-4051-4797-b4c7-a62675d816f9.png)



## 改行コード
改行コードの種類は、LF(ラインフィード)、CR(キャリッジリターン)、それを合わせたCRLFの3つからなる。Power Automateで取得したデータはこの改行コードがエスケープ表記だったり16進数表記だったりして非常に混乱するので、以下の表にまとめた。

|コード表記|エスケープ表記|16進数表記|10進数表記|Power Automate 関数|Excel 関数|VBA|
|---|---|---|---|---|---|---|
|LF |\n |0A |10 |decodeUriComponent('%0A') |CHAR(10) |vbLf |
|CR |\r |0D |13 |decodeUriComponent('%0D') |CHAR(13) |vbCr |
|CRLF|\r\n|0D 0A |13 10 |decodeUriComponent('%0D%0A') |CHAR(13)&CHAR(10) |vbCrLf |

改行コードを消したい時は以下を参考
>Power Automate で 複数行テキストを操作する #PowerAutomate - Qiita
>https://qiita.com/h-nagao/items/af18eb357bc7c8bec3a2



## フィルタークエリ
フィルタークエリはExcelやSharePointリストから複数行をまとめて取得する際に、データを絞り込むためのもの。

記述サンプル
```
Column1 eq 'xxx'
Column1 ne 'yyy'
Column1 gt 1000
Column1 ge 1000
Column1 lt '2025-01-01'
Column1 le '2025-01-01'
Column1 eq 'xxx' or Column1 eq 'yyy'
Column1 ne 'xxx' and Column1 ne 'yyy'
not (Column1 eq 'xxx')
```

演算子（参考）

|演算子	|元の意味				|記号	|意味		
|---	|---					|---	|---		
|eq		|equal					|=		|等しい		
|ne		|not equal				|<>		|等しくない	
|gt		|greater than			|>		|より大きい	
|ge		|greater than and equal	|>=		|以上		
|lt		|less than				|<		|より小さい	
|le		|less than and equal	|<=		|以下		
|and	|						|		|論理和		
|or		|						|		|論理積		
|not	|						|		|論理否定	



## 配列

### 配列のn番目の要素を取得する
変数「アレイ」には以下の要素が入っているとする。
この配列から1番目の要素を取得したい場合、```variable('アレイ')[0]```と指定すると、20という数字が取得できる。
```json:variable('アレイ')
[
    20,
    25,
    23
]
```

そこから応用して「複数の項目の取得」で以下の配列を取得したとする。
この配列から1番目の要素のageを取得したい場合、```outputs('複数の項目の取得')?['body/value'][0]?['age']```を指定すると、20という数値が取得できる。
```json:outputs('複数の項目の取得')
"body": {
    "value": [
        {
            "id": 1,
            "age": 20
        },
        {
            "id": 2,
            "age": 25
        },
        {
            "id": 3,
            "age": 23
        }
    ]
}
```



## 制限（重要なとこ）
Power Automateには知らないとリリース後に痛い目を見る制限が結構ある。

#### Excelの取得できる行数は256行
規定で256行までしか取得されない。回避方法は以下を参考。
>Power Automateで256行より大きいExcelファイルを扱う方法！ | てじらぼ
>https://www.teijitaisya.com/powerautomate-row/

#### SharePointの取得できる行数は100行
規定で100行までしか取得されない。「上から順に取得」に5000を指定すればMAX5000行までは取得可能だが、それ以上は5000行ずつループが必要。回避方法は以下を参考。
(そもそもアクション数の上限が10000なので、5000件ループするような設計はよろしくない…フィルタークエリを使って絞り込むことが大事)
>Power AutomateでSharePointリストの5000件以上のデータを処理する方法 | PPログ
>https://powerplatformnikki.com/powerautomategetsplist5000/

#### 実行できるアクション数は1日10000回まで
アクション数とは編集画面上の1つ1つの箱の単位を指す。
契約してるM365のプランにもよるが、実行できるアクション数は1ユーザーあたり1日10000回まで。これを超過すると速度制限が起きる。
フローの実行頻度やループ回数によって、アクション数が10000回を容易に超える可能性もあるので注意して設計する。
https://learn.microsoft.com/ja-jp/power-platform/admin/api-request-limits-allocations

#### その他制限
他にも「変数アクションは1フローあたり256個まで」「ネストは8ネストまで」など色々制限があるので、公式リファレンスに目を通しておく。
https://learn.microsoft.com/ja-jp/power-automate/limits-and-config