Power Automateでエラーの内容を伝える為に、エラーの内容を取得するには?どう説明したら良い?
Power Automate(パワー・オートメイト)で業務を自動化していると、予期せぬエラーが発生することは避けられません。ネットワークの問題、連携先サービスの障害、データの不整合、APIの制限超過など、様々な要因でフローが失敗する可能性があります。
エラーが発生した際に、「フローが失敗しました」という通知だけでは、何が起きたのか、どう修正すればよいのかを特定するのが困難です。そこで重要になるのが、実行時エラーの詳細な内容を自動で取得し、適切な担当者に通知したり、ログとして記録したりする「エラーハンドリング」です。
実行時エラーの内容を取得する基本的な考え方
Power Automateでエラー情報を取得する上で最も重要なのは、「構成:実行条件」の設定と「try-catch」に似た構造です。
「構成:実行条件」でエラー時のアクションを定義する
- Power Automateの各アクションには「構成:実行条件」という設定があります。通常、アクションは「前のステップが成功した場合」に実行されます。
- しかし、これを「前のステップが失敗した場合」や「前のステップがスキップされた場合」にも実行されるように変更することで、エラー発生時のみに動作する特定のアクション(例:エラー通知メールを送信するアクション)を設定できます。
「try-catch」に似た構造でエラーを捕捉する
- プログラミングのtry-catchブロックのように、特定の処理ブロック全体でエラーを捕捉し、エラー時に別の処理を実行する、という構造をPower Automateで実現できます。
- これには「スコープ」アクションが非常に役立ちます。
result() 関数と runAfter プロパティを活用する
エラーの詳細情報を取得するには、フローの実行結果を返す result() 関数や、特定のアクションが成功したか失敗したかを判定する runAfter プロパティ(これが「構成:実行条件」の背後にある技術です)を理解しておくことが重要です。
実行時エラーの内容を取得する具体的な方法
ここでは、フロー内でエラーが発生した場合に、そのエラー詳細を取得し、Teamsに通知するフローを例に解説します。
シナリオ:特定の処理が失敗したら、エラー詳細をTeamsチャネルに通知する
このフローは、例えば「SharePointリストのアイテムを更新する」というアクションが何らかの原因で失敗した場合に、その失敗内容(エラーメッセージ、失敗したアクション名など)を取得し、TeamsのITサポートチャネルに自動で通知する、というシナリオです。
ステップ1:エラーを捕捉する「スコープ」アクションの追加
エラーを監視したい一連のアクションを「スコープ」で囲みます。
- Power Automateのフローデザイナーで、監視したいアクション群の前に「新しいステップ」を追加します。
- 検索ボックスに「スコープ」と入力し、「スコープ」アクションを選択します。
- このスコープの中に、エラーが発生する可能性のある既存のアクションをすべてドラッグ&ドロップで移動させます。
例:スコープ内に「SharePointのアイテムを更新します」アクションを入れる。
ステップ2:エラー発生時に実行される「エラーハンドリング」スコープの追加
エラーが起きた場合にのみ動作する「エラーハンドリング」用のスコープを作成します。
- 先ほど追加した「スコープ」アクション(エラー監視対象)のすぐ下に「新しいステップ」を追加します。
- 再び「スコープ」アクションを追加します。このスコープの名前を「エラーハンドリング」など、分かりやすいものに変更します。
- この「エラーハンドリング」スコープの「構成:実行条件」を変更します。
「エラーハンドリング」スコープの右上にある「…」(その他のコマンド)をクリックし、「構成:実行条件」を選択します。
デフォルトでは「前のステップが成功した場合」にチェックが入っています。これを解除し、「前のステップが失敗した場合」にチェックを入れます。
「完了」をクリックします。
これで、「エラーハンドリング」スコープは、直前の「スコープ」(エラー監視対象)が失敗した場合にのみ実行されるようになります。
ステップ3:エラー詳細を取得するアクションの追加(「エラーハンドリング」スコープ内)
エラーハンドリングスコープの中に、エラー情報を取得するアクションを追加します。
- 「エラーハンドリング」スコープの中にある「アクションの追加」をクリックします。
- 検索ボックスに「作成」と入力し、「作成」(Compose)アクションを選択します。このアクションは、任意のデータを出力として保持するのに便利です。
- 「入力」フィールドにカーソルを置き、「式」タブを選択します。
- 以下の式を入力して、「OK」をクリックします。この式は、直前のスコープで失敗したすべてのアクションの結果を取得します。
result('スコープ')スコープの部分は、ステップ1で作成したエラー監視対象のスコープの名前(通常はデフォルト名か、あなたが変更したもの)に置き換えてください。正確な名前はフローデザイナー上で確認できます。
- もう一つ「作成」アクションを追加し、今度はエラーメッセージの本文を抽出します。
- 「入力」フィールドにカーソルを置き、「式」タブを選択します。
- 以下のような式を入力します。これは、失敗したアクションの中から最初のエラーメッセージを取得する一般的な方法です。
first(body('作成')?['errors'])?['message']body('作成')の'作成'部分は、直前のresult('スコープ')を出力している「作成」アクションの名前(通常は作成または作成_2など)に置き換えてください。- より詳細なエラー情報を取得する式(高度な例)
- 失敗したアクションの名前とメッセージをリストアップしたい場合:
join( applyToEach( filter(result('スコープ'), item()?['status'] == 'Failed'), concat(item()?['displayName'], ': ', item()?['error']?['message']) ), decodeUriComponent('%0A') )decodeUriComponent('%0A')は改行コードです。これにより、複数のエラーがある場合にそれぞれのエラーメッセージが改行されて表示されます。
- 失敗したアクションの名前とメッセージをリストアップしたい場合:
ステップ4:エラー詳細をTeamsに通知するアクションの追加
取得したエラー情報をTeamsに投稿します。
- エラー詳細を取得した「作成」アクション(エラーメッセージの本文を抽出した方)の下に「新しいステップ」を追加します。
- 検索ボックスに「Teams」と入力し、「チャットまたはチャネルでメッセージを投稿する」アクションを選択します。
- アクションを設定します。
- 「投稿者」: 「Flow bot」を選択します。
- 「投稿先」: 「チャネル」を選択し、ITサポートや運用担当者が確認するチャネル(例: 「システムアラート」)を選択します。
- 「メッセージ」: エラー内容を分かりやすく記述し、先ほど取得したエラー詳細を動的なコンテンツとして挿入します。
- メッセージ入力例:
【Power Automate フロー実行エラー発生】 フロー名: [あなたのフロー名] 環境: [あなたの環境名] 以下の処理中にエラーが発生しました。早急にご確認ください。 --- エラー詳細 --- 発生したアクション: [動的なコンテンツから「作成」(result('スコープ')の方)の「displayName」を選択 - これは失敗したアクションの名前] エラーメッセージ: [エラーメッセージの本文を抽出した「作成」アクションの出力] ------------------- フロー実行履歴の確認: [動的なコンテンツから「フローの実行URL」を選択] - ポイント: 「フローの実行URL」は、通常、Power Automateのトリガーの動的なコンテンツとして利用可能です。これをメッセージに含めることで、Teamsから直接エラーが発生したフローの実行履歴に飛んで詳細を確認できます。
ステップ5:フローを保存してテストする
- 画面右上の「保存」ボタンをクリックします。
- 「テスト」ボタンをクリックし、「手動」を選択してテストを開始します。
- スコープ内のアクション(例:「SharePointのアイテムを更新します」)が意図的に失敗するように、設定を一時的に変更してみます。(例:存在しないアイテムIDを指定する、存在しないサイトアドレスを指定するなど)。
- フローを実行し、エラーハンドリングスコープが動作し、Teamsにエラー通知が届くか確認します。
- テストが完了したら、意図的に失敗させた設定を元に戻し、フローを正常な状態に戻しましょう。
エラーハンドリングをさらに堅牢にするための考慮事項
上記は基本的なエラーハンドリングですが、さらに高度な運用を目指す場合、以下の点を考慮すると良いでしょう。
- 「try-catch-finally」構造の実現:
- Tryブロック: 通常の処理(スコープアクション)。
- Catchブロック: エラーハンドリング(「前のステップが失敗した場合」に実行されるスコープアクション)。
- Finallyブロック: 成功・失敗にかかわらず常に実行される処理(例:フロー実行ログの記録、リソースの解放など)。これは「前のステップが成功した場合 または 前のステップが失敗した場合」という実行条件を設定したスコープで実現できます。
- エラータイプによる分岐:
- 取得したエラーメッセージの内容やHTTPステータスコードによって、通知先や再試行の有無を変えるなど、より詳細な分岐を設定できます。
- カスタムログの記録:
- エラー情報をTeams通知だけでなく、SharePointリストやAzure Log Analyticsなどの専用のログ記録場所に自動で保存することで、エラー発生履歴の長期的な追跡と分析が可能になります。
- 再試行ポリシーの活用:
- 一時的なネットワーク遅延やAPI制限によるエラーの場合は、アクションの「設定」で「再試行ポリシー」を設定し、数秒間隔で数回再試行するようにすることで、フローが自動で復旧する可能性を高められます。
- 「スコープ」と「Terminate」アクションの活用:
- 致命的なエラーが発生した場合に、フローを強制的に停止させるために「Terminate」(フローを終了する)アクションを使用できます。エラーハンドリングスコープ内でこのアクションを「失敗」ステータスで設定することで、フローの実行履歴に「失敗」が記録されます。
- アクション名の一意性:
result('スコープ')のようにアクション名を指定する場合、アクション名が一意であることを確認してください。デフォルトのアクション名は作成のように重複することがあるため、自分で分かりやすい名前に変更することをお勧めします。
まとめ
Power Automateでフローを構築する際、エラーハンドリングは単なるオプションではなく、フローを本番運用する上で不可欠な要素です。エラー発生時に何が起きたかを正確に把握し、適切な担当者にタイムリーに通知する仕組みを整えることで、トラブル解決までの時間を大幅に短縮し、業務への影響を最小限に抑えることができます。
今回解説した方法を参考に、ぜひあなたのPower Automateフローに実行時エラーの内容を取得・通知する仕組みを組み込み、より堅牢で信頼性の高い自動化運用を実現してください。

