Power Automateでslackにスケジュール通知を出してみたよ

はじめましてこんにちは、役立たずです！
普段はMTやWPのテーマを書いたりサイト設計をしたりお客さんとお話ししたり、
稀にデザインのチェックをしたりリダイレクトを書いたり雑魚いjsやphpを書いたり、
浅く狭くなんだかよくわからないことをやっています。
IT業界に転職して早8年、未だに情弱の極みではございますが、
恐れ多くも天才たちが集うすごい場所、Qiitaに初めて投稿します。
とはいえ、自分ごときが技術的なすごいことを書けるはずもありませんので、
今日は以前 @tel-bitstar さんに教えていただきながら作ったPower Automateでslackにスケジュールを流すべんりなやつをご紹介しようと思います。（ @tel-bitstar さんありがとうございます！）
わかってねーやつが書いている文章ですので、生温い目で流し読みしていただけると幸いです。

# Power Automateってなに？
MicroSoftから提供されている [これ](https://powerautomate.microsoft.com/ja-jp/) です。office365を使っている方はアプリ一覧にあるかも？

https://powerautomate.microsoft.com/ja-jp/

なにかとなにかを連携させたりして、すごいなにかをしてくれる自動化ツールだと思っています。（理解が浅い）

# どんなことをしたの？
webサイトのサーバ移設のスケジュールを管理しているエクセルと連携させて、
更新期限日・リリース日の〇日前にslackのチャンネルに通知を出す、というフローを作成しました。

- いつ移設するのか
- リリースNo
- ドメイン名
- IPアドレス

がわかるようになっています。
![キャプチャ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/ba729859-9fe2-7496-d292-621a05235548.jpeg)

# 作ってみよう！
最終的にこんな形になります。
![フローの編集-Power-Automate (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/f236c91a-8a2f-e6f8-6c85-6adec7a88fe5.png)

## 準備するもの
- スケジュールが記載されたエクセル(SharePointに格納済み)
- Power Automateの画面
- [リファレンス](https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference)

## フロー作成のステップ
1. 実行タイミングの設定
1. エクセルの準備
1. エクセルの内容を取得・操作
1. 移設予定日の日付を直す
1. 条件分岐（移設予定日の〇日前だったら、という条件）
1. slackに投稿

## 実行タイミングの設定
Power Automateの画面でいつフローを実行するか(slackに通知を流すか)のタイミングを設定します。

「スケジュール済みクラウドフロー」を選んで
![フローの管理-Microsoft-Power-Automate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/3733ec06-cb4f-cd2e-4ec3-fe90274ce73e.png)
フロー名、実行タイミングを決めます。
毎日チェックして条件にあてはまるものがあれば1回流す、でOKかな～と思ったので、
開始日はお好みのタイミング(始業時に見れるようにしたいなら09:00AMとか)で、繰り返し間隔は「1日」に設定しました。
![フローの管理-Microsoft-Power-Automate (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/6828df92-1201-b04b-1de2-6b573b0db3df.png)

## エクセルの準備
こんなかんじのslackに流したい要素が記載されている表を作ります。
googleスプレッドシートを使う場合は先頭行がラベルになるようにしてあげると細かい設定がいらなくなるのでおすすめです。
![Book2-xlsx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/f6ca3d69-c38d-d15c-e09c-15f01e7d765d.png)
使いたいデータの範囲を選択して、テーブルに変更します。
![Qiita用PowerAutomateのデータ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/efbd2747-11eb-4ed1-5c47-07b091771229.png)
「先頭行をテーブルの見出しとして使用する」にチェックを入れて、OKボタンをクリックします。
![Qiita用PowerAutomateのデータ (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/4858adca-1d42-be25-f1cf-b479e64a9b7a.png)
こんなかんじのテーブルになります。
範囲間違ったわ～という場合は、テーブル右下にある黒閉じ鍵括弧でぐいぐい範囲を動かしましょう。
![Qiita用PowerAutomateのデータ (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/2691b251-b600-3648-1c7d-ef60b6858e1a.png)
テーブルに名前を付けてあげると後々管理しやすくなるかも？
![Qiita用PowerAutomateのデータ (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/0e144423-a7b2-bc3b-ccb6-9140ba2ac7d0.png)

## エクセルの内容を取得・操作
Power Automateの画面に戻って、エクセルの内容を取得・操作します。

## エクセルの内容を取得
「+新しいステップ」をクリックして、「Excel Online」を選びます。
![フローの作成-Power-Automate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/064e4014-d2d4-c04b-ffae-3f8223f32af1.png)
「表内に存在する行を一覧表示」をクリックします。
![フローの作成-Power-Automate (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/470d7fdf-1983-cf52-8abd-da12786afecb.png)
「場所」「ドキュメントライブラリ」でエクセルが保存されている場所を選んで、
「ファイル」で使うエクセルを選択します。
「テーブル」は上段で名前を付けたテーブル名が表示されるはずなので、それを選びましょう。
![フローの編集-Power-Automate (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/1f6c7c12-2e5f-a7c9-33cf-c0f886b65557.png)
これでエクセルの内容を取得できました。

## エクセルの内容を操作
今のままではデータの塊(jsonなのかな？わかってない)をごりっと取得しただけなので、
持ってきたデータをぐるぐる回して日付を比較します。

「+新しいステップ」をクリックして、検索ボックス「each」と入力します。
アクションの中に「Apply to each」という項目が出てきますので、クリックします。
![フローの編集-Power-Automate (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/bc2c9a37-7b9f-cd22-4950-294e7d9770f1.png)

テキストボックスをクリックすると動的なコンテンツを選べるようになるので、valueをクリックします。
![フローの編集-Power-Automate (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/f8a3a025-cb9b-42c3-abe0-abce83b5ce9f.png)

## 移設予定日の日付を直す

エクセルから持ってきたままだと日付はシリアル値になっているので、日付に変換します。
「組み込み」の「作成」をクリックして
![フローの編集-Power-Automate (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/eb223567-53ac-5744-7c74-8cb35ccef977.png)
移設予定日を入れます。
![フローの編集-Power-Automate (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/dd606a36-acad-0d56-3055-197312e05926.png)
テキストボックスに「時間」と入れて「時間への追加」をクリックします。
![フローの編集-Power-Automate (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/e6d2fdd5-01c3-c3d5-4b48-1f0c51440095.png)
基準時間には「1900/01/01」と入力したいところではありますが、Power Automateではずれてしまいます。
ので、「1899/12/30」を基準値にします。
下記の記事を参考にさせていただいたので、ぜひ読んでみてください。

https://qiita.com/echolimitless/items/6f20d39838e2f32f5392

「間隔」にエクセルから取得したシリアル値を入れ、「時間単位」を「日」にします。
```int(outputs('作成'))```
`int` … 数値に直す
`outputs` … アクションの出力を返す
だと思っていますが、細かいことは [リファレンス](https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference) を読んでみてください。

![フローの編集-Power-Automate (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/9eaabd75-6aef-629c-fb8c-5d820a87bcb0.png)

読みやすいように日付のフォーマットをyyyy/M/dに変更します。
```formatDateTime(body('時間への追加'), 'yyyy/M/d')```
`body` … 「時間への追加」の出力結果を返します。
`formatDateTime` … 指定した形式でタイムスタンプを返します。
これも細かいことは [リファレンス](https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference) を読んでみてください。

![フローの編集-Power-Automate (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/ff689729-b2bf-e865-2fd5-ef8aa045cf12.png)

## 条件分岐（移設予定日の〇日前だったら、という条件）
今度は条件分岐を作ります。
「コントロール」→「条件」をクリックします。

![フローの編集-Power-Automate (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/f9605ab8-6658-3617-5490-4a46d11c2a75.png)

左側の「値の選択」に前段で作成したタイムスタンプを入れます。

![フローの編集-Power-Automate (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/9f8df74c-51ba-d3f2-807b-7a0cdfe24bc7.png)

右の「値の選択」に ```formatDateTime(addDays(utcNow(), 3), 'yyyy/M/d')``` を入れます。
`utcNow` … 現在のタイムスタンプを返します。
`addDays` … タイムスタンプに日付を追加します。ここでは3日後にしています。

![フローの編集-Power-Automate (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/2c735aee-f400-0c41-d0bd-7b7e50a08d1f.png)

## slackに投稿
「はいの場合」(今日の日付が移設予定日の3日前だったら)はslackのチャンネルにメッセージを投げます。
検索窓に「slack」と入れ、「メッセージの投稿(V2)」を選択します。

![フローの編集-Power-Automate (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/2113fd78-a533-4c5d-5845-7812bdfc67d2.png)

「チャネル名」投稿先のチャンネルを選択します。
リストに出てこない場合はカスタム値を入力します。チャンネルID(チャンネルのURLの末尾)を入れましょう。
DMの場合も同じ(だったはず)です。
`https://ワークスペースの名前.slack.com/archives/チャンネルID`

![フローの編集-Power-Automate (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/7ded06a8-04a5-240a-ae19-03bba5e561e8.png)

「メッセージテキスト」に投稿内容を入力します。
お好みで `formatDateTime(outputs('作成_2'), 'yyyy/M/d(ddd)')` にして
移設予定日に曜日を加えてもよしだと思います。
メンションを付けたい場合は `<@なんとやらさん>` のように `<>` でくくってください。
![フローの編集-Power-Automate (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1983900/da37a7d2-62dc-6e79-226e-6c4b2cc03b53.png)

保存ボタンをクリックしたら、テストを行いましょう。

# 作ってみた・使ってみた感想
当たり前ですが勝手に通知が流れてくれるので、日付の確認漏れがなくなりました。
SSL更新のお知らせも同じ仕組みで通知を流すように変更したので、
更新前夜に心配になって目が覚めることも少なくなりました。(Zabbix使えよって話ではありますが…)
エクセルだけじゃなくてバックログの課題の状態とかも同じような仕組みで取れたらいいな～と思いましたが、
HTTPのアクションはプレミアライセンスじゃないと使えないらしい？ので、お知らせメールを使って何とかしたいなあと思いました。


みなさまのお仕事が少しでも楽になるヒントになれば幸いです。
さようなら～。

# 参考文献
- [Azure Logic Apps および Power Automate のワークフロー式関数のリファレンス ガイド](https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference)
- [Power AutomateでExcel日付（シリアル値）を日付形式に変換する](https://qiita.com/echolimitless/items/6f20d39838e2f32f5392)