キャスレーコンサルティング 技術ブログ

RPA開発ソフトUiPath Studioで、メール送信ロボットを作成してみた

Posted on 12月 06, 2017

皆様こんにちは。
キャスレーコンサルティングSI(システム・インテグレーション)部の梅澤です。

今回は、RPA開発ソフト「UiPath Studio」を使用して
メール送信を行うロボットを作成しましたので、作成したロボットをご紹介したいと思います。

先ずは、RPA、UiPathの説明からさせて頂きます。

1.RPAとは

Robotic Process Automationの略で、ロボットによる業務自動化の取り組みを表す言葉です。
人間が行う業務をロボットに代行させることで、
作業負荷の軽減や人員コストの削減をさせることが、主な目的となります。

本記事では「ロボットを作成して、人間の代わりにブラウザやアプリケーションの操作を行わせる」くらいの認識で
問題ありません。

2.UiPath Studioとは

UiPath社が提供している、RPA開発ソフトです。

RPAソフトウェアは他にもあるのですが、
UiPath Studioには、「Community Edition」というバージョンが用意されています。
Community Editionは、個人利用等の目的であれば無償で利用できるため、
今回は、UiPath Studioを選択しました。

3.ロボットの紹介

それでは、ロボットの紹介に移りたいと思います。

実行環境

今回の開発で使用した、ブラウザ・アプリケーションは以下の通りです。
・UiPath Studio Community Edition (ver 2017.1.6522)
・Internet Explorer 11 (ver 11.0.9600.18816)
・Microsoft Excel 2016

実行フロー

実際の画面を基に、大まかな処理フローの紹介をします。

実行フロー_ロボット構成

大きく4つのブロックがあり、それぞれのブロックで以下のような処理を行っています。

①. Excelファイルから、ログイン情報、メールの宛先/件名/本文を取得してデータテーブルに格納する
②. データテーブルから、変数に値をセットする
③. ブラウザを起動して、Gmailにログインする
④. メールを作成して送信する。送信後、ブラウザを終了する

UiPathでは、処理を格納したブロックや処理そのもののブロックのことを「アクティビティ」と呼んでいます。

①~④のアクティビティを格納している、Flowchart_Mainというブロックも「Flowchart」というアクティビティであり
名前の通り、フローチャート図のようにアクティビティを配置できるアクティビティです。

また、アクティビティには「Display Name」と呼ばれる、製作者の任意で名付けることが出来る
プロパティが設けられています。

アクティビティの上部に表示されている「Sequence_GetSetting」や「Flowchart_LoginGmail」といった名称は
実際のアクティビティ名ではなく、そのアクティビティに設定されている
「Display Name」が表示されているため注意が必要です。

「Display Name」プロパティのデフォルト値はアクティビティ名であるため、
基本的にはデフォルト値の状態か、「アクティビティ名 + 処理概要」のような状態にしておくと良いと思います。

それでは、①~④のアクティビティに設定した処理を順番に確認していきます。

①.Excelファイルからログイン情報、メールの宛先/件名/本文を取得してデータテーブルに格納する

早速、実際のUiPathの画面で処理内容を確認します。

①-1_GetSettingTable構成

「Read Range」アクティビティは、対象のExcelファイル、シート名、読み込み範囲とするセル番地を指定して
取得したデータをDataTable型の変数に格納するアクティビティです。
読み込み範囲は、開始セルのみを指定することで、そのセルを開始点にシート全体を読み込むことが出来ます。

今回は、プロジェクトフォルダ配下のSettingフォルダに用意した
Setting.xlsxファイルのSettingシートから、A1セルを開始点に読み込んだデータを、
予め用意しておいたSettingDatatableというDataTable型の変数に格納しています。

Setting.xlsxの中は以下の通りです。
今回は、CCとBCCは利用しないため空欄としています。

①-2_Settingファイル内容

A列に検索する際に使用するキー名を設定して、B列に実際に使用する値を設定しています。

2つの目の「Assign」アクティビティは、代入演算子と同じ役割を持っています。
UiPathでは、vb.netの関数が使用できるため、「Assign」アクティビティに
以下のように式を設定して、SettingDatatableの1カラム目に主キーを付与しています。

settingDataTable.PrimaryKey = new DataColumn() {settingDataTable.Columns.Item(0)}

