じっぱひとからげ

十把一絡げになんでもかんでもつづる。

UiPath入門(2)〜Recordingで作業内容を取り込んで再生する

UiPath入門(1)でも書いたように、UiPath Community Editionのインストール方法については、Qiitaにまとめがあるのでこちらを参照して欲しい。
qiita.com

UiPathを利用した2つの作り込みの方法

UiPathの自動化の作り込みの方法は大きく分けて以下2つがある。

(1)Recording機能で作業内容を取り込む(今回はこちら
(2)Activityを並べて作業内容を作り込む

RPAの製品は(1), (2)いずれか一方に強みを持つ製品が多い中、UiPathは(1), (2)いずれの方法でも自動化の作り込みが簡単にできる。もちろん、(1)で作ったものを(2)でメンテナンスすることもできるし、(2)で作ったものに(1)で付け足すことも可能だ。

ここではまず、もっとも簡単な(1)のRecordingを利用した作り込みの方法を説明する。

まずはプロジェクトを作成する

プロジェクトの作成はBlank、Simple Process 、Agent Process Improvement、Transactional Business Processの4つがあるがまずは空のプロジェクトであるBlankを選択する。
f:id:jippahitokarage:20170716084514p:plain

Nameに任意のプロジェクト名を設定する。Locationは保存するパス、Descriptionにはプロジェクトに関する任意のコメントをつけられる。入力を終えたらCreateをクリックする。
f:id:jippahitokarage:20170716084659p:plain

これでまずはからのプロジェクトが出来上がり。今後の説明のために画面の各ペインについて説明しておく。ペインは自分の作業のし易いようにドラッグ&ドロップでレイアウトを変更できるが、説明の都合上デフォルト配置のまま進めることにする。

大きく分けて3つのエリアを利用して作業を進める。このレイアウトはいわゆるEclipseVisual StudioなどのIDEを似たような構成になっているので、馴染みやすい人も多いかもしれない。
f:id:jippahitokarage:20170716085734p:plain

(1)アクティビティ
UiPathの自動化操作の最小単位を「アクティビティ」と呼び、このアクティビティペインの中に部品として定義されている。UiPathではこのアクティビティをつなげて自動化のシナリオを作成していくことになる。

(2)ワークフローデザイナ
ワークフローデザイナ上にアクティビティを配置する。具体的にはアクティビティペインからワークフローデザイナにドラッグ&ドロップすることで配置ができるので、必要な部品をアクティビティペインのSearchから検索して、配置するという繰り返しによって自動化シナリオを作成する。また、本記事で紹介するRecordingによって実行した作業はアクティビティとしてこのワークフロー上に記録される。

(3)プロパティ
各アクティビティに対するパラメータを指定する。

下準備:使えるアクティビティをすべてインストールする

UiPath Community Editionはデフォルトで最小限のアクティビティしか用意されていないので、使うかどうかはさておき、使えるものはすべて使える状態にしておきたい。

アクティビティペインの「パッケージマネージャ」アイコンをクリックする。
f:id:jippahitokarage:20170716093855p:plain

AvailableのAllを選択すると、現在インターネット上からダウンロード&インストールできるパッケージの一覧が表示される。
f:id:jippahitokarage:20170716093912p:plain

必要に応じてインストールすれば良いが、RPAは「与えられた道具の中でいかに実装するか」というアイディアによって作り方が決まることもあるので、使える道具は使える状態にしておいたほうが良い。

f:id:jippahitokarage:20170716093920p:plain

名前からも想像がつくと思うが、MicrsoftのOffice製品、例えばExcelを操るためのアクティビティもパッケージとして提供されているので、RPAで自動化したいExcelまわりの定型作業もこれらのパッケージのアクティビティを利用することで簡単に実装できる。

インストール後はアクティビティの数が増えている。これで使える道具が増えた。

f:id:jippahitokarage:20170716094422p:plain

準備が整ったところでRecordingしてみる

せっかくなので、私自身があったらちょっとうれしいかも と思う自動化テーマを実装するという流れで説明することにする。

テーマと背景

(1)zaimにログインする(今回はここまで

(2)家計簿データをダウンロードする

(2)家計簿から「未分類」を抽出する

(3)LINEに未分類の一覧を通知する

わが家の家計簿はzaimで管理されている。基本的にはクレジットカードの利用履歴や銀行の口座情報はすべてzaimに魂を売ることで登録は自動化されている。ただ、zaimも万能ではないので登録された費目が判別できずに「未分類」となってしまうケースも存在する。この「未分類」については月末に棚卸しをするときに「これなんだっけ」と言いながら記憶を頼りに思い出すという活動は意外と面倒なので、記憶の鮮度が高いうちに通知を受けて、都度更新することを促すことを目的としている。

zaimユーザではない人は、TwitterでもFacebookでもGoogleでもなんでも良い。WebサービスにユーザIDとパスワードを入力するような画面で試してみて欲しい。

ブラウザを開き指定のURLを開く

まず、ブラウザと開くURLを設定する

Recordingボタンを押し、「Web」を選択する。Recording時のモードはBasic、Desktop、Web、Citrixと4つに分かれているが、詳しい説明はここでは割愛する。ブラウザで動くWebアプリを操作する場合は、Webを選択しておけば良い。

f:id:jippahitokarage:20170716100710p:plain

画面をポチポチいじり始める前に、「どのブラウザで」、「どのサイトを開くのか」という初期設定が必要なので、Web Recordingのメニューから、OpenBrowzerを選択する。

f:id:jippahitokarage:20170716100716p:plain

事前に目的のサイトを開いておいたブラウザにカーソルを運んでクリックする(ブラウザ上のどこでも良い。マウスオーバーで全体が選択されるように色が変わる)と、メッセージボックスにサイトのURLが抽出されるので「OK」をクリックする。

f:id:jippahitokarage:20170716100726p:plain

ひとまずここで一度、Web Recordingの画面からSave & ExitでRecordingを保存してみる。

f:id:jippahitokarage:20170716101746p:plain

画面中央のワークフローデザイナにアクティビティが追加されているのが確認できる。このアクティビティは、Recordingで指定した「ブラウザ」に対して「URL」を入力して開くという動作が記録されている。つまり、この時点でこのワークフローを再生すれば、自動的にInternetExplorerが起動し、zaimのログイン画面を表示することになる。

f:id:jippahitokarage:20170716102050p:plain

ブラウザの自動起動&指定サイトを開く動作を再生してみる

ただブラウザを開き、指定したサイトを開くというだけの自動実行を体験してみよう。動画の再生ボタンのようなRunをクリックする。

f:id:jippahitokarage:20170716102531p:plain

クリックした瞬間にUiPathの画面が最小化され、InternetExplorerが起動し、zaimのログイン画面が表示される。

以上。いまはまだこれだけだ。このように少しずつRecordingしてはデバッグし、Recordingしてはデバッグするという流れで自動化を作り込んでいく。UiPathにはRunだけでなく、正しいデバッグの方法(Break Pointの設定 / Step-into /Step-over)も用意されているがまだここでは紹介しない。

次はログイン情報を実際に入力させてみる。

Recordingの続きからログイン情報入力をRecordingする

Runを押してInternetExplorerが起動し、ログイン画面が出てきたところで再びUiPathの画面に戻ってくるので、この画面のままここでRecordingボタンを押す。もちろん先ほどとおなじWebモードでRecordingする。

メールかIDと書かれたフォームをクリックすると、UiPathの独自仕様のメッセージボックスが表示される。このままこのメッセージボックスに従ってメールアドレスやIDを入力するだけで良い。

f:id:jippahitokarage:20170716103745p:plain

下のチェックボックスは、以下2つの動作を付加するようになっている。

  • Type password
    • ここにチェックを入れると、入力される文字列が第三者に知られてはならないパスワードであることを意図した扱いにできる。具体的には、入力された文字列がUiPath上でも閲覧できないように●●●●●●●という形で表現する他、UiPathのプロジェクトファイルには平文で出力されず、暗号化された形で保存される。このあたりはUiPathのかゆいところに手が届く仕様だ。どのように使われていることが強く意識されている。詳しくは後述する。
  • Empty Field
    • 入力前にすでにフィールドに文字列が入っていた場合は「まず空っぽにしてから入力」する。基本はチェックを入れておいたほうが良いケースのほうが多いだろう。

実際に、パスワードを入力する。

f:id:jippahitokarage:20170716103751p:plain

ログインボタンを押す。

f:id:jippahitokarage:20170716103800p:plain

ログイン後の画面は、わが家の家計が丸出しなので省略するとして、ログインが正常に完了したら上記手順同様Save&ExitでUiPathの画面に戻る。ここで一つ非常に重要なことを覚えておいて欲しい。

Recordingを中止するには右クリックを押す

さて、とりあえずここまでRecordingしたから止めよう。というときは「右クリック」。これはUiPathの公式の使い方動画を見ていても気が付かない。Recordingを開始して、Recordingが終わったら右クリック。これは非常に利用頻度が高いので覚えておいて欲しい。

というわけで、メールアドレスとパスワードを入力し終えたら、「右クリック」をおして「Save&Exit」。

f:id:jippahitokarage:20170716103808p:plain

さきほどの、ブラウザを開いて指定したURLを開くというアクティビティの下に、新しいアクティビティが生成されているのがわかる。

ここまできたら、例によって動作させてみよう。
始めるまえにzaimをログアウトしてから、InternetExplorerを閉じる。

もうすでに気づいている人もいると思うが、ここであえてzaimをログアウトしているのは、Cookieにログイン情報が残っていると、ログイン画面がすっとばされて、せっかく作ったログインシナリオが動作しないからだ。自動化は「どのような画面から始まるのか」を想定してつくる必要があるので、ログインしていない前提で動き始めるのか、ログインしている前提で動き始めるのか、はたまた、ログインしているかどうかifで分岐するのか、といった設計も必要になってくる。これはUiPathだから、RPAだからという話ではない。情報処理における一般的な話である。

Runしてみよう。zaimユーザではない人は試しにGoogleの検索窓にでも文字列を入力してみると良いかもしれない。きっとうまく動いたはずだ。やりたいことをやりたい通りにRecordingするだけで自動化が実装できるのはUiPathの強みであるといえる。

ひとまず、ブラウザを起動し、目的のサイトを開き、ログインするところまでの作業をRecordingで取り込むことができた。

UiPathの優秀なところ

Waitをいい感じに入れてくれるUiPath

ブラウザを起動したり、サイトを開いたり、リンクしたり、という一連の流れの中で「読み込み時間が長すぎたらどうする」ということが気になる人もいるかもしれない。

事実、他のRPAツールでは次の画面に遷移しようとするときに、次の画面に登場することがわかっているelementが現れるまで待つということを具体的に指示しなければならないものもある。ここで画面遷移が完了したことを明示的に理解させておかなければ、画面遷移前にメールアドレスやパスワードを入力しようとして「そんな入力先はない」と入力先がnullであることを示すエラーを返すものもある。一方、UiPathはやりたいことだけに集中していれば、前後の「だいたいの場合は必要になるであろう前処理・後処理」は意識せずに実装ができてしまうのである。

もちろん、ブラウザとExcelなど複数プロセスをまたいだ処理の場合は、UiPathでも明示的にWaitを設定する必要が出てくるが、同じプロセスや同じWebアプリの中の処理を継続する場合であれば、やりたいことをサクサク実装できる。

パスワードは暗号化して保存される

前述の「Type Password」を利用して入力された文字列は、UiPath上は以下のように暗号化されて保存される。暗号化された文字列をフォームに入力したい場合は変数として用意された"Password1"として扱うことになる。

f:id:jippahitokarage:20170716113453p:plain

RPAは「人の代わりに定型作業を実行する」という思想に基づくものであるという性質上、「その人」とおなじ権限」を持つ必要が出てくる。RPA専用のユーザとパスワードを作成して自動化を実装するのが良いのだが、業務によっては「人 対 IDは1:1」というように人に紐付かないIDを許容しないというセキュリティポリシーの業務アプリケーションもあることだろう。

このようなことが事実としてあるということを見越したかのように、ユーザIDやパスワードを暗号化して保存することを標準機能として搭載しているあたりは、やはりかゆいところに手が届くと評価せざるを得ない。

暗号化されたこのパスワードが、プロジェクトごと他の端末にコピーされたときにも機能してしまうのかどうかは未検証だが、おそらくUiPath側で持つ固有のIDを入力に含めたハッシュ値になっていて、他の端末にコピーしてもパスワードは復号化できない仕様になっているのではないかと想像している。確認出来次第、本記事にも反映する。

まとめ

(1)zaimにログインする(今回はここまで)

(2)家計簿データをダウンロードする

(2)家計簿から「未分類」を抽出する

(3)LINEに未分類の一覧を通知する

ひとまず、ブラウザを起動し、ログインするところまでの自動化を実装できた。次回は、作り進めていく上でデバッグを行う方法と作業をしやすくするためにワークフローを見やすくする方法について説明を予定している。

UiPath入門シリーズはこちら

blog.jippahitokarage.com