エムオーテックス株式会社が運営するテックブログです。

PowerAutomateで実現!月初の営業日に自動通知を設定する方法

PowerAutomateで実現!月初の営業日に自動通知を設定する方法

はじめに

こんにちは。アプリケーションチームの大市です。

皆さんは、毎月1日ではなく、土日祝日などを除いた「月初の平日」に動いて欲しいタスクはありませんか? 今回は、社内でチャットワークの Webhook を使って、月初の営業日にツールを自動で動かす方法を PowerAutomate を使って実現した事例をご紹介します。

課題

弊社は、基本的に土日祝日がお休みで平日が営業日となっています。 そのため、月初めにツールを動かすとなると必ず1日となるわけではありません。また祝日も考慮すると結構大変... かと言って、毎月手動でメッセージ送信するのは忘れてしまうことがありそうで困るなと考えていました。 ツールはチャットワークの Webhook からの起動となっているため、月初の営業日にチャットワークに自動でメッセージ送信さえできればと思い、調べてみた結果、PowerAutomate で手軽にできそうでしたのでこちらで自動化してみることにしました。

作り方

概要

PowerAutomate のフローを1日1回起動し、Outlook のカレンダーから今月の月初の営業日を計算し、その日が今日であればチャットワークに通知する流れになります。

カレンダーを用意する

祝日を営業日から除外するために Outlook のカレンダーを利用します。 Outlookからカレンダーを開き、予定表を追加します。 祝日から日本にチェックを入れると個人用の予定表に「日本の休日」が追加されます。 このカレンダーを使うことで、祝日も自動で判定できるようになります。

会社休日も用意するためにもう一つ空白の予定表「会社お休み」を作成します。 こちらは自動でお休み予定が入ることがないため、土日祝日以外の会社休日となる日があれば、「会社お休み」のカレンダーに「会社休日」イベントをぽちぽち追加しておきます。

PowerAutomate の作成

ここから PowerAutomate でフローを作成していきます。 PowerAutomate で、スケジュール済みクラウド フロー から新しいフローを追加します。 この時に繰り返し間隔を「1週間」にし、設定曜日から土日を外しておきます。

※ フローが動くタイミングが 9:00 AM よりも前になると前日判定されるため、ご注意ください。

フローの中身を作成していきます。

1.変数の設定

まず、3つの変数を用意します。

  • loop_flag: 月初の営業日を探すループ処理で使用します。
    • Type: Boolean
    • Value: true
  • today: 今日の日付を格納します。
    • Type: String
    • Value: addDays(body('現在の時刻'),0,'yyyy-MM-dd')
  • target_day: 月初の営業日を探すために使用します。
    • Type: String
    • Value: startOfMonth(variables('today'),'yyyy-MM-dd')

2.月初の営業日を探すループ処理

次に月初の営業日を探す Do until のループ処理を作ります。ループの全体像はこうなっています。Loop until 条件は「loop_flag が false」になるまでとなります。

ループ内ではまず、カレンダーからイベントを取得します。この時に target_day を開始と終わりにすることで、target_day の日付にイベントがあるかどうかの確認を行います。Outlook で作成した「日本の休日」と「会社お休み」で祝日などのイベントがあるとイベントが取得されます。

次に target_day が休日か営業日の判定を行います。 分岐の条件は下記の4つを追加し、AND条件にします。

  • dayOfWeek(variables('target_day')) is not eaqual to 0 (日曜日ではない)
  • dayOfWeek(variables('target_day')) is not eaqual to 6 (土曜日ではない)
  • length(outputs('イベントのカレンダー_ビューの取得_(V3)(祝日)')?['body/value']) (祝日ではない)
  • length(outputs('イベントのカレンダー_ビューの取得_(V3)(会社休日)')?['body/value']) (会社休日ではない)

true の場合は loop_flag を false に変えます。 false の場合は target_day に1日足します。

3.月初の営業日判定後の処理

ループ処理を抜けたら、最後に target_day が今日かどうかの分岐を行います。 分岐の条件は下記になります。

  • target_day is eaqual to today

これで、true の場合にチャットワークに通知するアクションを追加すれば完成です! 最後の部分はチャットワークに通知ではなく、それぞれ使いたいアクションにしてみてください。

動かしてみる

※ 動作確認のために today の値を差し替えて試しています。

例えば、「今日」が「2024-05-07」の場合、動かすと月初の営業日は「2024-05-01」となります。 ここで、カレンダーに 2024/5/1, 2024/5/2 の会社休日のイベントを登録して動かすと、

  • 2024/5/1 -> 会社休日
  • 2024/5/2 -> 会社休日
  • 2024/5/3 -> 祝日
  • 2024/5/4 -> 土曜日
  • 2024/5/5 -> 日曜日
  • 2024/5/6 -> 祝日

となるので、月初の営業日は「2024-05-07」となります。

おわりに

最初は、どこかに祝日のリストを用意して、土日と用意した祝日を除外してといったコードの実装を考えていましたが、祝日を自動で用意してくれる方法が見つかりました。あとは、会社休日もどこかから引き込めると完璧に出来上がりそうです。 今回は特定の日を除外する方式になっていますが、応用すると特定の日のみ実行させることもできるかと思います。 自動化できるものを自動化することは、工数削減やタスクの忘れ防止に繋がります。 今回 PowerAutomate で手軽に作ることができましたので、使ってなかったという方がいらっしゃればぜひ試してみて頂ければ嬉しいです!