はじめに
みなさん、こんにちは!業務ハックLabのようです。
この記事は「Microsoft Power Automate Advent Calendar 2025」の12月24日担当分の記事です。
ついに最終回です!
(ここまで来られた方、お疲れ様でした!)
前回まででAI分析の核心部分が完成しましたね。
今回は、その結果を使って通知を送ったり、SharePointに記録したりする部分を作っていきます。
そして!
実際に運用する時のトラブルシューティングやベストプラクティスも解説しますよ。
(ここをちゃんと押さえておくと、「あれ?動かない!」って時にすぐ解決できます)
今回の目標
第4回では、システムを完成させて、実運用に向けた準備をします。
実装する内容:
- リスクレベルに応じた条件分岐
- 高リスク時のTeams通知
- SharePointリストへの記録
- 高リスク項目の詳細整形
- トラブルシューティング
- 運用のベストプラクティス
これで、ついにシステムが完成します!
では、最後まで行ってみましょう!
Phase 10: 条件分岐と通知
10-1. 条件の追加
まずは、「高リスクかどうか」を判定する条件分岐を作ります。
手順:
- 「+新しいステップ」をクリック
- 検索ボックスに「条件」と入力
- 「制御 – 条件」を選択
条件の設定:
| 左側 | 動的コンテンツから「overall_risk_level」を選択 |
| 演算子 | 次の値に等しい |
| 右側 | 高 |

左側の入力欄をクリックすると、動的コンテンツのパネルが出てきます。
「JSON解析_OpenAI」のところに「overall_risk_level」があるので、それをクリックしてください。
これで、「リスクレベルが”高”だったら」という条件が設定できました!
10-2. はいの場合(高リスク)- 高リスク項目の整形
まず、高リスク項目を読みやすい形に整形します。
「はいの場合」のブロックの中に、「アクションの追加」をクリックします。
手順:
- 「それぞれに適用する」を選択
- 出力元(式):
@{body('JSON解析_OpenAI')?['high_risk_items']}

「それぞれに適用する」は、配列の要素を一つずつ処理するループです。
高リスク項目が複数あった場合、それぞれに対して処理を実行します。
「それぞれに適用する」の中にアクションを追加:
- 「変数 – 文字列変数に追加」を選択
設定内容:
| 名前 | var_HighRiskText |
| 値 | 下記参照 |
値(式で組み立てる):
【カテゴリ】@{items('それぞれに適用する')?['category']}
【説明】@{items('それぞれに適用する')?['description']}
【条項】@{items('それぞれに適用する')?['clause_reference']}
【対応策】@{items('それぞれに適用する')?['recommendation']}
---
⚠️ 注意: 'それぞれに適用する' の部分は、実際のそれぞれに適用するアクションの名前に合わせてください。
これで、高リスク項目が一つずつ読みやすい形に整形されて、変数に追加されていきます!
10-3. はいの場合(高リスク)- Teams通知
それぞれに適用するの外側(下)に、Teams通知を追加します。
手順:
- それぞれに適用するの下にある「アクションの追加」をクリック
- 「Microsoft Teams – チャットまたはチャネルにメッセージを投稿する」を選択
設定内容:
| 投稿者 | フローボット |
| 投稿先 | チャネル |
| Team | 法務部のチーム(または通知先のチーム) |
| Channel | 契約審査チャネル(または通知先のチャネル) |
メッセージ内容:
ここは、動的コンテンツを組み合わせて作ります。
⚠️ 高リスクの契約書が検出されました
ファイル名: @{triggerBody()?['{FilenameWithExtension}']}
リスクスコア: @{body('JSON解析_OpenAI')?['risk_score']} 点
総合評価: @{body('JSON解析_OpenAI')?['summary']}
高リスク項目数: @{length(body('JSON解析_OpenAI')?['high_risk_items'])} 件
ファイルリンク: @{triggerBody()?['{Link}']}
※ 法務部の確認が必要です

