
RPAを使用して画面の正常性確認から結果報告までを自動で行う
2018.10.24
昨年末から今年にかけRPA(Robotic Process Automation)という言葉を耳にする機会がかなり増えてきました。
RPAとは単純な繰り返し業務を自動化するテクノロジー、ツールで「働き方改革」という動きとも相まって注目されている分野です。
今回ははその中でも価格、機能面から注目を浴びていて検索数もかなり多いUiPathを使用した定常的な作業の自動化の検証を行ってみました。
※UiPathのライセンス形態はここでは省略しています。今回は検証としてコミュニティ版を使用しています。又環境はWindows7を使用しています。今回はインストール手順は省略させていただきました。。
今回の対応シナリオ
今回は以下のケースのような定期的な作業を自動化するというシナリオで話を進めたいと思います。
- ブラウザを起動し正常性確認を行いたいURLにアクセス
- 正常性確認に使用する画像を特定
- 画像内の文字が意図するものかどうかをOCRで判断
- 文字列が違っている(改変の可能性あり)場合はページのスクリーンショットを取得
- 指定のメール連絡先に画像を添付して送信

ブラウザの自動操作(レコーディング機能)
UiPathを起動し適当なプロジェクトを作成します。
プロジェクトはシーケンスで作成します。

レコーディング -> ウェブの順にクリックするとUiPathの画面がレコーディングバーだけになりますのでここからが始まりです。

ブラウザ(IE)を起動し目的のページに移動します。移動後にレコーディングバーから「ブラウザを開く」をクリックし先ほど起動したブラウザをクリックしてください。今回の確認に使用するページは本ブログ、判定画像は右上のロゴマークとしました。
起動後にレコーディングバーからブラウザを開くをクリックし起動したIEのウィンドウを選択します。
これでブラウザ(IE)を起動し目的のページに移動までが自動化されました。Escキーを押して再度デザイン画面に戻ると今の操作が追加されていることが分かります。

Googleの画像認識(OCR)との連携
次に正常性確認に使用する画像を特定します。UiPathの左ペインには多数のアクティビティがあります。ここでocrと検索すると「OCRでテキストの有無を確認」が出てきます。これを先ほどのブラウザ操作の下にドラッグします。
ドラッグしたアクティビティをクリックして正常性確認に使用する画像を先ほどと同じように指定してください。
するとUiPathでは以下のようになります。本ブログのロゴが表示されています。
ロゴの下に文字列が入力されています。これが解析に期待する文字列です。
本来であれば「JIG-SAW」もしくは「OPS」としたかったのですが
まだ画像解析が発展途上のようで識別できずやむなく「Controlled」としました。。。。

UiPathでは実行中に取得した文字列、配列、真理値などを変数に格納することが可能です。画面下の変数をクリックしexistenceという変数を作成します。型はBooleanを指定、スコープはシーケンス、つまりこの自動実行中にどこからでも変数を参照できるようにします。
又、先ほどドラッグしたOCRにexistenceを設定しています。これで画像解析結果がexistenceという変数に格納されます。

次に画像内の文字が意図するものかどうかを判断する箇所を作成します。先ほどと同じように左ペインのアクティビティから「if」と検索すると条件分岐のアクティビティが出てきますのでこれをOCRの下にドラッグします

スクリーンショットの自動取得とメールの自動送信
それではif文に設定をしていきます。まず条件はexistence = Trueとします。
existenceがtrueであればThenへfalseであればElseに処理が移動します。
今まで同様「screenshot」と検索してして表示された「スクリーンショットを撮る」アクティビティをElseの下にドラッグします。
さらにその下に「saveimage」と検索してして表示された「画像を保存」アクティビティをさらに下にドラッグします。
「スクリーンショットを撮る」アクティビティでは本ブログを表示してあるIEのウインドウを指定します。

画像の保存のための変数とメンテナンス性を考慮して画像ファイルの保存場所を変数にして設定しておきます。
※画像は保存する際は変数の型にimage型を指定しなければいけないので注意が必要です

最後にメールの送信処理を追加します。
今まで同様「Send Outlook Mail Message」と入力して表示されたアクティビティをスクリーンショット保存の下にドラッグします。
追加したメール送信のアクティビティに以下を設定していきます。
これも後々の設定変更に備え変数化して設定をしていきます。
・メールの送信先
・メール件名
・メール本文
・添付ファイル
設定する文字列にはダブルコーテーションで括る必要がありますのでご注意ください。ダブルコーテーションで括らない場合は以下の画像のように変数を参照する場合になります。

これで準備が整いました。IEを閉じ実行ボタンを押すと処理が始まり画像内に「Controlled」の文字列があれば何もせずに終了、それ以外の文字列の場合(今回は設定文字列を変えてテストしました)は指定のメールアドレスに自動で確認結果画像が添付されて送信されてきました。
実際には上の処理はpowershellだけでも出来るのかもしれません。(特に画像認識はブラウザを開く必要性も無いので。。。)
只、上の処理をプログラム化するには知識が必要になりますし何より作成に時間がかかってしまいます。
私自身ほとんどプログラムは出来ませんが、今回UiPathで調べながら作ってみて1時間くらいで出来てしまいました。
例えば実務で担当者が変わり送付先のアドレス変更が必要になった場合でもGUIで上から順に処理を追っていけるので
他の人間でも変更箇所が容易に特定しやすくなることもUiPathを使用するメリットではないでしょうか。
今回のケースでは画像認識の精度がまだ発展途上のようで条件に制約がありましたが
これから精度が上がっていけば自動化できる場面も広がりそうです。
