Power AutomateとPower Appsで作る！効率的な勤怠管理アプリの実践ガイド

## はじめに
最初の投稿では、Power Automateを使って定期連絡フローを作成しました。次に、Power Appsを利用してSharePointリストに勤務時間を打刻する方法をご紹介します。今回は最新の投稿に自動的に返信できるようにすることで勤怠を管理したいと思います。

https://qiita.com/neo_kuwashun/items/1885e2e14782c83be1b5

https://qiita.com/neo_kuwashun/items/f4bc9c780c034d3991c0

## Power Automateとは
Microsoftが提供するRPA（ロボティック・プロセス・オートメーション）ツールです。Power Automate使うことで、日常的な繰り返し作業を自動化し、業務の効率化を図ることができます。例えば、メールの自動返信やデータの入力、ファイルの保存などを自動化できます。

## Power Appsとは
Power Appsは、Microsoftが提供するローコード開発プラットフォームで、ユーザーが簡単にカスタムアプリを作成できるツールです。コードの知識が少なくても、ドラッグ＆ドロップでアプリを構築し、データの接続や自動化を実現できます。ビジネスプロセスの効率化に役立ちます。

## Power Appsで勤怠管理アプリを作成する

まず、初めに勤怠管理アプリを作成します。デザインは個人によって異なるため、今回は詳細な説明を省略します。画面を作成する際に、出勤ボタンと退勤ボタンを追加します。

![スクリーンショット 2025-03-30 011141.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/c8db9b21-866b-4055-a42b-c0d8fd7fb77a.png)

### ボタンを押した際に投稿に返信する


- 出勤ボタンを押した際には「おはようございます。出社です。」
- 退勤ボタンを押した際には「お疲れ様です。退社いたします。」

を、毎月自動的に投稿されるメッセージに対して返信できるようにしたいと思います。
毎月自動的に送信される投稿に関しては下記の記事で取り上げております。

https://qiita.com/neo_kuwashun/items/1885e2e14782c83be1b5




### 出勤ボタン
出勤ボタンを押した際には、プルダウンで出社、在宅、客先の3つで選択したものをメッセージに含められるようにしたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/6bcb9d49-18a9-4d22-b240-79b83b048bee.png)



<dl>
  <dt>出社</dt>
  <dd>「おはようございます。出社しました。」</dd>
  <dt>在宅</dt>
  <dd>「おはようございます。在宅勤務です。」</dd>
  <dt>客先</dt>
  <dd>「おはようございます。客先勤務です。」</dd>
</dl>

プルダウンで選択後、出勤ボタンを押した際に毎月自動的にteamsに投稿されるスレッドに対して返信します。

## Power Automateでフローの作成

勤怠管理アプリを作成するにあたり、Power Automateで3つのフローを作成しました。
作成したフローは下記の3種類です。

- 最新スレッド取得フロー
- 出勤メッセージフロー
- 退勤メッセージフロー

### 最新スレッド取得フロー

初めに、最新スレッド取得フローを作成いたします。最新スレッド取得フローとは、Teamsの最新のスレッドを自動的に取得するフローです。

Power Automateの画面左メニューの[作成]を選択し、「インスタンスクラウドフロー」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/2b51dc5c-5845-4fb0-a3d8-3030c3cdbc4b.png)

アクションの追加で「Teams」で検索し、「メッセージを取得します」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/ea1f24d2-504e-43a3-989c-1781bc101452.png)

選択すると、チームとチャネルを選択することができるので、下記を入力します。
- 任意のチーム
- 任意のチャネル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/d712f2ea-8a4a-401d-860c-7b65b123286f.png)

次に、アクションの追加で「json」で検索し、「データ操作」「jsonの解析」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/669b1834-af95-4f97-a3cc-c8d7f4782726.png)


次に、アクションの追加で「変数」で検索し、「変数を初期化する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/faadd0ce-cc32-4854-813c-58c4beae1d17.png)

選択すると、名前、種類、値を選択することができるので、下記を入力します。
- 名前：任意
- 種類：任意
- 値：
```py:値
body('JSON_の解析')?['value'][0]['id']
```

