【Power Automateで業務改善】契約期限通知フローをゼロから構築する方法

業務改善 × Power Automate

この記事は私がこれまで学んだことを忘備録として記録したものです。
これからPowerAutoamteで業務を効率化したいという方の参考になれば幸いです。
今回紹介するのは、契約期限が近づいたときに担当者へ自動でメール通知するフロー。
GitHubからハンズオン用のフローとサンプルデータをダウンロードできるので、すぐ試せます。
また「自分で一から作ってみたい」という方は本記事を参考にしてください。

現場でよくある課題を、Power Automateでどう解決できるのか、一緒に見ていきましょう。

 

 


今回PowerAutomateで解決したい課題はこちら

 

「契約期限を忘れてしまい、対応漏れが発生する」

そこで、Power Automateを使って「期限が近づいたら自動で通知する仕組み」を作ってみました。

 

忘れ防止に最適なフローを1手順ずつ作成していきます!

 

 

今回やること

  • SharePointリストから契約情報を取得
    → 目的:契約名・期限日・担当者などのデータをフローで扱えるようにするため。
  • 現在日時と7日後の日付を計算
    → 目的:契約期限が「今日から7日以内」かどうかを判定するため。
  • 期限が7日以内なら担当者にメール通知
    → 目的:更新漏れを防ぎ、担当者に早めに対応してもらうため。

 

 

今回のフローに登場するアクション

  • 手動トリガー(Button)
    • フローをボタンで実行する方法
    • 「インスタントクラウドフロー」の基本
       

 

  • SharePoint:複数の項目の取得
    • SharePointリストからデータを取得する方法
    • $topパラメータで取得件数を制御するテクニック
   

 

  • Compose(作成)
    • 現在日時を取得する式:@utcNow()

    • 日付計算(7日後):@addDays(outputs('作成:現在日時_JST'), 7)
    • アイテムのフィールド値を取り出す方法:@item()?['field_1']
     
リストの列名は『期限日』と表示されていますが、内部名は『field_1』なので注意

内部名の確認方法は以下の動画を参考にしてください。

 

 

  • Foreach(For each)

    • 複数アイテムをループ処理する方法
    • @outputs('複数の項目の取得')?['body/value']で配列を指定

 

 

  • 条件分岐(If)


    • 日付比較の式:
      @lessOrEquals(outputs('作成_:期限日JST'), outputs('作成_:7日後のJST'))

 

  • Office 365:メール送信(Send an email V2)

    • 件名・本文に動的コンテンツを挿入する方法

 

 


完成イメージ

フロー全体図はこちら

 


ハンズオン手順

以下の手順で進めます。
(可能な方は一緒にこの記事を見ながら手を動かしてフローを一緒に作ってみてください)

 

事前準備

今回のフローでは、契約情報を管理するためにSharePointリストを使います。
以下の手順でリストを作成してください。

  • SharePointサイトにアクセス
    会社やチームで利用しているSharePointサイトを開きます。

 

  • 新しいリストを作成
    「+新しいリスト」→「空白のリスト」を選択し、リスト名を「契約管理」に設定します。

 

  • 必要な列を追加
    以下の列を作成してください:
  • Title(契約名)…既定のタイトル列を利用
  • field_1(期限日)…列の種類は「日付と時刻」
  • field_2(担当者)…列の種類は「単一行テキスト」

 

  • サンプルデータを入力
    例:

契約名       | 期限日        | 担当者
契約A        | 2026-01-10    | test@example.com
契約B        | 2026-01-15    | test@example.com
契約C        | 2026-01-20    | test@example.com
    

※テストなので、担当者欄には自分のメールアドレスを入力してください。

 

このリストが準備できたら、Power Automateで「複数の項目の取得」アクションを使ってデータを読み込みます。

 

 

リストの作り方が動画で見たいという方はこちら↓

 

ここからPowerAutomateフローの作成に入っていきます

 

 

① トリガー設定

今回は「手動トリガー(ボタン)」を使います。
Power Automateで「新しいフロー」→「インスタントクラウドフロー」→「手動でフローをトリガーします」を選択。

 

 

 

② SharePointリストから契約情報を取得

アクション名:複数の項目の取得
カテゴリ:SharePoint
パラメータ:サイトURL、リストID

 

@outputs('複数の項目の取得:リストから契約期限日サンプルデータを取得')?['body/value']

 

 

 

 

③ 現在日時と7日後を計算