以上が「①.Excelファイルからログイン情報、メールの宛先/件名/本文を取得してデータテーブルに格納する」の
処理内容となります。

②.データテーブルから変数に値をセットする

先ずは、UiPathの画面から処理内容を確認します。

②-1_GetSetting構成

「②.データテーブルから変数に値をセットする」は、①の処理にて、SettingDatatableに格納したデータを
それぞれの変数へセットすることが、主な内容となるため、
「Assgin」アクティビティが連続しているだけの、シンプルな構成になっております。

データテーブルからの値の取得は、Findメソッドを使用しています。
各「Assgin」アクティビティには、以下の式を設定しています。

変数名 = settingDataTable.Rows.Find(キー名).Item(1).ToString

それぞれの変数は基本的に、String型で作成していますが、パスワードの変数だけはSecureString型で作成しています。
※SecureString型で作成した理由については、「③.ブラウザを起動して、Gmailにログインする」にて説明します。
そのため、データテーブルより取得した文字列を、SecureString型にキャストしてパスワードの変数にセットしています。

以上が「②.データテーブルから変数に値をセットする」の処理内容となります。

③.ブラウザを起動して、Gmailにログインする

最初に、UiPathの画面から処理内容を確認します。

③-1_LoginGmail構成

「Open Browser」アクティビティは、特殊なアクティビティで、開いたブラウザに対して
どのような操作を行わせるかを、アクティビティ内に記載することが出来ます。

「Open Browser」アクティビティを展開すると以下のようになります。

③-2_OpenBlowser構成

アクティビティ上部に記載されたURLを開いた後に、「Flowchart_GmailLogin」に記載された内容を実行します。
URLには、Gmailのログイン画面を設定しています。

しかし、Gmailのログイン画面は、ユーザーがログインしていなければログイン画面に
ユーザーが既にログインしている場合は、そのユーザーの受信トレイの画面に遷移してしまいます。

そのため、ログイン画面が取得できた場合は、ログイン処理を行い
取得できなかった場合は、一度ログアウトをしてからログイン処理を行うようにロボットを作成しました。

では、「Flowchart_GmailLogin」のStartから順番に処理の解説を行います。

③-3_On Element Exists

「Element Exists」アクティビティは、指定したUI要素の存在チェックを行うアクティビティです。
戻り値にboolean型の変数を指定することで、存在チェックの結果を取得することが出来ます。

以下のGmailのログイン画面の存在チェックを行うことで、ログイン処理を行うか
ログアウト処理を実施した後、ログイン処理を実行するかを判断しています。

③-4_Gmailログイン画面

「Flow Decision」アクティビティは式の評価を行い、分岐を制御するアクティビティです。
存在チェックの結果を実際に判定しているのは、「Flow Decision」アクティビティとなります。

③-5_FlowDecision

「Click」アクティビティは、名前の通り、指定したUI要素をクリックするアクティビティです。
マウスクリックやマウスボタンの種類を設定できますが、今回は左ボタンのシングルクリックのみを使用しています。

③-6_False時の処理

クリックを指定した箇所を、実際のブラウザにて確認していきます。

ユーザアイコンをクリックして、表示されたログアウトボタンをクリックします。
ログアウトボタンをクリックした時点で、ログアウト処理が行われます。

③-7_ログアウトその1

ログアウト処理が行われると、過去にログインしたユーザーアカウントを利用したログイン画面が開きますが
過去にログインしたアカウントと、今回使用するアカウントが同じであるとは限らないため、
一度、ユーザーアカウントの選択画面までクリックして移動します。

③-8_ログアウトその2

「別のアカウントを使用する」をクリックします。
ここをクリックすることで、想定していたログイン画面まで移動することが出来ます。

③-9_ログアウトその3

ID・パスワードを入力する処理を確認します。

③-11_ログインその1

「Type into」アクティビティは、指定したUI要素にテキストを入力するアクティビティです。
Setting.xlsxから取得したユーザーIDを引数にセットすることで、Gmailのログイン画面にユーザーIDの入力行います。

「Type secure text」アクティビティは、指定したUI要素にテキストを入力するアクティビティなのですが
機密を守る必要のある、テキストを入力するときに使用します。
パスワード等の情報は機密情報であるため、「Type into」ではなく「Type secure text」にしています。

また、「Type secure text」はSecureString型の文字列のみを引数として受け付けます。
そのため、パスワードの変数はString型ではなく、SecureString型を使用しています。

