Power Automateでエラーの内容を伝える為に、エラーの内容を取得するには?どう説明したら良い?

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:エラーを捕捉する「スコープ」アクションの追加

エラーを監視したい一連のアクションを「スコープ」で囲みます。

  1. Power Automateのフローデザイナーで、監視したいアクション群の前に「新しいステップ」を追加します。
  2. 検索ボックスに「スコープ」と入力し、「スコープ」アクションを選択します。
  3. このスコープの中に、エラーが発生する可能性のある既存のアクションをすべてドラッグ&ドロップで移動させます。

例:スコープ内に「SharePointのアイテムを更新します」アクションを入れる。


ステップ2:エラー発生時に実行される「エラーハンドリング」スコープの追加

エラーが起きた場合にのみ動作する「エラーハンドリング」用のスコープを作成します。

  1. 先ほど追加した「スコープ」アクション(エラー監視対象)のすぐ下に「新しいステップ」を追加します。
  2. 再び「スコープ」アクションを追加します。このスコープの名前を「エラーハンドリング」など、分かりやすいものに変更します。
  3. この「エラーハンドリング」スコープの「構成:実行条件」を変更します。

「エラーハンドリング」スコープの右上にある「」(その他のコマンド)をクリックし、「構成:実行条件」を選択します。

デフォルトでは「前のステップが成功した場合」にチェックが入っています。これを解除し、「前のステップが失敗した場合」にチェックを入れます。

「完了」をクリックします。

これで、「エラーハンドリング」スコープは、直前の「スコープ」(エラー監視対象)が失敗した場合にのみ実行されるようになります。


ステップ3:エラー詳細を取得するアクションの追加(「エラーハンドリング」スコープ内)

エラーハンドリングスコープの中に、エラー情報を取得するアクションを追加します。

  1. 「エラーハンドリング」スコープの中にある「アクションの追加」をクリックします。
  2. 検索ボックスに「作成」と入力し、「作成」(Compose)アクションを選択します。このアクションは、任意のデータを出力として保持するのに便利です。
  3. 「入力」フィールドにカーソルを置き、「」タブを選択します。
  4. 以下の式を入力して、「OK」をクリックします。この式は、直前のスコープで失敗したすべてのアクションの結果を取得します。
    result('スコープ') 
    
    • スコープの部分は、ステップ1で作成したエラー監視対象のスコープの名前(通常はデフォルト名か、あなたが変更したもの)に置き換えてください。正確な名前はフローデザイナー上で確認できます。
  5. もう一つ「作成」アクションを追加し、今度はエラーメッセージの本文を抽出します。
    • 「入力」フィールドにカーソルを置き、「」タブを選択します。
    • 以下のような式を入力します。これは、失敗したアクションの中から最初のエラーメッセージを取得する一般的な方法です。
    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に投稿します。

  1. エラー詳細を取得した「作成」アクション(エラーメッセージの本文を抽出した方)の下に「新しいステップ」を追加します。
  2. 検索ボックスに「Teams」と入力し、「チャットまたはチャネルでメッセージを投稿する」アクションを選択します。
  3. アクションを設定します。
    • 「投稿者」: 「Flow bot」を選択します。
    • 「投稿先」: 「チャネル」を選択し、ITサポートや運用担当者が確認するチャネル(例: 「システムアラート」)を選択します。
    • 「メッセージ」: エラー内容を分かりやすく記述し、先ほど取得したエラー詳細を動的なコンテンツとして挿入します。
    • メッセージ入力例:
      【Power Automate フロー実行エラー発生】
      
      フロー名: [あなたのフロー名]
      環境: [あなたの環境名]
      
      以下の処理中にエラーが発生しました。早急にご確認ください。
      
      --- エラー詳細 ---
      発生したアクション: [動的なコンテンツから「作成」(result('スコープ')の方)の「displayName」を選択 - これは失敗したアクションの名前]
      エラーメッセージ: [エラーメッセージの本文を抽出した「作成」アクションの出力] 
      -------------------
      
      フロー実行履歴の確認: [動的なコンテンツから「フローの実行URL」を選択]
      
    • ポイント: 「フローの実行URL」は、通常、Power Automateのトリガーの動的なコンテンツとして利用可能です。これをメッセージに含めることで、Teamsから直接エラーが発生したフローの実行履歴に飛んで詳細を確認できます。

 

ステップ5:フローを保存してテストする

  1. 画面右上の「保存」ボタンをクリックします。
  2. テスト」ボタンをクリックし、「手動」を選択してテストを開始します。
  3. スコープ内のアクション(例:「SharePointのアイテムを更新します」)が意図的に失敗するように、設定を一時的に変更してみます。(例:存在しないアイテムIDを指定する、存在しないサイトアドレスを指定するなど)。
  4. フローを実行し、エラーハンドリングスコープが動作し、Teamsにエラー通知が届くか確認します。
  5. テストが完了したら、意図的に失敗させた設定を元に戻し、フローを正常な状態に戻しましょう。

 

エラーハンドリングをさらに堅牢にするための考慮事項

上記は基本的なエラーハンドリングですが、さらに高度な運用を目指す場合、以下の点を考慮すると良いでしょう。

  • 「try-catch-finally」構造の実現:
    • Tryブロック: 通常の処理(スコープアクション)。
    • Catchブロック: エラーハンドリング(「前のステップが失敗した場合」に実行されるスコープアクション)。
    • Finallyブロック: 成功・失敗にかかわらず常に実行される処理(例:フロー実行ログの記録、リソースの解放など)。これは「前のステップが成功した場合 または 前のステップが失敗した場合」という実行条件を設定したスコープで実現できます。
  • エラータイプによる分岐:
    • 取得したエラーメッセージの内容やHTTPステータスコードによって、通知先や再試行の有無を変えるなど、より詳細な分岐を設定できます。
  • カスタムログの記録:
    • エラー情報をTeams通知だけでなく、SharePointリストやAzure Log Analyticsなどの専用のログ記録場所に自動で保存することで、エラー発生履歴の長期的な追跡と分析が可能になります。
  • 再試行ポリシーの活用:
    • 一時的なネットワーク遅延やAPI制限によるエラーの場合は、アクションの「設定」で「再試行ポリシー」を設定し、数秒間隔で数回再試行するようにすることで、フローが自動で復旧する可能性を高められます。
  • 「スコープ」と「Terminate」アクションの活用:
    • 致命的なエラーが発生した場合に、フローを強制的に停止させるために「Terminate」(フローを終了する)アクションを使用できます。エラーハンドリングスコープ内でこのアクションを「失敗」ステータスで設定することで、フローの実行履歴に「失敗」が記録されます。
  • アクション名の一意性:
    • result('スコープ') のようにアクション名を指定する場合、アクション名が一意であることを確認してください。デフォルトのアクション名は 作成 のように重複することがあるため、自分で分かりやすい名前に変更することをお勧めします。

 

まとめ

Power Automateでフローを構築する際、エラーハンドリングは単なるオプションではなく、フローを本番運用する上で不可欠な要素です。エラー発生時に何が起きたかを正確に把握し、適切な担当者にタイムリーに通知する仕組みを整えることで、トラブル解決までの時間を大幅に短縮し、業務への影響を最小限に抑えることができます。

今回解説した方法を参考に、ぜひあなたのPower Automateフローに実行時エラーの内容を取得・通知する仕組みを組み込み、より堅牢で信頼性の高い自動化運用を実現してください。