<img src="//trc.taboola.com/1222697/log/3/unip?en=page_view" width="0" height="0" style="display:none">

2019年7月22日

プロセス爆速化のためのTIPS

22 7月 2019

プロセス爆速化のためのTIPS

こんにちは。
UiPath株式会社の隈元(クマモト)です。

突然ですが "RPAチャレンジ" (http://www.rpachallenge.com/?lang=ja) というサイトを見た、聞いたことはありますか?

RPAチャレンジとは、UiPathが用意した「苗字、名前、会社名、部署、住所、電話番号、メールアドレスの入力項目を持つ顧客情報入力登録システム」のサンプルサイトです。

サイト上からダウンロードできる各データが入った状態のExcelがダウンロードできるのですが、「Excelの各行のデータをWebシステムから登録する」というようなRPAでよくあるプロセスを練習するために使われます。

非常にシンプルなサイトですが、少々癖があり登録ボタンをクリックするたびに、入力項目の順番、レイアウトさらには各inputタグのidが変わります。
UiPathではRPAチャレンジのような癖の強いサイトでも対応することができます。

現実に登録ボタンをクリックするたびに入力項目の順番が変わるようなシステムがあるのかは不明ですが(想像もしたくありませんね)、
「Webアプリのバージョンアップによって入力項目の順番、レイアウト、html構造が変わる」ということはWebシステムではよくあることだと思います。
UiPathは独自の技術である「セレクター」という機能を使って
画像ベースではなく、各UI要素をオブジェクトとして捉えて各アプリの自動化を実現することができるのでアプリのUIデザインに変更に強いプロセスを開発することができます。

このプロセスを完成させるにはちょっとしたテクニック(といってもシンプルな)がいるのですが、今日はそのテクニックに焦点を当てるのではなく
「爆速RPAチャレンジ」プロセスを作るにはどうしたらいいかのTipsを紹介したいと思います。
ここでのTipsはRPAチャレンジだけではなく実際の業務にも役に立つはずです!

「そもそもRPAチャレンジをクリアすることができない」という人は UiPathの教育プラットフォーム UiPath Academy (https://academy.uipath.com/learn) の「Level 1 Foundation (基礎)トレーニング」の レッスン6でRPAチャレンジを題材にした講義がありますのでそちらをご覧ください。 ここ最近、日本語の教材コンテンツがかなり充実してきたので、 「一昔前に登録した、英語で挫折した、、、」という人は是非再チャレンジしてみてください! 英語音声・日本語字幕ではなくてしっかり音声・映像画面の全てが日本語化されたコンテンツが揃っております!

[参考] UiPath Academy 「レッスン6-4-セレクター(応用)」

 

Tips紹介に入る前に高速化チューニングを行ったプロセスの実行動画をお見せします。 (同じ操作を5回行い、そのベストタイムと平均タイムをResultとしてお見せします。)

 

高速RPAチャレンジ

 

平均タイム : 1824.8 ミリ秒
ベストタイム : 1798 ミリ秒

どうでしょう。
UiPathは本気を出すとこんなに爆速な自動化をすることができるんです!
(動画では録画ソフトを実行していたのでCPUに負荷がかかっていましたが、
録画ソフトを実行しない状態でのベストタイムは 1109 ミリ秒でした!)

 

best_time_1109msec

 

それではどうやってこんなに早いプロセスを作成したのかの種明かしとなる、
「UiPathのプロセス爆速化のためのTIPS」を紹介したいと思います!!

【注意】
以下のTipsはプロセスの高速化を達成することに特化したTipsとなります。
業務で各Tipsの内容を適用させる際は、十分な検証を行いプロセスが安定的に動くことを確認してからの本番運用を推奨します。

 

Tips ①「実行前の待機時間(Delay After)」, 「 実行後の待機時間(Delay Before)」の調整

image2019-7-9_18-26-41

 

「文字を入力(TypeInto)」や「クリック(Click)」などのUI要素の操作を実行するアクティビティには、「実行前の待機時間(Delay After)」, 「 実行後の待機時間(Delay Before)」 などのプロパティがあります。
これらは何も入力しないと既定の値(実行前の待機時間: 200ミリ秒、実行後の待機時間: 300ミリ秒、)が反映されますが、これらを既定の値より小さくする(0ミリ秒など)事で各操作の反映を高速化することができます。
なるべくUI要素操作系のアクティビティでは小さい値を設定してください。
ただしWebブラウザ画面遷移の直後に時間を置かずにUI操作をすると操作を失敗することがあるので、対象アプリのUIの変更のタイミングに気を付けながら、各プロパティの値を調整して安定かつ高速なプロセスを目指しましょう。

私の端末では開始・登録ボタンを押してから6ミリ秒後に「文字を入力(TypeInto)」を発動するように調整したところ、安定性も確保できました。

 

Tips ②「〇〇をシミュレート(Simulate〇〇)」を活用(または「ウィンドウメッセージを送信(SendWindowMessages)」を活用)

image2019-7-9_18-27-52

 

UI要素を操作するアクティビティの多くには「〇〇をシミュレート(Simulate〇〇)」というプロパティがあるので、これをチェックにした状態でプロセスを作成してください。
これにより、対象のアプリの技術を用いて入力をシミュレートします。
この入力方法は最も早くバックグラウンドで動作します。
例えば「文字を入力(TypeInto)」のデフォルトの入力方法は一文字一文字人間が入力するような操作になりますが、「文字をシミュレート(SimulateType)」にチェックマークが入っているとコピペのように文字が一気に入力されます。

既定では「〇〇をシミュレート(Simulate〇〇)」にはチェックがはいっていないので明示的に設定する必要があります。
各アクティビティのプロパティを一つ一つ変更するのは面倒なので、対象のアクティビティを Ctrl を押した状態でクリックで複数選択してから一気にプロパティを変更しちゃいましょう。

シミュレート操作がうまく動作しないアプリの場合は「ウィンドウメッセージを送信(SendWindowMessages)」にチェックをいれてみてください。
(「〇〇をシミュレート(Simulate〇〇)」はFalseにする必要があります。)
「ウィンドウメッセージを送信」は「シミュレートで〇〇(Simulate〇〇)」よりも早くありませんが、デフォルトの方法よりは速度を上げることができます。
「シミュレートで〇〇」「ウィンドウメッセージを送信(SendWindowMessages)」が双方Falseの場合発動するデフォルトの方法は最も遅く、バックグラウンドで動作しませんが全てのデバイスとの互換性を有します。

今回のRPAチャレンジの場合は「〇〇をシミュレート(Simulate〇〇)」は使えそうですので全てのUI要素を操作するアクティビティで「〇〇をシミュレート(Simulate〇〇)」にチェックを入れておきます。

 

[参考] UiPath Academy 「レッスン5-1:UI上の高度な操作 (入力/出力 方法)」

 


Tips ③「キー入力間の待機時間(DelayBetweenKeys)」の調整

image2019-7-9_18-29-21

 

「文字を入力(TypeInto)」に対してTips 2をトライして、デフォルトでの入力でしか動作が安定しないことが分かった場合は、「キー入力間の待機時間(DelayBetweenKeys)」(規定値は10ミリ秒)を短くすることで高速化に寄与することができます。

ただし「入力をシミュレート」にチェックがついている場合は、コピペのように文字が一気に入力されることから、こちらの値を変更しても特に何も変わりませんので、今回はデフォルトのままにしておきます。

 

Tips ④「ウィンドウにアタッチ(Attach Window)」の利用を避けたプロセスを試してみる

 

challenge

 

「ウィンドウにアタッチ(Attach Window)」を使っての相対位置でのUI要素の取得と、各アクティビティのセレクターでアプリケーションウィンドウから指定した場合の動作とを比べて早くなる方を利用してみましょう。

今回は上の画像のようにアプリケーションウィンドウ(<html title='RPAチャレンジ' />)から要素を指定したほうが若干早かったのでこちらの方法を利用しております。

 

Tips ⑤「並列(Parallel)」の利用

並列

「並列(Parallel)」は少し癖のあるアクティビティなので利用の際は注意が必要ですが、うまく使うとプロセスの爆速化に非常に寄与してくれる頼もしいアクティビティです。(To UiPathエンジニア 「並列(Parallel)」の詳しい解説ブログの執筆お待ちしております!☆)

今回のRPAチャレンジでは1登録作業をする際に「全ての入力作業を並列的に行う」ようなプロセスにしたところ1000msecほど速度を上げることができました。

いかがでしたか?
ここで得た知識を使って皆様がさらなるRPAエンジニアの高みを目指してもらえるようになればと思います!そして私たちと一緒にデジタルトランスフォーメーションを実現しましょう!

 

高速_RPA_Challenge.zip

 


by Masaki Kumamoto

Show sidebar