見出し画像

UiPathを活用して業務を効率化しよう

今回は世界的に評価も導入実績も抜群のRPAツール UiPath を使って、具体的なワークフローの作成を行い紹介します。使用しているアクティビティの使い方のコツなども織り交ぜて初心者向けにお届けします。

本来のロボット開発において優先される対象の業務は「実行頻度が高い単純作業」です。しかし、この記事では『実行頻度が低い(月一)単純作業』を(半)自動化します。

え?そんなものやる価値あるかって?

私は特定の条件に当てはまる方なら価値があると考えています。月一で必ずこなさなければならない業務って、なんやかんや細かな手順を忘れます、もしくは間違えたりします。長年に渡ってその月一業務を行っている人ならば、そういったリスクは小さいですが、この記事にオススメな方であれば結構死活問題です。先月どんな風にやったっけ?手順の細かなところはこれで合ってたっけ?とか確認する時間がかなり無駄。そんな時間すら惜しい、その時間だって年間にすればそれなりの時間になります、半休くらいはとれるかも?もっと成果を上げられる業務やアイディアだしのための調査時間などに使えたかもしれない。ストレスだって軽減します。ストレスに関して言うならば、こういった業務こそ時間がとられると大きなものになると思います。

ということで、そんな一分一秒惜しい、手順書を作成したい、誰かに代わりにやってほしい、方向けに記事を書きます。

前提条件

・会社でRPAを導入していない
    - ロボットのお世話はすべて自分でやる(開発、運用、保守)
    - 無償で使える製品を自身で勝手に使う(本記事では、UiPath Community エディション)
    - 自分の業務を効率化するためだけにロボットを使う
    - 昼夜問わず働くロボット環境がない(半自動ロボしか基本作れない)、要は自分に支給されている業務端末でロボットを動かす
    - UiPath について相談できる詳しい人が周りにいない
・業務で使用するPC ( OS ) : Windows 10
・業務で使用するメールクライアント: Outlook
・Azure を業務で使用していて、毎月の請求書の処理をしなければならない
・マルチモニター ( デュアルディスプレイ ) にする
 ※必須ではないけど、UiPath Studio アプリ と Azure Portal (Azure Developer Supportの請求書をダウンロードするサイト)を開くブラウザがそれぞれ異なるディスプレイで表示できるとやりやすい

RPA って何? UiPath って何?とりあえず簡単にでも使うためにはどうすればいいの?という完全初心者の方はぜひ読んでみてください。

専門家になるわけではない(と思う)ので、この本で環境準備の方法とか、必要なところだけを読んでもらえれば、この記事の理解も然りですしもっと応用が利いた自身のピンポイントでの業務効率化に活かせるかもしれません。
もちろん、これから本格的に学ぼうという方の入門書としても役に立つと思います。「まずは手を動かしてみよう!」がコンセプトになっているので、まずはこれで具体的な物を把握し、後付けで理屈を学ぶでも良いと思います。

条件に当てはまるこんな人にオススメ

・業務量の多さに苦しんでおり、仕事を振れる相手もいない
    - 頼れるのは自分だけ
    - 一人働き方改革(業務改善、効率化)に取り組んでいる
    - クリエイティブな仕事も多くこなさなければならないし、大量の雑務もミスなくこなさなければならない
      -- ミスすると自分の首をさらに絞めることになる
    - 担当業務の幅がものすごく広い
      -- しかもそれぞれ質を求められる
      -- あの件とか言われても特定できない
・将来的に今の職場をやめる前提で働いている

(半)自動化対象業務

Azure Developer Support の毎月の請求処理

※購買担当者に請求書PDFをメールで送りたい
※利用料の請求書と違い、Web サイトにログインしダウンロードしなければならない
※他のクラウド絡みの請求書は、全自動で購買に提出可能、しかしこれだけはできない・・・

ロボットによる(半)自動化の効果

・(引き継ぐ際の)「 業務手順書の代わり 」になる(可能性がある)