最後に、アクションの追加で「power app」で検索し、「Power App またはフローに応答する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/8694623e-155a-4ba7-a949-7022d18a917d.png)

選択すると、「＋出力を追加する」が表示されるのでクリックし、「テキスト」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/b10f668c-21d7-4e1f-87c3-ffde9a2ccbd6.png)

テキストを選択すると、入力する箇所が二つあるので、
- 名前：messageID
- 種類：先ほど設定した変数名（messageID）
を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/8adc64d6-0767-45dc-8e8d-9630623cd3de.png)

これで最新のスレッドを取得するフローの完成になります。
Power Appsでボタンを押せばいつでも呼び出せる形となっております。

### 出勤メッセージフロー
次に、出勤メッセージフローを作成いたします。
まず、インスタンスクラウドフローを選択し、トリガーを「Power Appsがフローを呼び出した時」を選択します。
フロー名は任意で問題ございません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/d6700adf-83e4-4561-80b5-fd25202d8f62.png)

フローを選択すると、子フローの実行というものがアクションにあるので、選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/87169e65-444a-493e-b8d1-80cbd762bd9b.png)

:::note warn
「子フローの実行」はソリューションに対象となるフローが入っていないと表示されません
:::

始めに、Power Apps (V2)の設定をします。
入力の追加で3個のテキストを追加し、下記を入力します。
- 時間
- 分
- 場所

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/b1a513e4-7fb1-4ca0-807e-fd22c3b66fd6.png)

次に、アクションの追加で「変数」で検索し、「変数の初期化」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/5d94b627-6f3c-4438-b25e-46631d01673d.png)

変数の初期化で「名前」、「種類」、「値」を入力できる箇所があるので下記を入力します。
- 名前：place
- 種類：文字列
- 値：空白

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/6f0ca260-a42f-453d-aaec-e741a4dc8677.png)

次に、アクションの追加でコントロールを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/e35e9e53-80f2-442c-af8f-86181930532d.png)

コントロールを選択後、スイッチを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/7e67a744-8a7b-458c-8540-f0ffc9eb1f84.png)


スイッチを選択後、条件を「ケース1」、「ケース2」、「限定」の三種類にします。（⊕ボタンを押すことで条件を増やすことができます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/83f21074-b03e-4e89-863f-f5a7ac183de4.png)

スイッチの値の選択することができるので、動的コンテンツを選びます。
選んだ後、Power Apps (V2)に「場所」があるので設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/a874a44d-9a14-4b4d-a9ab-2f6c6399194d.png)

#### 出社

ケースが三種類あり、最初にケース1を選択します。
選択後、次の値と等しいのところが入力できるので「出社」と入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/b19eb540-6d99-45bc-8fd0-6a62dfb20fca.png)

その後、「アクションを追加」を選択し、変数の設定をクリックします。
クリック後、「名前」、「値」を下記のように入力します。
- 名前：place
- 値：出社

#### 客先
次にケース2に移りたいと思います。
先ほど同様に、次の値と等しいのところが入力できるので「客先」と入力します。
入力後、アクションの追加で「変数の設定」を選択し、「名前」、「値」を下記のように入力します。

- 名前：place
- 値：客先

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/80ff4b69-1800-44f6-8d36-a421ff6c63d2.png)

#### 在宅
最後にケース3(限定)に移りたいと思います。
限定ではアクションの追加で「変数の設定」で、「名前」、「値」を下記のように入力します。
- 名前：place
- 値：在宅

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/7b711760-0b87-497c-ba1a-7c4ec34dabe2.png)

### 出勤
#### 子フローの実行
次に最初に作成した「最新スレッド取得フロー」を呼び出しす方法を追加します。
新しいステップで、組込みの中のフローを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/c7453051-2c8a-4858-a315-38b9053a13c3.png)

フローを選択すると「子フローの実行」が表示されるので、それをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/87169e65-444a-493e-b8d1-80cbd762bd9b.png)

プルダウンで一番最初に作成した、「最新スレッド取得フロー」があるのでそれを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/187fd6dd-30a8-4739-ba89-a3b3635562be.png)