- [ファイル名(拡張子あり)]: 動的コンテンツから「ファイル名(拡張子あり)」を選択
- [risk_score]: 動的コンテンツから「risk_score」を選択
- [summary]: 動的コンテンツから「summary」を選択
- [式]: 式タブから
length(body('JSON解析_OpenAI')?['high_risk_items'])を入力 - [リンク]: 動的コンテンツから「リンク」を選択
(Teamsに通知が飛んだ時、リンクをクリックすればすぐに契約書が開けるようになってます!便利!)
10-4. はいの場合(高リスク)- SharePoint記録
Teams通知の下に、SharePointリストへの記録を追加します。
手順:
- 「アクションの追加」をクリック
- 「SharePoint – 項目の作成」を選択
設定内容:
| サイトのアドレス | SharePointサイトを選択 |
| リスト名 | ContractRiskAnalysisResults(第1回で作成したリスト) |
リストを選択すると、フィールドの入力欄が表示されます。
フィールドの設定:
| SharePoint列 | Power Automate の値 |
|---|---|
| タイトル | 動的コンテンツ: ファイル名(拡張子あり) |
| FileName | 動的コンテンツ: 名前 |
| RiskLevel Value | 動的コンテンツ: overall_risk_level |
| RiskScore | 動的コンテンツ: risk_score |
| OverrallRating | 動的コンテンツ: summary |
| HighRiskItemDetails | 動的コンテンツ: var_HighRiskText |
| AnalysisDateTime | 式: @{utcNow()} |
| FileLinkリンク | 動的コンテンツ: アイテムへのリンク |

AnalysisDateTimeですが設定は@{utcNow()}にしていますが日本時間にしたい場合はconvertTimeZone関数を使いましょう。
はい、これで高リスクの場合の処理が完成です!
10-5. いいえの場合(中・低リスク)
「いいえの場合」のブロックには、SharePoint記録だけを追加します。
(Teams通知は不要なので)
手順:
- 「いいえの場合」の中で「アクションの追加」をクリック
- 「SharePoint – 項目の作成」を選択
- 設定内容は「はいの場合」と同じ

ただし、「高リスク項目詳細」のフィールドは空欄にしておきます。
(中・低リスクの場合は、高リスク項目がないので)
はい、これでフロー全体が完成しました!
最終テスト
さあ、完成したフローをテストしてみましょう!
テスト手順
- 「保存」をクリック
- 「テスト」をクリック
- SharePointの「契約書」ライブラリに契約書PDFをアップロード
- フローの実行を確認

確認ポイント
✅ すべてのアクションが緑のチェックマークになっているか

✅ 高リスクの場合、Teamsに通知が届いているか

✅ SharePointリストに記録されているか

すべて確認できたら、成功です!
おめでとうございます!
(ここまで来たら、もう感動ものですよね!自分で作ったAIシステムが動いてるんですから!)
トラブルシューティング
さて、ここからは実際に運用していく中で「あれ?動かない!」ってなった時の対処法を解説します。
(これ、めちゃくちゃ重要です。どんなシステムでもトラブルは起きますからね)
よくあるエラーと解決方法
エラー1: Phase 5で「InvalidContent」
症状:
{
"error": {
"code": "InvalidRequest",
"message": "The file is corrupted or format is unsupported."
}
}
原因: ファイルのエンコードに問題がある
解決策:
HTTPアクションの本文を以下に修正してください。
{
"base64Source": "@{base64(body('ファイル_コンテンツの取得'))}"
}
⚠️ ポイント: outputs() ではなく body() を使用し、?['body'] は不要です。
エラー2: Do Untilが終了しない
症状: タイムアウトエラーが発生
原因: 条件式のアクション名が一致していない
解決策:
- HTTPアクション名が
HTTP_結果取得であることを確認 - Do Untilの条件が
@{body('HTTP_結果取得')?['status']}と一致しているか確認
(アクション名、ちょっとでも違うと動かないので注意!)
エラー3: JSON解析エラー
症状: 「The execution of template action ‘JSON_の解析’ failed」
原因: スキーマと実際のデータ構造が一致しない
解決策:
- テスト実行でHTTPアクションの出力を確認
- 実際のレスポンスをコピー
- JSON解析アクションで「サンプル ペイロードを使用してスキーマを生成する」を使用してスキーマを再生成
(これ、めちゃくちゃ便利な機能なので覚えておいてください!)
エラー4: OpenAIがJSON以外を返す
症状: JSON解析でエラー、またはテキスト形式で返ってくる
原因: response_format が設定されていない
解決策:
HTTPアクション(Azure OpenAI)の本文に以下が含まれているか確認:
"response_format": { "type": "json_object" }
これがあると、JSON形式で返してくれます。
(ないと、普通の文章で返してくることがあるんですよね…)
運用のベストプラクティス
さあ、システムが完成して、トラブルシューティングも押さえました。
最後に、実際に運用する時のコツを共有します!
セキュリティ
1.APIキーの管理
現在、APIキーを変数に直接書いてますよね。
本番環境では、Azure Key Vault を使うことをおすすめします。
推奨手順:
- Azure Key Vaultにシークレットを保存
- Power Automateから「Azure Key Vault – シークレットの取得」アクションを使用
- 設定タブのセキュリティで「セキュア出力」をオンにする
- HTTPアクションもセキュリティで「セキュア入力」「セキュア出力」をオンにする
(これで、フローを共有してもAPIキーが見えなくなります!)