・わずかだが、「 ストレス軽減 」
    - 前回処理時のやり方や認証情報(ログイン情報)など思い出したり、確認する必要がない

・メールを打たなくてよい、「 手間の削減 」

ワークフローの概要

0.(Microsoft 社から請求書発行完了のメールを受信)
    ※方法はあるので本来はここをトリガーにしたいが、このメール受信は基本的に業務時間外や休日が多い(ロボット端末: 自身のPC、が稼働していないことが多くロボットを動かせない)
    ※自分でこのメールを確認し、ロボットに実行命令を出す
1. ブラウザで請求書ポータルを開く
    巨大パブリッククラウドのものですし、結構工夫が必要。botなどによる悪質なアクセスへの対策がされている。RPAも人間の操作ではなく言ってみればbotとみなされる。(※)
2. 請求書をダウンロード
    ※ 1. と同様
3. ダウンロードしたPDF(請求書)ファイルをメールに添付して購買宛に送信 
    ※超簡単

main_概要

------------- 事前準備 -------------

ロボットを稼働させるPCにおいては、メールやチャットのポップアップなど可能な限り切っておく

動作失敗の確率が下がります。私のように個人で勝手にロボット活用している方は、会社支給の自分の業務用端末でやるしかないので、なるべくロボットの動作を妨げる可能性のあるものは排除します。

Windows 汎用資格情報にAzure Portal へのログイン情報を追加する

RPA 正攻法ですが、重要な認証情報はワークフローに埋め込まないほうが良いです。下の画像のように任意の名前(ここでは AzureDevelopersupport としました)で大丈夫ですので、ロボットを動かすPC ( Windows ) に設定しワークフローでこの情報を呼び出すようにします。

汎用資格情報に追加

強調‗モザイク‗確認‗汎用資格情報に追加


Azure Portal (Azure Developer Supportの請求書をダウンロードするサイト)を開くブラウザを決める

この記事では Edge を使っています。さらに Edge に UiPath 拡張機能をインストールします。インストールしたらInPrivate ブラウザを許可するようにしてください。今回のワークフローでは、EdgeをInPrivateで開き操作していきます。いくつかマイクロソフトアカウントを運用している場合だと、選択を迫られたりするので狙ったアカウントでサインインするのが難しいからです。

強調‗Edge拡張機能

強調‗URL白塗り‗Edgeでの拡張機能確認


パッケージのインストール
UiPathのデフォルト機能ではWindows資格情報を取ってくるアクティビティは含まれていないので、"パッケージを管理"からUiPath.Credentials.Activities を追加インストールします。すると " GetSecureCredential " というアクティビティが使えるようになるので、これを以降の " Azureの認証情報を取得 " という表示名に変えて使用します。

画像11

強調‗GetSecureCredential

請求書をダウンロードするサイトのURLを控える

今回のワークフローにおいて、ブラウザで開くサイトのページ(URL)は決まっています。アクティビティに直接埋め込むので、下の画像(マイクロソフトから毎月届くメールを一部抜粋)のように予めURLを抜き出してどこかにメモしておいてください。

モザイク_強調_mail_ADSI

変数一覧

・strUserName
・sstrPassword
・TheDateOfToday
・dName
変数名は任意で皆さんが分かりやすいもので問題ありません、この記事ではこのように設定しています。スコープ(この変数が使用できる範囲)も必要に応じて絞ってもらっても問題ありませんが、この記事ではワークフロー全体を指定しどこでも使用できるようにしています。
重要
" sstrPassword " だけ少し特殊です。事前準備でインストールした Get Secure Credential から返ってくるパスワードは " SecureString "という専用の変数型に入ってきます。

変数一覧

------------- ワークフローの詳細 -------------

0. シーケンスを設置

