毎年クリスマスまでの残日数に合わせたメッセージをTeamsに通知させる【はじめてのPowerAutomate】

## Power Automateを触ってみたい
Power Platformに興味があって最近さわりはじめました。
PowerAutomateは使ったことがなかったので、簡単なフローの作成を挑戦してみようと思います。

### 作るフロー
クリスマスまでもうすぐ！！ということで、
**毎年、クリスマスまでの残日数に合わせたメッセージをTeamsに通知させるフロー**を作ってみます。

## 中身
### 概要
毎朝10時になったら、PowerAutomateが起動して動作
今日の日付けから、クリスマスまでの残り日数を計算します。
残り100日、残り30日、残り12日に通知をして、
残り12日を切ると、3日に一回通知を飛ばします。
クリスマスイブと、クリスマスにはめでたい(?)文章が通知されます。

### フロー詳細
* 毎朝10時にこのフローを実行するようにします
* クリスマスの日付けを設定、今日の日付けも計算しておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/0ec78ca8-53db-c5e0-653f-d32227683023.png)

今日の日付けを取得するには、utcNow()を使います。
これで取得できるのはUTCの時刻なので、addHours()を使って9時間プラスし、JSTに変更し、ついでにMM-dd形式にも変更。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

* 先ほどの「今日の日付け」で取得した日付けを”今日の日付”という変数を作って格納します
* クリスマスまでの残り日数を計算するので、残り日数を格納する変数も作って0で初期化しておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/3563a057-c5c2-267d-f81f-6d08b33226fd.png)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

* こっから今日の日付けになるまで日付けをどんどん追加して、クリスマスまでの残り日数をカウントしていきます。

Do utilというwhile文みたいなのを使います。
コントロールというアクションにあります。

今日の日付けがクリスマスの日付けと等しくなるまでこのループを続けさせます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/010de8e1-a039-a0e9-64e7-3a991d7b613c.png)


今日の日付けとクリスマスの日が等しくない場合は、今日の日付に1日プラスした値を計算します。
日付けを追加するのは、addDays()という関数を使用します。


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

* ”今日の日付”の値を、上記に日付けに１ずつ追加で計算した日付に更新します。
* クリスマスの日付けではないので残り日数に１日追加します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/d82a45a6-ed6c-ecf6-a4db-ba1a3027edcd.png)

ここでDo utilはおわり。全体は以下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/381ff84a-e8b0-3a47-6376-7bc1df847423.png)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* 次に残り日数を3で割ったあまりを計算しておきます
* 計算結果を変数を作って初期化します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/6886498e-aff1-61ad-f5ef-f3d7a71609fb.png)
```残り日数を3で割ったあまり```３日に一回通知するために用意した変数です。
mod関数を使って、残り日数を3で割った余りを計算します。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

* メッセージを飛ばすかどうか分岐させる

私はたくさん分岐させたかったので大変なことになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/47a94a8d-1de6-3d13-b53e-09d16091b769.png)
\\\ ナニコレ珍百景 //
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

全部説明していたらクリスマスになってしまいそうなので、クリスマスイブとクリスマスの分岐の設定だけお見せします。

* 残り日数が、0日に等しいか等しくないかで条件分岐させます。(これより前に、1日前か否かで分岐させてます。)
* 分岐先でそれぞれメッセージを投稿させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/c60a8a2c-c2cc-0025-104f-de5061a1ea17.png)

アクションでTeamsを選択すると、いろんなアクションが出てきますが、
検索で「メッセージを投稿する(V3)」を選択します。
各項目を埋めておわりです。

### 実際の画面
指定したチャネルにメッセージが投稿されていることが確認できました。わーい！
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/d47a186d-4731-d536-5ca2-3a9aa9c5fdf0.png)

## 分かりにくかったところ
PowerAutomateをつかってBotまがいのものはできましたが、
やっていく中で、理解するのに時間がかかった部分がいくつかありました。

### 変数の作成、値の計算等どれ使っていいのかよくわからなくなる

値の計算＋変数の作成＋初期値代入が1つの箱でできると思っていたので、最初は理解に苦しみました。
PowerAutomateでは、計算に1つ箱が必要で、変数を初期化(作成)して結果を代入するで1つの箱使います。


### 条件分岐内では、変数の初期化できない
条件分岐内で使う変数を作りたくて、変数初期化を組み込んだら、分岐外じゃないとできないよとエラー。
これは何でできない仕様なんでしょう、、できるようにしてください！えらい人！

### 数値の計算式は「変数名/3」みたいな書き方はできない
Excelのような、こういう書き方はできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/8c312db2-aa37-537d-1ec8-13b9e7d1b1a4.png)




計算するのは計算できる関数があるので、そっちを使う。
例えば、割る時は、div関数を使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/a35d26ff-d891-e738-a7ac-90828f4f1eea.png)


### 変数や計算した値が候補に出てこないことがある
あれ、、この変数つかえないのか？
と思って検索すると出てきます。

## さいごに
PowerAutomateはそんなにコストなくいろいろできるイメージでした！
今回はお遊びで雑なものを作りましたが、次は業務などで役立つものつくってみたいです。

## 参考文献
ほぼ[こちら](https://qiita.com/yukimatsu/items/b2e2b67a625fdfbcc347)を参考にしてつくりました！
とても分かりやすかったです、感謝。