Power Automateで作成したフローの条件分岐が、ある日突然正しく動作しなくなったという経験はありませんか。特に長期間安定して動いていたフローで発生すると、システムの不具合か、自分の設定ミスか、原因の特定に苦労します。こうしたトラブルの多くは、フローの実行時に入力される値の変化や、条件式の記述方法が原因です。本記事では、条件分岐が動かなくなったときの原因の切り分け方と、具体的な修正手順を解説します。最後まで読んでいただければ、フローを再び正しく動作させられるはずです。
【要点】この記事で確認すること
- 最初に見る場所: フローの実行履歴にあるConditionアクションの「入力」タブ。ここで実際に評価された値が確認できます。
- 切り分けの軸: 入力値の変化(nullや型違い)、条件式の誤り(関数の使い間違い、大文字小文字)、Power Automate側の仕様変更の3つです。
- 注意点: フローを編集する前に必ず実行履歴を確認してください。原因を特定せずに修正すると、別の部分で思わぬ副作用が発生します。
ADVERTISEMENT
原因を切り分ける3つの視点
条件分岐が動かないと聞くと、まず条件式のミスを疑う方が多いのですが、実際には入力値の変化が原因であるケースが大半です。以下の3つの視点で原因を切り分けてください。
視点1:入力値が想定と異なっていないか
フローが長期間正常に動作している間に、データソースの内容が変わっている可能性があります。例えば、扱っている列のデータ型が文字列から数値に変わっていたり、必須だった項目が空欄になったり、日付の書式が変わったりします。こうした変化に条件分岐が対応できず、突然動かなくなるのです。
視点2:条件式の記述に誤りがないか
条件式は静的に見えますが、実際は動的な式です。特にデータ型の不一致(文字列と数値の比較、日付と文字列の比較)や、大文字小文字の区別、不要な空白の混入などがトラブルの原因になります。式ビルダーで正しく見えても、実行時には異なる評価をされることがあります。
視点3:Power Automate側の変更やテナント設定の変更
Microsoft側の仕様変更や、利用しているコネクタのバージョンアップ、テナント全体の設定変更(データ損失防止ポリシーなど)が影響する場合もあります。また、使用しているライセンスが変更された場合も、コネクタの制限が変わることがあります。ただし、このケースは稀で、多くの場合はまず入力値と条件式を確認するのが効率的です。
実行履歴で具体的な値を確認する手順
原因を特定するためには、実際にフローを実行し、条件分岐に渡された入力値を確認するのが最も確実です。以下の手順で確認してください。
- Power Automateのポータル(https://make.powerautomate.com)にサインインします。
- 左側のメニューから「マイ フロー」をクリックし、問題のフローを選択します。
- フローの詳細画面で、「実行履歴」タブをクリックします。
- 条件分岐が正しく動かなかった実行(通常は失敗または予期しない結果のもの)を選択します。
- 実行詳細画面で、アクションの一覧から「Condition」アクションを見つけ、クリックします。
- 開いたパネルで「入力」タブを選択します。ここに条件式で使用された実際の値が表示されます。
入力タブには、条件式の左辺と右辺、または式全体の評価結果が出力されています。例えば「@equals(triggerOutputs()?[‘body/value’], ‘ABC’)」という条件なら、左辺の実際の値と右辺の値が表示されます。この値が想定と違う場合、入力値が原因と判断できます。
入力値の確認ポイント
- nullや空文字になっていないか:データソース側で値が欠落していないか確認します。特に、存在しないプロパティにアクセスするとnullになります。
- データ型が一致しているか:例えば、数値として扱いたい値が文字列(“123”)になっている場合、条件式が意図通りに評価されません。数値比較の場合はint()関数で変換します。
- 大文字小文字や空白が影響していないか:文字列比較では大文字小文字を区別するため、equals関数を使う場合は注意が必要です。また、値の前後に改行やスペースが含まれていると一致しません。
条件分岐の直し方:具体的な修正例
原因が特定できたら、以下の方法で条件分岐を修正します。代表的なシナリオ別に説明します。
シナリオ1:入力値がnullになる場合
トリガーや前のアクションから取得した値がnullになることがあります。そのまま条件式に渡すと、equals関数などでfalseになります。対策として、coalesce関数でデフォルト値を設定します。
修正前の条件式:@equals(triggerOutputs()?['body/value'], '発注')
修正後の条件式:@equals(coalesce(triggerOutputs()?['body/value'], ''), '発注')
これで、値がnullの場合は空文字として比較されます。状況に応じてデフォルト値を変更してください。
シナリオ2:データ型が文字列と数値で不一致
例えば、Excelの行番号やIDが数値として正しく取得できず、文字列として扱われる場合があります。数値の大小比較をする条件では、int()関数で変換します。
修正前の条件式:@greaterOrEquals(triggerOutputs()?['body/amount'], 1000)
修正後の条件式:@greaterOrEquals(int(triggerOutputs()?['body/amount']), 1000)
int関数で文字列を数値に変換してから比較します。float関数を使うケースもあります。
シナリオ3:条件が複雑で意図しない評価になる場合
複数の条件をANDやORで結合していると、評価順序や括弧の付け忘れで問題が発生します。また、contains関数は部分一致でtrueを返すため、厳密に一致させたい場合はequalsを使います。
修正前の条件式:@or(equals(status, '完了'), equals(status, '処理中'))
修正後の条件式(括弧を明示):@or(equals(triggerOutputs()?['body/status'], '完了'), equals(triggerOutputs()?['body/status'], '処理中'))
関数の引数を省略しすぎないように注意しましょう。
失敗パターンと対処法の比較表
| 症状 | 原因 | 確認場所 | 対処方法 |
|---|---|---|---|
| 条件が常にTrueになる | 入力値が常に同じ値をとる、または条件式に論理的なミス(例:1=1) | 実行履歴のCondition入力 | 条件式を書き直し、デバッグ用の値を出力するステップを追加する |
| 条件が常にFalseになる | 入力値がnull、データ型不一致、大文字小文字不一致 | 実行履歴のCondition入力、データソース | coalesceやint関数で変換、equalsを大文字小文字を区別しない場合に備える |
| 条件の片方だけ誤動作する | 分岐の式のコピーミス、片方の条件だけ更新漏れ | フローのデザイナーで各条件の式を比較 | 両方の条件式を統一し、変数を使うなどして管理する |
| フロー自体がエラーになる | 条件式内の関数の引数が不正、存在しないプロパティへのアクセス | 実行履歴のエラーメッセージ | 式内のプロパティパスを見直し、?演算子でnullチェックを行う |
管理者に確認すべきこと
自分で原因を特定できない場合や、テナント全体の設定変更が疑われる場合は、管理者に以下の点を確認してください。
- データ損失防止ポリシー(DLP)の変更:最近DLPが変更され、使用しているコネクタが制限されていないか確認します。
- コネクタの認証再設定:使用しているコネクタの認証が期限切れになっていないか、管理者に確認を依頼します。
- ライセンス変更:ユーザーのライセンスが変更され、Power Automateの機能に制限がかかっていないか確認します。
- テナント全体の更新プログラム:Microsoft 365のメッセージセンターで、Power Automateに関する変更通知がないか確認してもらいます。
よくある質問
Q1. フローを再保存したら直ったのですが、なぜですか?
Power Automateでは、フローを編集して保存すると、内部的に定義が最新の形式に更新される場合があります。ただし、根本原因が解決したわけではないため、同じ問題が再発する可能性があります。必ず実行履歴を確認し、原因を特定しておくことをおすすめします。
Q2. 条件式が正しいのに動かない場合、どうすればよいですか?
式が正しくても、入力値が思わぬ形であることが多いです。まず実行履歴でConditionの入力を確認し、値自体が想定通りかチェックしてください。また、式の中に動的なコンテンツを直接書かずに、一度変数に格納してから条件式で使うと、デバッグが容易になります。
Q3. 式ビルダーで確認すると値が合っているのに、フロー実行時は異なるのはなぜ?
式ビルダーは静的解析のため、実際の実行時のコンテキストが反映されません。特に、トリガーから取得する値や、ループの中のアイテム値などは、実行時まで確定しません。必ず実行履歴で実際の値を確認してください。
まとめ
Power Automateの条件分岐が突然動かなくなった場合、まずは実行履歴からConditionアクションの入力を確認し、想定外の値が入っていないかを調べてください。次に、データ型やnullの扱い、条件式の関数の使い方を見直しましょう。もし自分で解決できない場合は、管理者にテナント設定の変更がないか確認を依頼するとよいでしょう。一度原因を突き止めて修正しておけば、同じトラブルの再発を防げます。ぜひ本記事の手順を参考に、安定したフロー運用を目指してください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