このワークフローは少々手こずりポイントはありますが、条件分岐がないのでアクティビティを順々に実施していくシーケンスで作成できます。その意味では簡単です。まずはシーケンスを設置し、その中に以下のようにアクティビティをいくつも設置していきます。これが見た目では一番外側のアクティビティとなり、今回のワークフローそのものとなります
今回は「シーケンス'ブラウザを開いて請求書PDFをDL'」と名付けました(実際にはメール送信も含まれますが)。表示名を変えるのは必須ではありませんが、何をやるかの概要を記載しておくとわかりやすいです。今回は紹介しませんが、アクティビティに注釈をつけたりもできるのでそれでもいいかもしれません。ただ、パッと見てわかりやすいのでオススメします。
荒めの粒度で表示すると下の画像のようになります。

荒い粒度_ワークフロー全体像

1. 事前にメモしておいたURLをブラウザで開く

一番外側のアクティビティ(シーケンス)内の最初の処理として、「ブラウザを開いて請求書PDFをDL」と命名したシーケンスを設定します。これは " ブラウザーを開く "アクティビティです。
そして、このアクティビティに対して
・事前に控えておいた請求書をダウンロードするサイトのURLを指定
・開くブラウザを指定(今回はEdge)
します。

強調‗ブラウザーを開く

大外のシーケンス

合成_ブラウザーを開いて請求書をDL

合成_ブラウザ指定

(ここで一工夫)
業務でいくつかのマイクロソフトアカウントを使用していると、ブラウザが記憶などしたりしていて認証が厄介です。なので、ブラウザをInPrivateとかシークレットウィンドウで開くようにします。さらには、新しいセッション(ウィンドウ)で開くようにします。

強調‗ブラウザーを開く‗プロパティ

2. 更にもう一つシーケンスを入れ子にする

ここでは、" Azureにログインし請求書を取得 " としました。このシーケンスは結構長いです(たくさんのアクティビティを順々に実行させます)。

Azureにログインし請求書を取得

3. Azure ポータルの認証情報を取得

事前に準備しておいたWindows 汎用資格情報 " AzureDevelopersupport " の情報を呼び出すアクティビティを設置します。" Target " にAzureDevelopersupport を指定、ユーザーID/パスワードが返ってくるので、それぞれ変数(sstrPassword、strUserName)に格納します。下の画像のようにプロパティを設定してください。プロパティの Output にこのように指定することで、以降の処理でこれらの変数を指定することで値(ユーザーID/パスワード)を取り出すことができます。

合成‗Azureの認証情報を取得

4. 認証情報入力欄をロボットに認識させ、その欄に入力

認証情報(IDとパスワード)を入力する欄をブラウザ上から探し出し、AzureDevelopersupportで取得した情報からそれぞれ入力させます。それぞれのアクティビティ画面には、"メール、電話" とか "次へ" とか表示されているかと思いますが、

オプションメニュー合成

のように画面上から選択し、ロボットに認識させます。
さてでは、Azureの認証情報を取得に続けて以下のようにアクティビティをつなげて設定していきます。

合成_ID入力欄

ブラウザの動きが遅い場合が予測されるので、成功確率を上げるため"表示されるまで待つ"を"True"にしておきましょう。

前の処理でID入力欄を認識させたので、変数 strUserName からIDを取り出して入力させます。"入力をシミュレート"は"True"にしてください。たまにこれがうまく実行できない場合(アプリの作り)がありますが、基本的にはこのように設定することが推奨です。処理の確実性が上がります。

合成_IDを入力


入力できたので、"次へ"ボタンをクリックです。ここでも"クリックをシミュレート"は"True"にしてください。処理の確実性が上がります。

合成_クリック次へ


今度はパスワードについても同様に設定していきます。

合成_PW入力欄


変数 sstrPassword からパスワードを取り出して入力させます。ここで重要なのですが、アクティビティはType intoではなく" Type Secure Text " アクティビティを使ってください。さもないと失敗します

合成_PWを入力


合成_クリックサインイン

5. サインインして表示された画面から最新の請求書をダウンロード

