※この記事は プログラマがPower Automate for Desktopを使う シリーズの一つです。
「2024年11月19日の朝に「Power Automaate Desktopのフローがすべて消えている」という出来事を経験しましたので、モジュール化について考え直し、この記事を書き換えました。
フローを安全に保つには
モジュール化すべきか
フローを高水準なプログラミング言語と捉える場合、フローやサブフローを適宜分割するのは自然ですが、Power Automate Desktopにはバックアップや版管理の機能がないため、注意が必要です。
分割には、次のトレードオフがあります。
- フロー数またはサブフロー数が増えるとバックアップが大変
- 同じ処理が2箇所に書いてあると維持しにくい
前者のデメリットが大きいので、フロー数とサブフロー数は極力減らし、独立性の高い共通処理のみをサブフロー化する方針が妥当だと考えます。
例を挙げます。
業務でユーザAとユーザBが同一サイトにアクセスし、ほぼ同型の処理をして帳票Xと帳票Yをダウンロードする
ものとします。このケースで、フロー数とサブフロー数を減らす場合は、次の様にフローを作ります。
- フローCを設け、ユーザAもユーザBも、そのフローを使う。
- 帳票Xの処理と帳票Yの処理は、帳票毎にサブフローを設けるのではなく、Mainの中に直接に書いてしまう。(せめて読みやすさのために、各帳票のステップ群をリージョンで囲んでおく)
- ユーザAとユーザBで処理が異なる箇所については、If-Else If-Else構造を使う。(プログラム構造としては悪いスイッチングだがPower Automateでは止むを得ない)
- 帳票間で共通な「ダウンロード処理」ついては、サブフロー「DoDownload」を設ける。 (ダウンロード処理はWindowsかブラウザの更新で変わる可能性があので、さすがにこれは括りだしておく)
フロー保守の方法
Power Automate Desktopが使う場所
Power Automate for Desktop(無償版)の場合、フローは個人用OneDriveの中にあります。
私の観察ではPower Automateは次のフォルダを使っているようです。
- C:\Users\ユーザ名\OneDrive\アプリ\Power Automate Desktop For Windows(OneDriveはローカル側でのパスで表記)
- C:\Users\ユーザ名\AppData\Local\Microsoft\Power Automate Desktop(C:ドライブ内のWindowsユーザ毎の場所です)
両者は(Windowsユーザから見ると)勝手に変化しています。従って整合がとれた状態をPower Automate外で作ることはできません。エクスプローラでフォルダーのコピーを作っても、物理的なバックアップにはならないと考えます。
サブフロー単位のバックアップ
サブフローの中身を文字列として取り出し、テキストファイルに保存することが可能です。サブフロー毎にコピー&貼り付けを行うので煩雑ですが、フロー数とサブロー数が少なければ可能な範囲です。
新しくフローを作成し、保存済のテキストをサブフローに貼り付けることによってフローが再現できる点は、体験済みです。
版管理
Power Automateには版管理の機能がないので、代替手段を考えます。代替手段のアイデアは2つあります。
- フローのコピーを作りフロー名を「フロー名_YYYYMMDD」に変更し、2世代程度古くなったら削除する。
- 前述したサブフロー単位のテキストファイルを、適当なツールで世代管理する。(例えば、VisualStudioでフロー単位にソリューションを作り、サブフローのテキストをgetで管理する)