2. 実行履歴の確認
Power Automateの実行履歴を定期的に確認しましょう。
(どんなファイルが処理されたか、エラーは発生してないか、など)
パフォーマンス最適化
1. 並列処理
SharePointへの記録とTeams通知を並列実行すると、少し速くなります。
手順:
- Teams通知アクションの「…」をクリック
- 「並列分岐の追加」を選択
- 並列分岐にSharePoint記録を移動
(ただし、そこまで劇的に速くなるわけではないので、任意です)
2. タイムアウトの調整
大きなファイル用に Do Until のタイムアウトを延長することもできます。
設定:
- 件数: 100
- タイムアウト:
PT5M
運用面での工夫
1. エラー通知の設定
フローがエラーで止まった時に、IT管理者にメール通知を送るようにしましょう。
手順:
- フローの設定で「エラー時に実行」を有効化
- 「Office 365 Outlook – メールの送信」アクションを追加
- IT管理者のメールアドレスを宛先に設定
2. ダッシュボードの作成
SharePointリストをPower BIに接続して可視化すると便利です!
表示する指標:
- 月間処理件数
- リスクレベル別の分布
- 平均リスクスコアの推移
- 高リスク項目の傾向分析
(これがあると、経営陣への報告資料としても使えますよね!)
3. プロンプトの継続的改善
実際に使ってみて、「もうちょっとこういう観点も欲しいな」って思ったら、システムプロンプトを修正しましょう。
改善のサイクル:
- 実際の分析結果を確認
- 法務担当者からフィードバックを収集
- システムプロンプトを修正
- テスト実行で確認
- 本番環境に適用
(AIシステムは、使いながら育てていくものなんです!)
まとめ
はい、いかがでしたでしょうか?
全4回の連載、ついに完結です!
お疲れ様でした!
この連載で実現できたこと:
✅ 契約書のテキスト・構造の自動抽出
✅ AIによる高度なリスク分析
✅ リスクレベルに応じた自動通知
✅ 分析結果の一元管理
✅ トラブルシューティング対応
✅ 運用のベストプラクティス習得
システムの効果:
- 分析の標準化: 担当者による品質のばらつきを解消
- リスクの早期発見: 高リスク項目を見逃さない
- 知見の蓄積: SharePointリストにデータが溜まる
このシステム、本当に便利なので、ぜひ活用してください!
(僕も最初は「こんなの本当に作れるのかな…」って不安でしたけど、一つずつ進めたら完成しましたからね!)
次のステップ
さあ、システムが完成したら、次は以下のステップで進めましょう。
- 小規模でテスト運用を開始
– まずは数件の契約書で試してみる
– 法務担当者にフィードバックをもらう - プロンプトを改善
– 実際の分析結果を見ながら調整
– 必要な観点を追加 - 本番展開
– 全契約書に適用
– 運用ルールを整備 - 効果測定
– 作業時間の削減効果を測定
– リスク検出率を確認 - 他の契約書タイプへの展開を検討
– 秘密保持契約(NDA)
– ライセンス契約
– 委託契約など
契約書審査業務の効率化に、ぜひお役立てください!
それでは皆さん、良い業務ハックライフを~
連載記事:
- 第1回:システム概要・準備編
- 第2回:基礎実装編
- 第3回:AI分析実装編
- 📍 第4回:完成・運用編(今回)
参考リンク
更新履歴
- 2024/12/09: 全4回完結


コメント