事前準備で紹介したメールが届くと、最新の請求書のダウンロードリンク元が表示されるようになります。ここからはそのダウンロードリンクをクリックして取得する処理を作成していきます。
まず狙い通りのところをクリックするように、"現在の期間"という画面の部分を認識させます(探させます)。"請求書のダウンロード"というボタンをクリックさせたいのですが、その中でも一番上にあるボタンをクリックさせたいです。過去の請求書は既に連携済みで、新たに発行された最新の請求書を今回取得したいからです。
ちなみに、ここでの"請求書のダウンロード"はPDF(なにかしらのファイルとして)としてダウンロードしてくれるものではありません。あくまでブラウザ上で表示してくれるだけです。なので、以下に続くような少々めんどくさい処理が必要になってきます。

モザイク_注釈_DevelopersupportInvoicePage

合成_現在の期間


ここでは前述した"クリックをシミュレート"が上手くいきません(´;ω;`)
なので、"False"です。

合成_クリック請求書DL


ここまでの処理で、対象となる請求書ページが新規タブで開くので、不要になった請求書ダウンロード一覧のページ(タブ)を閉じます。

請求書DLタブ閉じる


(調整)待機時間の設定
このアクティビティは本流のワークフローとは無関係です。なくても最悪問題ありません。単純に、前のアクティビティの処理が終わって次のアクティビティの処理に移る前に、設定した時間待機させるだけのものです。すぐに次のアクティビティ処理を実行させるわけではなく、その準備が整う時間を作ってあげるという感じです。
でも私のロボット実行環境(PC環境)だと、このアクティビティを設定することでワークフロー成功確率がほぼ100%になりました。逆に設定しなかったり待機時間が短いと成功確率がガクっと下がります。PCのスペック、CPU/メモリ稼働率、ネットワーク環境などでこの待機時間は変わってくると思います。私の環境の場合、10秒が最適でした。
環境要因はそれなりにありますが、記事の前半でも書きましたがセキュアなWeb サイトの作りになっているので、どんなに良い環境でも動きはそれなりに重くなると思います。なので、このアクティビティを挟んで少しだけでも後の処理を遅らせた方が無難と思います。

画像39

6. 新規タブで開いた対象となる請求書ページをPDFとして保存

まずアクティブウィンドウを取得アクティビティを設定します。

アクティブウィンドウを取得

そしてこのアクティビティの入れ子となるシーケンス(Do)に、"ホットキーを押下"アクティビティを設定します。ここでは請求書には必ず組み込まれている(表示される)請求先情報を認識したら、「Ctrl + Shift + s」キーを押すように設定します。
ここで重要なことは、"入力前にクリック"を"True"にすることです。

合成_請求先住所認識_保存ボタン

なぜこんな面倒なことをしているのでしょう?それは、この請求書画面はUiPathから一切要素を認識できない作りになっているからです。画面右上の保存ボタンも人間が操作しないと押せません(´;ω;`)
ゆえに、一回クリックしてこの画面をアクティブにして、キーボードの保存ショートカットキーを実行させるのです。

モザイク_請求書ブラウザ表示


続いて、この請求書をPDFとして保存する処理に移っていくのですが、ファイル名を付けるとき決まった名前ではなく基本的に一意になるようにしたいです。なのでここでは、まず変数 TheDateOfToday に" Now.ToString("yyyyMMdd") "
と設定(代入)しておきます。これで20200603のように処理実行日時を出力できます。
本日日付を変数に代入


そしてさらに、"特殊フォルダーのパスを取得"というアクティビティを設定します。これはPDF保存先を指定する際に活用します。今回はMyDocumentsを選びました。これはどういうことかというと、C:\Users\××××\Documents というようにWindows にログインしているユーザーアカウント(××××)のマイドキュメントフォルダを出力してくれる、といったことが可能なアクティビティなのです。つまり、動作環境における差異や依存度をなるべく下げる工夫です。
ここで変数 " dName " を使います。

