Power Automate初心者必見！？ ハマりどころ7選の解説

この記事は[Ateam Finergy Inc. × Ateam Wellness Inc. Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ateam-finergy-wellness)の8日目の記事です。

# はじめに
業務でEdgeのIEモードを利用する必要があり、かつRPAで定期実行する必要が生じたので、候補としてはWinActorかUiPath、Power Automateなんだろうなというふわっとした知識のもと、Power Automateは無償版あるなとチョイスしたら色々ハマったので、そういうの知りたい！って人向けです。

# そもそも
私は説明書を読む前にゲームをプレイしちゃうタイプですが、公式ドキュメントに色々書かれています。

https://learn.microsoft.com/ja-jp/power-automate/

可能な限りトレーニングも受けると理解が捗ります。

https://learn.microsoft.com/ja-jp/training/browse/?products=power-automate

# インストール
Power Automateには主にクラウドフローを利用するPower Automateとデスクトップフローを利用するPower Automate Desktopがあります。

クラウドフローはAPIがあるようなSaaSをコネクタを用いて操作し、自動フローを構築、処理するものです。また、デスクトップフローはPC上のアプリやブラウザ、ファイルを操作し自動フローを構築、処理するものです。

用途によりますが、**PC上の処理を必要とするのであればPower Automate Desktopが必要になります。** 現状Windows11であればプリインストールされていますが、Windows10であればMSIインストーラーをダウンロードしインストールするか、Microsoft StoreからPower Automate をダウンロードしてインストールします。詳しくは以下をご覧ください。

https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/install#install-power-automate-using-the-msi-installer


# デスクトップフロー編
## 定期的にフローを実行で出来なくてハマった
Power Automate Desktopは無償版では定期実行することが出来ません。どうしてもお金を払わずに定期実行したい場合、WindowsのタスクスケジューラでPower Shellを呼び出し、UI Automationを使ってPower Automate Desktopのフローを実行する方法もありますが、アップデートによってその処理も動かなくなる場合ありますので、素直に**プレミアムプラン(¥1,875/月)に加入する**ことをオススメします。

プレミアムプランに加入すると、クラウドフローのアテンド型モードにより、デスクトップフローをスケジュール実行することが可能になります。詳しくは以下をご覧ください。

https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/run-desktop-flows-url-shortcuts

補足ですが、Power Automateには**プロセスプラン(¥18,750/月)** もあります。こちらは非アテンド型モードによるデスクトップフローの呼び出しが可能になります。非アテンド型とは簡単に言うとWindowsのサインアウト状態の事です。この状態でRPAを動かしたい場合はプロセスプランが必要となります。非アテンド型モードに関しては以下をご覧ください。

https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/run-unattended-desktop-flows

## ファイル毎にUI要素が別判定されてハマった
バッチで何かファイルをダウンロードさせて、そのファイルに対して処理をする時に気づいたのですが、ダウンロードしたファイル名に日付が入っていると、UI要素の指定の仕方からして、別の要素と判定されるため、UI要素の操作が失敗します。

例えば、CSVファイルを毎日ダウンロードして処理する場合、「サンプルデータ_20231215.csv」をExcelで操作するフローを作っていたとして、翌日「サンプルデータ_20231216.csv」をダウンロードしても、同じフローでは失敗します。これは以下のようにUI要素が指定されているからです。

* ローカルコンピューター > Window 'サンプルデータ_20231215.csv - Excel' > ボタンなど
* ローカルコンピューター > Window 'サンプルデータ_20231216.csv - Excel' > ボタンなど

この時Power Automateは上位のパスから辿っていくため、翌日になると日付が変わり、そのパスのUI要素は存在しないと判定します。

これの回避策として何が適切かはわかりませんが、私の場合はダウンロード時に共通のファイル名にするなどして回避しています。

* ローカルコンピューター > Window 'サンプルデータ_処理用.csv - Excel' > ボタンなど

ちなみにPower Automete DesktopではUI要素ピッカーでアプリのUI要素を確認することが出来ます。またWindowsにはAccessibility InsightsやInspect等のUI要素を確認するツールがあります。

https://accessibilityinsights.io/

https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/

## サブフローのみの実行がデスクトップフローの実行履歴に残らない
デスクトップフローは実行履歴がPower Automateの管理画面から確認できるのですが、サブフローのみを途中実行した場合は、当該デスクトップフローの実行履歴には載りません。

長いフローによってはサブフローに分割し、効率やデバッグしやすくする場合があります。
そういった時、PowerAutomateではサブフローの頭から(正しくはどこからでも)実行可能なのですが、その場合は履歴として残りません。

デスクトップフローは実行履歴がPowerAutomateの管理画面から確認できるのですが、上記のようにサブフローのみを実行するなどした場合は、当該デスクトップフローの実行履歴には載りません。

## 組織間でデスクトップフローがコピー、エクスポート・インポートできない
とある理由で同一ユーザで複数組織に所属しているのですが、最初に所属していた組織で作っていたデスクトップフローをコピーして、別の組織に移そうと思いましたが、現状そういった機能が無さそうです。

クラウドフローに関してはエスクポートはあるようです。もし将来的に別の組織を作る予定があり、その組織でデスクトップフローを本運用するような場合、元の組織で作り込みすぎると移行が大変になるので注意が必要です。

## JavaScriptへの引数と戻り値の扱いがよくわからなくてハマった
Power Automate Desktopを使っているとスクリプトのアクションで変数処理したいケースが多々あります。
そんな時にJavaScriptやPythonなどが使えるのですが、例えばJavaScriptだとECMAScriptな気分で書いても動作しません。
* JavaScriptで変数を宣言する
    * `const`や`let`は使えないので`var`を使う必要があります
* JavaScriptにPower Automateで宣言したフロー変数を渡す
    * これはフロー変数の型によって渡し方が違います
        * 例えばテキスト
            * `var hoge = '%NewVar%'`
* JavaScriptの出力をPower Automateのフロー変数に返す
    * 文字列(改行あり)
        * `var hoge = 'fuga'`
        * `WScript.Echo(hoge)`
    * 文字列(改行なし)
        * `WScript.StdOut.Write(hoge)`
    * デフォルトだと`JavascriptOutout`変数に代入されます

スクリプトアクションはデバッグがとてもツラいです。Power AutomateにはIDEなど何もなく、スクリプトはただのテキストエリアに入れる必要があり、拡大できないため可読性が悪く、シンタックスハイライトとかもありません。

https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/actions-reference/scripting

# クラウドフロー編
## クラウドフローからデスクトップフローを非アテンド型で動かすと、成功していたデスクトップフローが失敗してハマった

非アテンド型の場合に、UI要素の操作が失敗するケースが多いです（まったく操作できないわけではないです)。マイクロソフトの方から、そういった場合は[解像度を上げてください](https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/how-to/set-screen-resolution-unattended-mode)とサポートいただきました。もし非アテンド型でUI操作が失敗する場合は、解像度を変更してみてください。

# おわりに
Power Automateを使ってみて、初心者がハマりそうなポイントをまとめてみました。

最近ではPower Automateに新機能としてCopilotが組み込まれ、フローの作成がより効率的に行えるようになりました。また、無償版でも十分な機能が提供されているため、これを機にPower Automateを試してみることをお勧めします。

Power Automateは業務プロセスの自動化をサポートする強力なツールであり、この記事を参考にしながらスムーズに活用していただければと思います。