Power Automate DesktopのCustom Object(辞書型の変数)、「追加」のつもりが「上書き」になっていた話
TL;DR
Power Automate Desktop(PAD)のCustom Object(辞書型の変数)は、設定方法によって「キーの追加・更新」にも「辞書全体の置き換え」にもなる。
| 設定方法 | 変数名欄 | 値欄 | 動作 |
|---|---|---|---|
| 空辞書の作成 | MyObj |
%{{}}% |
空の辞書を作る |
| キーの追加・更新 | MyObj['キー名'] |
任意の値 | そのキーだけ追加/更新 |
| 辞書全体の代入 | MyObj |
%{'キー':'値'}% |
辞書全体を置き換え(既存キーは消える) |
この3つ目、辞書へ値を追加しているつもりで実は辞書ごと入れ替えている、というのが今回のハマりポイント。実機で検証して確認した内容なので、同じ罠にハマる人がいれば参考にしてください。
動作環境
- Power Automate Desktop
辞書型変数とは
「キー」と「値」の組み合わせでデータを保持できる変数。例えばこんな情報を1つの変数にまとめられます。
{
"花の名前": "あじさい",
"花の色": "あお",
"本数": 3
}
- JSONを組み立てたい
- APIへデータを渡したい
- 複数項目を1つの変数で管理したい
といった場面で使います。
1. 空の辞書を作る
「変数の設定」アクションで以下を指定します。
- 変数名:
MyObj - 値:
%{{}}%
実行後:
{}
2. キーを追加する
作成した辞書へ項目を追加するには、変数名の欄にキーを指定します。
- 変数名:
MyObj['花の色'] - 値:
あお
実行後:
{
"花の色": "あお"
}
さらに追加していけます。
- 変数名:
MyObj['花の名前'] - 値:
あじさい
実行後:
{
"花の色": "あお",
"花の名前": "あじさい"
}
3. 既存のキーを更新する
同じキーを指定すると上書き(更新)されます。
- 変数名:
MyObj['花の色'] - 値:
あか
更新前:
{ "花の色": "あお" }
更新後:
{ "花の色": "あか" }
ここまでは想像どおりの挙動。
4. 辞書を直接代入する方法もある
辞書そのものをまとめて代入することもできます。複数の値を設定するときなど改行したくなるのですが…なぜか改行すると失敗するのでご注意ください。(もうほんとなんなの)
- 変数名:
MyObj - 値:
%{'花の色':'あか'}%
実行後:
{
"花の色": "あか"
}
初期値をまとめて設定したいだけなら、これでも問題ありません。
ハマりポイント: これは「追加」ではなく「上書き」
問題はここから。すでに次のような辞書があるとします。
{
"花の色": "あお",
"花の名前": "あじさい"
}
この状態で MyObj に対して
- 値:
%{'花の色':'あか'}%
を設定すると、結果はこうなってしまいます。
{
"花の色": "あか"
}
花の名前 が消えている。
これは「花の色というキーだけ更新した」のではなく、「MyObj という変数の中身そのものを、新しい辞書(花の色しか持たない辞書)で丸ごと置き換えた」ため。MyObj['花の色'] のようにキーを指定した代入と、MyObj そのものへの代入は、見た目が似ていても全くの別物ということになります。
自分は最初これを知らずに辞書を直接設定するやり方をしていて、「さっき追加したはずの値が消えている」という現象に遭遇しました。
追加と上書きの違いまとめ
| 設定方法 | 動作 |
|---|---|
%{{}}% |
空辞書の作成 |
MyObj['キー'](新規キー) |
キーの追加 |
MyObj['キー'](既存キー) |
キーの更新 |
MyObj = %{'キー':'値'}% |
辞書全体の置換 |
実務では後から値を追加していくケースが多いので、
-
%{{}}%で空辞書を初期化 -
MyObj['キー名']で項目を追加していく
という進め方がおすすめ。
まとめ
- PADの辞書型変数は、設定方法によって挙動が変わる
-
%{{}}%は空辞書の作成 -
MyObj['キー名']はキーの追加・更新 -
MyObjへの直接代入は辞書全体の置き換え(既存キーは消える)
「キーへ設定しているのか」「辞書全体へ設定しているのか」を意識しておくと、この罠にはハマりにくくなります。