特殊フォルダパスアクティビティ展開

特殊フォルダパスプロパティ


そしてやっとファイルに名前を付けて保存の工程です。ここでは、ファイル名入力欄を認識させ、フォルダパスを含めたファイル名を入力させます。
ここでは以下のように設定しました。
Windows にログインしているユーザーアカウント(××××)のマイドキュメントフォルダ配下のAzureInvoiceというフォルダ(予め作成が必要)に、AzureDevelopersupportInvoice西暦日付という名称のPDFファイルを保存です。 

合成_文字入力_ファイル保存

特殊フォルダパスと本日日付ファイル名


はい、そして保存ボタンをクリックです。

合成‗クリック保存


そして、この請求書画面(ブラウザ)も保存処理が終われば不要なので、ショートカットキーで閉じます。

合成_ウィンドウ閉じる

ここまでで一番重要で長い「ブラウザを開いて請求書PDFをDL」と命名したシーケンスが完了です。あとちょっとですべて完成!


(調整)前に使用した待機アクティビティと全く同様の設定で実行
保存場所によっては時間が多少かかったり、次のアクティビティでこのファイルを添付しますし、少し待機を入れる方が無難だと思います。

待機_合成

7. 保存したPDFファイルをメールに添付し送信(最後のアクティビティ)

ここで設定することは
・送信先の指定
・件名、本文の指定
・添付ファイルの指定
です。添付ファイル付きのメールを作成して送信する作業の自動化です。
なので、単純にこれらをどうするかロボットに教えてあげてください。CCに自分が含まれるメーリングリストや自分のメールアドレスを設定しておくと便利かと思います。"添付ファイル"に、先ほどの保存する処理の要領で指定すれば、先ほど保存したPDFを添付できます。

合成_メール送信

添付ファイル指定

ちょっと一工夫: ブレークポイント

この記事で紹介したアクティビティの中で二つ赤い丸がついているものがあったと思います。これは " ブレークポイント " と呼ばれるものです。あってもなくてもロボットの処理に影響を与えません。
ではなぜ使っているのか?
ブレークポイントを設定した状態でデバッグ実行をすると、ブレークポイントで処理が一時停止されます。つまり一気にすべての処理を実行させたくないときに有効です。
この記事の場合では、

確認: 請求書のダウンロードボタンを間違いなくクリックしようとしているか
確認: 請求書PDFを保存する場所と名称が正しいか(狙い通りか)
テスト: ワークフローの修正
 ※メールさえ送らなければ(このアクティビティさえ実行されなければ)、自分の管理下だけで完結する。この記事のメール送信アクティビティが実行されると他の人に影響がでてしまう・・・
防止: メールの誤送信

です。
対象のアクティビティを選択した状態で、下の画像のように " ブレークポイント " をクリックすると設定できます。もしくは " ブレークポイントの切り替え " でも問題ありません。

注意点

・変な場所(アクティビティ)をブレークポイントに設定するとその後の処理が失敗になる可能性がある
    ※このワークフローでいうと、直接クリックを実行するアクティビティなど
・アクティビティを追加や削除すると、設定してあったブレークポイントがずれる可能性がある
    ※ワークフローを修正する場合には、最後にブレークポイントの位置を見直しましょう

二つのブレークポイント_合成

注釈_ブレークポイント設定方法

いかがでしたでしょうか?
そのものズバリで役立つ方はかなり限られると思いますが、紹介したアクティビティで応用できるものはいくつかはあると考えています。
なお、この請求は毎月月初にやってきます。業界や業種や立場にもよると思いますが日本のオフィスワーカーの場合、月末月初は

・(交通費などの)経費精算
・上司やお偉方への報告書提出や会議
・勤怠処理
・諸々の請求書処理 などなど

のストレスの溜まることが一斉に押し寄せることが多いと思います。そんな方々に少しでもこの記事がお役に立てば幸いです。

もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。