Power Automate Desktop開発の思想と実装方法

# 概要
Power Automate Desktopで開発をする際の重要な考え方や具体的な実装方法、考慮すべき点を記してあります。※基本的な操作の説明は割愛しています。

# 環境構築
Microsoft Power Automate for Desktopは、ワーク フローを自動化するツールである Microsoft Power Automate の一機能です。デスクトップ操作を自動化するための機能を持ち、Windows 10 および Windows 11 ユーザーであれば、無償で利用することができます。

- Windows 10の場合、Microsoft Storeで「Power Automate」と検索、もしくはMicrosoftの[Power Automate インストーラー サイト](https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/install#install-power-automate-using-the-msi-installer) にアクセスし、ダウンロードおよびインストーラーの.exeファイルを実行
- Windows 11の場、初期状態でインストールされている

# 変数
RPAに限った話ではなく、プログラミング共通で変数の命名規則は重要な要素です。

参考記事
[わかりやすい変数の命名規則、良い例と悪い例](https://www.widesoft.co.jp/technology/12190) 

Power Automate Desktopは変数で％表記を使用します。アンダーバーやハイフン記号を含むsnake_caseやkebab-caseは可読性を低下させてしまう可能性があるので、camelCaseもしくはPascalCaseを使用するようにしましょう。

参考記事
[変数と%表記を使用する - Power Automate | Microsoft Learn](https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/variable-manipulation)
[命名規則：キャメルケース、パスカルケース、スネークケース、ケバブケースについて](https://qiita.com/shota0616/items/4ac7a8696b3f6ccbe2bc)

# コメント
作成したフローは、他人から見ると「このフローって何をしているのか？」と思われ難解な構造になっている場合があります。
作成者本人でさえ、少し時間が経つと忘れてしまうので、コメントを追加しましょう。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/acbc108e-d4a8-29e4-96d4-39d3f2e9804d.png">


表示できるコメントが4行までなので、フローの全体概要や目的・一連の処理の流れを説明したい場合は、最初のアクションで以下のように記述します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/a1e739d9-a4de-c60b-5f2c-3ea549c87361.png">
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/1ff2c736-4aab-fe52-1745-bcd7b68fd5b8.png">


また、複雑なロジック処理を組み込む場合は、この処理を何故しているのか・この処理で何をしているのか、等をコメントで説明しましょう。
ただし、初心者の自覚があるうちはコメントで補足するより、上級者を頼ってリファクタリングを試みるのが吉です。

参考記事
[【動画付き・初心者向け】コメントにはWHYを書こう～不要なコメントと必要なコメントの違いについて | Qiita](https://qiita.com/jnchito/items/f0d90af4ed44b7484103)

# リージョン
［リージョン］アクションは、コメントと異なり色がついて視覚的に分かりやすいうえ、開始と終了も明確です。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/d439f373-03e6-0cd1-2d00-8b36ec2bb4b9.png">

折りたたみも可能。縦に長くなってしまったフローもこのようにすることで可視性を向上させることができます。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/04249da8-8c7c-e5a4-cb29-1df040c6069c.png">

# フローの共有
無償版の場合、コピー＆ペーストでフローを共有します。
[Power Automate Desktop コピー＆ペーストで共有する方法](https://www.a-c-japan.com/solution/rpa/power-automate-flow-copy/)

参考記事
[デスクトップフローの共有/エクスポート - Power Automate | Microsoft Learn](https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/how-to/share-export-desktop-flows)

# バージョン管理
個人開発を目的とした製品になっており、個人管理が基本的な考え方です。
フローのアクション全体をコピーし、テキスト(.txt)としてOneDriveやSharePointに保存してバージョン管理していく方法があります。

# サブフローと部品化
共通処理は「サブフロー」もしくは［Desktopフローを実行］アクションを使用して部品化して、可読性および保守性を担保します。
主に以下のように使い分ける。
| アクション | 説明 |
|--------------------|---------------------------------------------------------------|
| サブフロー | 1つのフロー内で複数回にわたって使用する一連のフローを再利用する場合 |
| Desktopフローを実行 | 既に保存されているフローを再利用する場合 |


また、アクションを追加しまくっているとフローデザイナーのアクションが縦に長く連なって見づらくなり可読性を低下させます。<br>そのような場合、業務シナリオごとにサブフローとして処理を分割することで、冗長なフローを回避し保守性を高めます。

例：Mainフローに共通処理を集約し、サブフローに各業務シナリオを分割する。

参考記事
[Power Automate Desktop のフロー部品化について考える | Qiita](https://qiita.com/K2_kzy/items/1d5bb4da5e1f842b8f6a)
[Power Automate Desktop のフローを見やすくする ～サブフローのメリット～](https://www.teijitaisya.com/pad-subflow-comment/#index_id1)

# ログ出力
ログ出力の基本と設計指針については以下記事を参考。
[今さら聞けないログの基本と設計指針 | Qiita](https://qiita.com/tadashiro_ninomiya/items/19c774898c68add6185e)

例：Excelファイルにログ出力する場合

1. まず、ログ出力の専用フローを作成する。ログ項目を入力変数として設定し、［Excelワークシートに書き込む］アクションでExcelにログを出力する<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/71de709f-f93f-00fa-7e44-c3ca2d998c9c.png">

1. 次に、ログ出力フローを呼び出すフローを作成する。［Desktopフローを実行］アクションを選択し、ログ項目の値を入力変数に渡す<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/36108624-1f51-b89d-217a-a95e4a44c6fd.png"><img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/f5f71070-c40d-bb9b-d7bb-6e34f4b39cb6.png">

1. このように設定することで、必要な場面に応じてログ出力を何度でも実行できる<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/4f2aa07c-a9de-478c-6c0d-930e24947daa.png">


# 例外処理
通常、エラーが発生すると、その時点でフローが異常終了します。ただ、異常終了するだけで良ければ、あえて対処する必要はないが、「異常終了させずに後続の処理を継続したい」「異常終了した記録を残す」といったアクションをしたい場合は例外処理が必要になります。

エラー処理は個々のアクションに設定する場合と複数のアクションに設定する場合があり、基本的には後者の方法で設定し、それでも足りないものを個々のアクションで設定することを推奨します。

例：複数のアクションにまとめて設定
［ブロック エラー発生時］アクションを選択する。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/652a462e-3b5a-c1ab-487e-9fa2cf930765.png">

デフォルトだと［スローエラー］に設定されているが、スローエラーだと異常終了でフローが終了してしまうので、［フロー実行を続行する］に変更する。［＋新しいルール］からサブフローの実行や変数は適宜設定する。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/157755dc-b185-0a58-b09a-31ff83198b43.png">

今回は、エラー発生時にログ出力を実行するサブフローを呼び出したいので、サブフローの実行を設定する。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/6e19706b-2f6f-a5bd-6e51-77b461fad675.png">

ログ出力後のアクションは、以下の例外処理モードから適宜設定する。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/d5c8a347-88a7-cb0d-894b-17f59a1f3c7d.png">

参考記事
[Power Automate Desktop 例外処理](https://blog-tips.sekenkodqx.jp/2021/06/09/power-automate-desktop-exception-catch/)
[Power Automate Desktopでエラーをうまく扱う方法](https://analytic-vba.com/rpa/tricks-power-automate-desktop/error-handle/)

# Power Automate Desktop開発のレビュー観点
業務的な観点と技術的な観点の両方を考慮し、フローが要件に適合し、適切な品質を満たしていることを確認しましょう。
**業務的な観点**
・業務仕様に合致している

**技術的な観点**
・変数名等、命名規則に忠実である
・複雑なロジックは適切にコメントを記述する
・共通ロジックはサブフローとして切り出す
・長すぎるフローはサブフロー等で分割する
・異常系が考慮されている
・意図した想定通りの挙動を示す