それでは、実際のブラウザにて動作を確認します。

メールアドレスを入力し、「次へ」のボタンをクリックします。

③-10_TypeIdPass構成

パスワード入力画面へ遷移するため、パスワードを入力して
「次へ」のボタンをクリックします。

③-12_ログインその2

これにてGmailへのログインが完了します。

以上が「③.ブラウザを起動して、Gmailにログインする」の処理内容となります。

④.メールを作成して送信する。送信後、ブラウザを終了する

先ずは、UiPathの画面から処理内容を確認します。

④-1_sendMail構成

ここでも「Element Exists」アクティビティと、
「Flow Decision」アクティビティを組み合わせたロボットの制御が登場します。

ロボットに、ブラウザやアプリケーションの操作をさせる場合、
想定している画面に遷移できている事の確認は、必要不可欠な要素であるため、
これらのアクティビティの組み合わせは、頻繁に利用することになると思います。

「Attach Window」アクティビティは、既に開いているウィンドウにアタッチして、
設定したアクティビティを実行をします。
「Open Browser」アクティビティと同様、内部にアクティビティを配置することで、
アタッチしたウィンドウに対して、アクティビティを実行させることが出来ます。

「Attach Window」アクティビティを展開すると、以下のようになります。

④-2_attach window構成

「Send Hotkey」アクティビティは、キーボードショートカットを送信するアクティビティです。
Gmailでは、「Ctrl + Shift + Cキー」でCCの入力タブを表示し、
「Ctrl + Shift + Bキー」でBCCの入力タブを表示することが出来るため、
「Send Hotkey」アクティビティを使用して、これらのタブを表示しています。

「Set To Clipboard」アクティビティは、名前の通り、設定した値をクリップボードにコピーするアクティビティです。

メール本文の入力だけは「Type Into」アクティビティではなく、
「Set To Clipboard」アクティビティでメール本文をクリップボードにコピーし、
「Send Hotkey」アクティビティで「Ctrl + Vキー」を送信することでメール本文の貼り付けをさせています。

これには理由があり、「Type Into」アクティビティを実行すると、
実際にキーボードで入力しているように1文字ずつ指定したUI要素に表示されます。
これをメールの本文などの、長い文章になりがちな項目に対して実行すると、
ロボットの実行時間が長くなってしまうためです。

それでは、実際のブラウザにて動作を確認します。

「作成」ボタンをクリックし、新規メールを作成する。

④-3_メール送信その1

キーボードショートカットを送信し、CCとBCCの入力タブを表示する。
タブを表示後、To・Cc・Bcc・件名を入力し、本文を貼り付ける。
最後に、「送信」ボタンをクリックする。

④-3_メール送信その2

これで、Gmailからメールを送信することが出来ました。
しかし、メールを送信しただけはロボットの処理は終わりではありません。

「Flowchart_SendMail」に戻り、後続の処理を確認します。

④-1_sendMail構成

「Log Message」アクティビティは、UiPathのログファイルと
ログウィンドウにメッセージを出力するアクティビティです。
メール送信処理とは直接的な関係はありませんが、
ロボットが誰にどのようなメールを送信したのかを記録するために設定しています。
ロボットを実行すると、以下の赤枠内のようなログを出力します。

④-4_Log Message内容

ログの出力後は、ブラウザの閉じるボタンをクリックして、ブラウザを閉じます。

以上が「④.メールを作成して送信する。送信後、ブラウザを終了する」の処理内容となります。

①~④の処理内容の解説をしましたが、如何でしたでしょうか。
正直な所、画像と文章だけではいまいちピンとこない点も多いと思います。

そのため、ロボットを実行した際の動画を用意しました。
解説を思い出しながら、動画をご覧いただければと思います。

Gmail送信ロボット動画

4.最後に

「UiPath Studio」によるロボット開発は、想像していた開発よりも難しくなく、
楽しく開発することが出来ました。

RPAは、現在話題になっている分野のため、
これを機会にロボット開発にチャレンジしてみては如何でしょうか。

最後までご閲覧頂き有難うございました。


採用情報

  • Profile
    キャスレーコンサルティングの技術ブログです。
    当社エンジニアが技術面でのTips、技術系イベント等についてご紹介いたします。
  • CSV社長ブログ
  • チーム・キャスレーブログ