0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Power Automate のエラーハンドリングを後から追加した——「Run After」「スコープ」「設定の構成」3パターンの使い分けと落とし穴【構成v2】

0
Posted at

この記事で分かること:

  • Power Automate のエラーハンドリング 3 パターンの仕組みと使い分け
  • 後付けで入れたときにはまる設定ミスとその確認方法
  • エラー通知に含めると有用な情報と result() 関数の使い方

Power Automate のフローにエラーハンドリングを追加した。設定して安心していたら、本番で一度も発火しなかった——こういうことが繰り返し起きる。

後から入れる「Run After」「スコープ」「設定の構成(Configure Run After)」の 3 パターンには、それぞれ微妙な落とし穴がある。フローが動かなかったとき、大抵は設定自体よりも「どのトリガーに対して発火するか」の理解がずれている。

Power Automate のエラーハンドリング概要

大企業環境で Power Automate の設計に関わっていると、エラーハンドリングを「後から入れてほしい」という依頼が多い。既存のフローに後付けで追加する方法は主に 3 つある。

手法 向いている場面 主な制約
Run After(実行後) 特定のアクションに続けてエラー処理を入れる 接続が 1 対 1
スコープ + Run After 複数アクションをまとめてエラーハンドリング スコープが失敗した場合のみ発火
設定の構成(Configure Run After) フロー設計を変えずに後付けで追加 UI が分かりにくく見落としやすい

3 つとも「既存のフローに後から入れる」ことはできるが、それぞれ動作の前提が違う。

パターン 1:Run After(実行後)の基本と落とし穴

最もシンプルな方法。特定のアクションが「失敗した場合」に続くアクションを追加する。

設定方法:

  1. 失敗後に実行したいアクション(例:メール送信)を追加する
  2. そのアクションの「...」メニュー → 「実行後の設定」を開く
  3. 「成功した場合」のチェックを外し、「失敗した場合」にチェックを入れる

落とし穴:デフォルトは「成功した場合のみ実行」になっているため、チェックを切り替えないと失敗時に無視される。さらに、「失敗した場合」だけを選ぶとタイムアウト・スキップされた場合には発火しない。タイムアウトや Skipped も拾いたい場合は全チェックを入れる必要がある。

実際に多いのは「失敗した場合」だけにチェックを入れているのに、アクションがタイムアウト(TimedOut)で終わっていて通知が来なかったケース。

確認ポイント:
- [ ] 「失敗した場合」がチェック済みか
- [ ] タイムアウト・スキップも拾うか確認したか
- [ ] 「成功した場合」のチェックを外したか(外さないと成功時にも実行される)

パターン 2:スコープ + Run After(複数アクションをまとめる)

複数のアクションに対して 1 つのエラーハンドリングを当てたいとき、スコープを使う。

[スコープ(データ取得と変換)]
  └── [SharePoint からリスト取得]
  └── [Apply to each]
  └── [Compose で変換]
    ↓ (スコープが「失敗した場合」に実行)
[メール通知:エラーが発生しました]

スコープ内のどれか 1 つが失敗すれば、スコープ全体が Failed になり、続くエラー通知が発火する。

落とし穴:スコープ内のアクションにそれぞれ個別の「失敗した場合」ハンドラを入れると、内側でエラーが処理済みになってしまい、スコープ自体は成功扱いになることがある。内側で拾って「Continue」にしていると外側のスコープエラーが発火しない。

悪い例:スコープ内で個別に拾って続行させる
[スコープ]
  └── [HTTPアクション]
        ↓ (失敗した場合に実行)
        └── [変数:エラーフラグを true に設定] ← 「続行」で次に進む
  └── [次のアクション]  ← スコープとしては成功扱いになる

良い例:スコープ内では拾わず、スコープ外でまとめて処理する
[スコープ]
  └── [HTTPアクション]  ← エラーハンドラなし
  └── [次のアクション]
    ↓ (スコープが失敗した場合)
[メール通知]

確認ポイント:スコープ内のアクションに個別の「Run After 失敗」ハンドラを入れていないか確認する。入れる場合は「Terminate(終了)」を使い、スコープを意図的に失敗させる設計にする。

パターン 3:設定の構成(Configure Run After)の使い方

既存フローの任意の 2 アクション間に後付けでエラー処理を挟みたいとき、「設定の構成」を使う。これが 3 つの中で最も UI が分かりにくい。

設定方法:

  1. エラー処理を追加したいアクションの「...」メニューを開く
  2. 「実行後の設定」(または「Configure run after」)を選ぶ
  3. このアクションが「実行される条件」を選ぶ(どの前のアクションの、どの状態を受けて実行するか)

落とし穴 1:どのアクションの「後」に実行するかの選択が直感的でない。前のアクションが複数ある場合、どれに対して条件を設定しているかが分かりにくい。

落とし穴 2:並列ブランチの中のアクションに設定すると、ブランチ全体の成否ではなく個別アクションの成否で発火する。並列ブランチ全体が終わってからエラーを拾いたい場合は、ブランチの外に出す必要がある。

落とし穴 3:フローをコピーした場合、「設定の構成」の条件がリセットされることがある。コピー後に必ず確認する。

本番前の確認チェックリスト

エラーハンドリングを追加したら、本番に入れる前に以下を確認する:

1. 意図的にエラーを発生させて動作確認したか
   → テスト環境で「存在しないファイルを参照する」などで失敗させる

2. タイムアウト・スキップも拾うか確認したか
   → Run After の設定で全状態をチェックしたか

3. スコープ内に個別ハンドラを入れていないか
   → 入れる場合は Terminate でスコープを失敗にしているか

4. 通知先(メール・Teams)のアドレスが正しいか
   → 特に「サービスアカウントのメール」は転送設定を確認

5. フローをコピーした場合、Run After の設定がリセットされていないか

この確認をせずに本番投入して、エラーが 2 週間気づかれなかったケースを複数回見てきた。設定自体は 10 分でできるが、動作確認を省くと意味がない。

エラー情報をどう通知に含めるか

エラーが発火したとき、何が起きたかの情報を通知に含めないと、ログを掘りに行くだけで時間がかかる。最低限含めると有用な情報:

- フロー名:@{workflow().name}
- 実行 ID:@{workflow().run.name}
- 失敗したアクション:result() 関数で取得
- タイムスタンプ:@{utcNow()}
- 入力値(個人情報に注意)

result() 関数はスコープや特定のアクションの実行結果(成功・失敗・エラーメッセージ)を返す。スコープと組み合わせると、スコープ内のどのアクションが失敗したかまで追える。

Teams 通知のサンプル本文:
フロー名:@{workflow().name}
実行 ID:@{workflow().run.name}
失敗時刻(UTC):@{utcNow()}
エラー内容:@{result('問題のアクション名')?[0]?['error']?['message']}

まとめ

パターン 使い場面 主な落とし穴
Run After 1 アクションの後に直接入れる タイムアウト・スキップの見落とし
スコープ + Run After 複数アクションをまとめて管理 内側でハンドルすると外側が発火しない
設定の構成 後付けで既存フローに追加 コピー時にリセット・並列の扱い

どの方法を使っても、設定後に意図的にエラーを起こして動作確認するまで「入れた」と言わない——これを守るだけで、気づかないまま続く失敗はかなり減る。

Power Automate のエラーハンドリング、入れてあるのに一度も発火しなかった経験がある方、どのパターンでしたか?

参考:Power Automateシリーズ記事 https://note.com/light_tern636/n/nd807b5f274ee

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?