子フローを取得し、実行することで、別のフローを呼び出すことができるようになります。

#### Teamsへの投稿
新しいステップで「teams」と検索し「チャネル内のメッセージで応答します」を選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/cbcb745f-2ac7-446f-bbba-584a877d3a94.png)

選択すると5個入力するところがあるので、下記を入力します。
おはようございます。後に動的コンテンツで先ほど設定した変数（place）を設定することでプルダウンで選択したものがメッセージに含まれるようになります。

- 投稿者：任意
- 接続先：チャネル
- メッセージ ID：messageID
- チーム：任意
- チャネル：任意
- メッセージ：
```py:メッセージ
おはようございます。@{variables('place')}です。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/8861cc41-6337-4ff1-8aea-531b81bbebce.png)

これで出社メッセージフローは完成です。
次に今回作成した「出社メッセージフロー」とPowerappsの出社ボタンを紐づけたいと思います。

#### 出勤ボタンと出勤フローの連携

出勤ボタンを選択し、下記の関数を入力することでPower AppsからPower Automateを呼び出しております。

```出勤ボタン
出勤メッセージフロー.Run
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/ee25ed20-b855-449f-9a63-b84813cabc94.png)

:::note info
今回は出勤メッセージフローと名付けましたが、Power Automateで設定した名前を記載しても問題ございません。
:::

実際にボタンを押してみると下記のように、対象のスレッドに対して、ボタンを押すことで自動的にメッセージを送信することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/c7956330-9462-4651-98c9-62765b256b6d.png)


### 退勤
まず、インスタンスクラウドフローを選択し、トリガーを「Power Appsがフローを呼び出した時」を選択します。
フロー名は任意で問題ございません。

#### 退勤メッセージフロー（Power Automate）

最後に退勤メッセージフローを作成します。
まず、インスタンスクラウドフローを選択し、トリガーを「Power Appsがフローを呼び出した時」を選択します。




出勤ボタン同様に、子フローの実行というものがアクションにあるので、選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/87169e65-444a-493e-b8d1-80cbd762bd9b.png)

子フローの実行では、先ほど作成した「最新スレッド取得フロー」を選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/83853d2d-5802-4cd6-9423-e47b61898591.png)

次に、「teams」で検索し「チャネル内のメッセージで応答します」を選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/cbcb745f-2ac7-446f-bbba-584a877d3a94.png)

選択すると5個入力するところがあるので、下記を入力します。

- 投稿者：任意（）
- 接続先：チャネル
- メッセージ ID：messageID
- チーム：任意
- チャネル：任意
- メッセージ：お疲れ様です。退社いたします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/f32fdfa0-a486-441f-8085-b272165537f6.png)

これで退勤メッセージフローは完成です。
次に今回作成した「退勤メッセージフロー」とPowerappsの退勤ボタンを紐づけたいと思います。

## 退勤ボタンと退勤メッセージフローの連携

最後に退勤ボタンと退勤メッセージフローを紹介させていただきます。
退勤ボタンを選択し、下記の関数を入力することでPower AppsからPower Automateを呼び出しております。今回は「退勤メッセージフロー」と名付けましたが、Power Automateで設定した名前を記載しても問題ございません。

```退勤ボタン
退勤メッセージフロー.Run
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/4dd09065-04ec-4691-9c1b-f37bfffaab61.png)

:::note info
今回は退勤メッセージフローと名付けましたが、Power Automateで設定した名前を記載しても問題ございません。
:::

退勤ボタンを押してみると、実際に退勤メッセージを送信することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/78798bb4-32a9-4579-9f93-4b173c40f406.png)


## まとめ
今回は、Power AutomateとPower Appsを組み合わせることによって、Teamsの最新のスレッドに対して返信することができるようになりました。合計4つのフローとPower Appsを連携させることで、勤怠管理アプリを作成することができました！
勤怠管理アプリは現在も実際に活用しており、毎日の勤怠を楽にすることができました。
これにて勤怠管理アプリでのQiitaの投稿は最後になります。
次は他のアプリを作成しようと考えているので、よろしくお願いします。