アクション名:作成(Compose):現在日時

式:@utcNow()

 

 

アクション名:作成(Compose):7日後

@addDays(outputs(‘作成:現在日時’), 7)

式の意味
「現在日時に7日を加算した日付を返す」
つまり、今日から7日後の日時を計算する式です。

 

 

 

繰り返し処理(ForEach)

ここでやろうとしていることは以下の2点です。

 

 

SharePointリストから取得した契約情報(body/value)をループ対象に設定。
→契約A・契約B・契約C…と順番に処理します。

そこでForEachアクションを追加します

 

アクション名:For Each

式:outputs(‘複数の項目の取得:リストから契約期限日サンプルデータを取得’)?[‘body/value’]

 

ForEachはなぜ必要なのかが最初は分かりにくいので、もう少し解説を追加していきます。↓

 

 

そもそもなぜFor Eachが必要なのか?

 

  • SharePointの「複数の項目の取得」は、複数行のデータをまとめて返します。
  • そのままでは「条件判定」や「メール送信」ができません。
  • For Eachを使うことで、1件ずつ処理できるようになるので、契約ごとに個別通知が可能になります

 

複数行のデータを一行ずつして処理したい!
→For  Each を使う。という流れですね。

 

 

 

④ 条件分岐とメール送信れ

ここからはFor Eachで1行ずつ処理するデータに対して、処理を行っていきます。

ただ、その前に、まずは取得してきたデータから『期限日』を先に取り出しておきます。

 

なぜ期限日を先に取り出すのか?という点について、少し詳しく解説します。↓

 

 

なぜ期限日を先に取り出すのか?

  1. 条件判定に使うため
    「期限日 ≤ 現在+7日後?」を比較するため、期限日を明確にしておく必要があります。
  2. データ型を扱いやすくするため
    SharePointからの値は文字列なので、Composeで取り出すと後の式が安定します。
  3. 可読性を高めるため
    条件式に直接 @item()?['field_1'] を書くと複雑になるので、先に変数化してシンプルにします。
  4. 再利用できるようにするため
    メール本文やログにも期限日を簡単に差し込めます。

 

期限日を取り出したあとのフロー解説

ここからは、期限日を取り出した後に何をするのかを詳しく見ていきます。ポイントは「条件判定」と「メール送信」です。

 

 

1. 条件判定(期限が近いかどうか)

まず、取り出した期限日と「現在日時+7日後」を比較します。条件式は以下の通りです:

 

 

条件(Condition)アクションに入れる値

  • 左辺(左のボックス)
    期限日(動的コンテンツ)
    例)作成_:期限日出力(Composeを使っていれば outputs(‘作成_:期限日’) に相当)
  • 中央(演算子)
    「次の値以下」
    → 「左辺 ≤ 右辺」を判定します。
  • 右辺(右のボックス)
    7日後(動的コンテンツ)
    例)作成_:7日後出力(Composeで addDays(現在日時, 7) を計算したもの)

 

この式の意味は「期限日が7日後以内ならTrue」ということです。Trueの場合のみ、次のメール送信アクションに進みます。

 

 

なぜこの条件が必要?

  • 契約期限が近づいたものだけ通知したいから
  • 全件通知すると、担当者に不要なメールが大量に届いてしまうから

 

 

2. メール送信(担当者に通知)

条件を満たした場合、Office 365の「メールの送信 (V2)」アクションを使います。ここで、契約名・期限日・担当者を本文に差し込みます。

 

契約名: @{items('For_each')?['Title']}
期限日: @{outputs('作成_:期限日JST')}
担当者: @{items('For_each')?['field_2']}

 

件名には「契約期限が近づいています:@{items(‘For_each’)?[‘Title’]}」と設定します。

 

 

 

3. フローの完了

条件を満たさない場合は何もしません。これにより、通知は必要な契約だけに送信されます。

 

 

ポイントまとめ

  • 期限日を取り出す → 比較しやすくするため
  • 条件判定 → 無駄な通知を防ぐため
  • メール送信 → 担当者に必要な情報を届けるため

 

この仕組みを使えば、契約管理の「うっかり期限切れ」を防げます。

 

GitHubでフロー.ziplを公開していますので、ぜひ試してみてください。

powerautomate-flows/P004_Automated Notification for Near-Due Tasks at main · isamu7pad-alt/powerautomate-flows

 

 

\ 最新情報をチェック /

コメント

PAGE TOP
タイトルとURLをコピーしました