Power Automateで退勤時の定型業務を自動化してみた



退勤時に行う定型作業が多く、面倒だなと思った経験はないでしょうか？
今回は、Power Automateを使って自身の退勤時の業務の自動化に挑戦してみました！

※2024年09月24日現在、記載の内容を再度試したところ、正常動作しないことを確認しております。記載の情報は参考程度にご活用していただくようお願いいたします。




# 実現方法の検討
まず、実現方法を検討しました。
無料で使えるツールとしては、以下の二つが有力そうでした。
1. Power Automate
Microsoftが提供するRPAツールです。
2. python+Selenium
Seleniumは、Web操作を自動化するフレームワークで、
Seleniumとpythonを組み合わせることで自動化が可能になります。

　以下が比較表となります。
|          | Power Automate                    | python+Selenium           | 
| -------- | -------------------------------- | -------------------------- | 
| 環境構築 | なし<br>(アプリのインストールのみ） | あり                       | 
| 難易度   | ノーコード<br>直感的な操作が可能                | プログラミングの知識が必要 | 
| 自由度   | 低い<br>無料版だと機能制限あり   | 高い                       | 
| 情報量   | 多い                             | 多い                       | 

手軽に実装できそうってことで、今回はPower Automateを選択しました。

# Power Automateのダウンロード
以下のリンクからダウンロードできます
[Power Automate](https://learn.microsoft.com/en-us/power-automate/desktop-flows/install)
私は、インストーラ版をダウンロードしました。

# 基本操作
ソフトをダウンロードして、起動すると、以下のような画面が開きます。


 
　<img width=500 alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/4137d50e-ef89-93e9-32ef-ea76090e1f7b.png">
[+新しいフロー] をクリックすると、プログラムを作成できます。
　

　<img width=500 alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/fcebeb9b-58f7-3ea9-7b4b-eb39a2692e4f.png">
左のタブのアクションから、操作をドラッグ＆ドロップすることで追加できます。
# 退勤時にやる作業の整理
　実装内容を整理しました。
1. 日報(Google スプレッドシート)の自分のセルに今日の実績を記載する
1. OJT用のシート(Google スプレッドシート)にも実績を記載する
1. 工数管理アプリ(Webアプリ)に工数を入力する
1. 在籍チェックアプリ(Webアプリ)で「退勤」ボタンを押す
1. 勤怠管理システム(Webアプリ)で「退勤」ボタンを押す

　これだけあるとどれか一個忘れるんですよね。。。

# 実装

## 全体像

「1.出勤_出社」「2.出勤_テレワーク」「3.退勤」のフローを作りました。
最終的には、出退勤すべてをワンクリックでできる想定にしました。

![全体像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/bad1395d-cea8-12ab-2e51-60a81e423707.png)

[Desktopフローを実行]アクションで他のフローを呼び出すことが可能なので、
主な処理は、「5.出退勤処理」に実装しました。

## 実装の説明
以下の画像が「5.出退勤処理」の実装内容になります。

![全体像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/b73d22b7-20a6-7a51-fdda-e60be661e971.png)
プログラミングにおけるメソッドのようなサブフローが使えるので、
「退勤時にやる作業」ごとにサブフローを作成し、見やすい実装にしました。

## 実装例
実装内容が多いので、
 **4.在籍チェックアプリ(Webアプリ)で在籍状況を「退勤」にする**
 **サブフロー名:[在籍状況_退社]**
 の実装例を説明します。


以下が作成したフローになります。

![スクリーンショット 2023-11-21 121119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/507a74e3-3504-5440-d9ae-e387b73b75e9.png)



1. 新しいタブを作成
以下の画像がWebアプリの画像です。このアプリへのURLを登録します。<img width=500 alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/3d873535-808e-bff4-d9b7-91511b8e86d2.png"> 

1. 画像を待機
ここでは、以下のような画像を登録します。        


     <img width=500 alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/b3ee5074-b88c-21d9-1a69-fd4ceeb00a71.png">　　　　　　　　　　　　　　　     
1. ウィンドウのUI要素をクリック
最後に退勤ボタンをクリックするアクションを追加します。
UI要素も[ウィンドウのUI要素をクリック]アクション>[UI要素の追加]から、
簡単に追加することができます。

## 工夫点・つまづいた点
### ユーザーの入力を待機
**1. 日報(Google スプレッドシート)の自分のセルに今日の実績を記載する**
**2. OJT用のシート(Google スプレッドシート)にも実績を記載する**
**3. 工数管理アプリ(Webアプリ)に工数を入力する**

上記の三つの要件では、ユーザーの入力を待つ必要がありました。
そのため、[カスタムフォームを表示]アクションで以下のようなメッセージボックスを作成し、
入力を待機するようにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/b283bd20-3c13-721f-17ef-0040c02c9c17.png)


### ボタンが押せない
最初は、ブラウザの遷移後、すぐにクリックアクションを入れていましたが、
「画像が見つからない」「UI要素が見つからない」等のエラーをはいていました。
WebアプリやGoogle Spreedsheetsを操作する際は、
何らかの形（[画像を待機]アクションとか）で表示を待った方がバグが少ないです。


### Google スプレッドシート で任意のセルに移動する
**1. 日報(Google スプレッドシート)の自分のセルに今日の実績を記載する**
この要件では、その日の日付の自分の名前のあるセルまで移動する必要がありました。
Google スプレッドシートを操作するアクションは、見つけられなかったため、
[キーの送信]アクションでショートカットキーを入力させることで実現してみました。
以下の画像のような実装となります。
![スプシ移動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620257/65264ec8-3b9a-9074-f7b6-913fdb1b3e7d.png)


ここでの処理を説明します。
1. [新しいタブを作成]
   日報のGoogle スプレッドシートを開いています。
1. [ctrl+j]でセルの指定に移動→[D10]を入力→[Return]→[Alt+Return]
　[D10]セルにその日の日付のタブに移動するハイパーリンクがあるので、
  ハイパーリンク先に移動する処理となっています。 
1. [ctrl+j]でセルの指定に移動→セルを入力（ここでは、引数の[cellNumber]）→[Return]
ここで、任意のセルへ移動しています。


# 所感
直感的に操作可能であることや調べればすぐに情報が出てくるので、
とても使いやすいと感じました。

ただ、一応やりたいことはできたけど微妙・・・ってかんじですね。
 理由が、3つあります。
 1. Power Automate上からしか実行できない
パソコン起動時に起動とか、デスクトップのショートカットから実行みたいなこと
もできたらいいなとは思ったのですが、有料版でしか無理っぽかったです。。
ただ、ショートカットキーを設定できるのでそれで代用できそうでした。
 1. 途中で他の操作をするとバグる
「画像を待機」とか「画像の上でクリック」等のアクションがあるので、
他の操作をするとバグることがあります。。
1. ソースの共有が有料版のみ
便利なのできたら、共有したかったですが、
有料版のみのようでした。残念・・・
　

でも、操作に気を付ければ、定型業務の忘れは防げそうです。
エラー処理等も実装すれば、結構使えそうでした。
Power Automateを使えば、簡単に色々な定型業務を自動化できるかも。。
と意欲が沸いたので、挑戦してよかったです！