🐖

Power Automate を使って面倒な定例MTGの設定を自動化する

2024/03/21に公開

私の所属している会社では自社SaaSの夜間メンテナンスを月1で実施しています。

事前会議を2回実施しており、その会議準備が面倒だったので自動化した話をしたいと思います。

会議ツールはMicrosoft社のTeamsアプリを使っています。Teamsを使えば定期予定を組むことは容易ですが、定期メンテナンスの担当者や参加メンバーが毎月異なるといった特徴があるため、スレッドを分けて管理したいという社内の希望があったため、面倒な作業が発生していたという背景があります。

対象読者

  • Power Automateを使った業務自動化に興味がある方
  • Power Automateのフロー作成に詰まっている方(の一部)

Power Automateのフロー作成

自動化対象の手動作業とそれを自動化したフローは下記です。

【普段の手動作業】

  1. メンテ用のテンプレフォルダから当月用の作業フォルダを複製する(Sharepoint上)
  2. 事前会議の予定を作成し、エンジニア全員に連絡する

※定期メンテナンスは第3木曜。事前会議はメンテ前日と前週水曜日の2回

【Power Automate フロー】

  1. 毎月20日に処理を実行(タイマートリガー)
  2. 各イベントの日程を計算(日時の変換)
  3. 作業用フォルダの作成(Sharepointでフォルダのコピー)
  4. 会議招待者の情報を取得(Outlookユーザーのプロフィール取得)
  5. Teams会議予定の作成
  6. 会議予定の連絡(Teamsチャネルへメッセージ送信)

毎月20日に処理を実行(タイマートリガー)

まずは、作成画面から「Scheduled cloud flow」を選択肢てフローを作成します。
フロー作成

作成の際、フロー名や起動タイミングを設定します。(後でも変更できます)

今回は毎月20日なので、下図のように設定します。
フロー作成パネル

下図のようなフローが出来ればOKですね。
私はTime Zoneを日本時に設定しておきました。
フロー作成後

各イベントの日程を計算(日時の変換)

定期メンテナンスが第3木曜日でそれを起点に事前のMTGが組まれているため、少し厄介なので計算を挟みます。

まずは「Current time」で現在日時を取得します。

日付の計算には「Convert time zone」アクションを使います。

ここから少し厄介なんですが、日付の変換を3回行います。

  • 現在日時を来月1日に変換
  • 来月1日を第3木曜日の前日に変換
  • 第3木曜日の前日をその前週水曜日に変換

来月1日は、現在日時に30日足した後に「yyyy-MM-01」でフォーマットすれば算出できます。
現在日時を来月1日に変換

第3木曜の前日は、1日の曜日から算出できます。
数式を記載しておきます。

もし、1日が日~木の場合

D = 4 - dayOfWeek(dt1) + 14

もし、1日が金~土の場合

D = 11 - dayOfWeek(dt1) + 14

※dt1: 来月1日
※D: 第3木曜日の前日
※dayOfWeek: 曜日を数値化する関数(日~土 → 0~6)

来月1日を第3木曜日の前日に変換

「第3木曜日の前日をその前週水曜日に変換」は、第3木曜日の前日から7日前なので説明を省略します。

作業用フォルダの作成(Sharepointでフォルダのコピー)

作業用フォルダはMicrosoftのSharePoint上に配置しています。

そのため「Copy folder」アクションを実行してテンプレフォルダを複製した後、「Send an HTTP request to SharePoint」アクションでフォルダ名を変更します。

コピー元/先の情報を入力します。(会社サイトのため一部の情報は伏せています)
コピー元/先のディレクトリが同一であるため、同名フォルダがあった際の処理を「Copy with a new name」にしてあります。こうすることで、「元のフォルダ名1」といった命名になるため、後の処理で便利です。

フォルダ名の変更は下図のようにAPIを用います。
この際、Uriはコピー後のフォルダを指す必要があるため、数式を組み込んでいます。
フォルダ名をメンテナンス日の「yyyyMMdd」形式にしたかったため、BodyのJsonで計算させています。

※Pathの頭の「/」を取り除く必要があったため、少し不格好な変換をしています。

会議招待者の情報を取得(Outlookユーザーのプロフィール取得)

Teams会議にエンジニア全員を任意で招待したいため、エンジニア全員のメールアドレス情報が必要になる。

「エンジニア全員」は社員の入退社で変動するため、メンテナンスコストを下げるため固定値設定は避ける。

ではどうするか?

まずはTeamsのチャネルタグを新規作成し、エンジニア全員にこのタグを付ける。
これはチーム開発をしている企業であれば、既にエンジニア全員に連絡する手段として活用されていることでしょう。

次に「List the members for a tag」アクションを使ってエンジニア全員の情報を取得します。

しかし、「List the members for a tag」アクションではメールアドレスが取得できないため、反復処理で「Get user profile (V2)」を実行する。
会議作成時にはメールアドレスをセミコロンでつなげるため、この際に変数に格納しておく。

Teams会議予定の作成

Teams会議の作成には「Create a Teams meeting」アクションを使います。
※2024/3/20時点では、Teamsチャネルに紐づいた会議を作成するアクションはありません。

会議の開始/終了時刻をformatDateTime関数を使って変換しています。後続のフローで利用しない場合は、この変換で不都合ないです。

Advanced parameterで「Optional Attendees」に前工程で作成したエンジニア全員のメールアドレスを設定します。私のチームは毎月の参加者が変動するため「任意参加者」に全員突っ込んでいますが、必須参加者にしたければ「Required Attendees」に設定すればOkです。

会議予定の連絡(Teamsチャネルへメッセージ送信)

私のチームはTeamsで会議アジェンダや事前準備物を共有しているので、「Post message in a chat or channel」アクションを使います。


※Post Asは「Flow bot」でもいいと思います。私は返信に気づきやすいようにしたかったので自分の投稿としてます。

※私の場合、Messageに下記を盛り込んでいるため、実際のフローはもう少し長くなっています。

  • Teamsのタグメンション
    • 「Get an @mention token for a tag」アクション
  • SharePointの作業フォルダへのリンク
    • 「Get file properties」アクション

SharePointの作業フォルダへのリンクをTeamsメッセージに仕込む際、ちょっとしたテクニックが必要です。
初期のUIではリンクに変数指定が出来ませんので、右上(下図赤枠)のアイコン押下で入力モードを切り替える必要があります。

まとめ

今回、Power Automateを使って面倒な業務の自動化に成功しました。

手作業だと10分[/月]かかる作業であったため、年間2時間の時短となりました。単純な作業時間の短縮だけでなく、担当者のストレス低減と担当者引継ぎコストの低下も見込めます。

本対応にかかった時間は10時間弱のため、5年で元が取れますね!(長い!)

個人的な感想として「Power Automate便利だな!」と感じました。連携アプリが結構あるっぽいので、他にも自動化出来そうな作業はありそうです。
読者の皆さんも是非試してみてください!

Discussion