5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UiPath Advent Calendar (produced with UiPath Friends)Advent Calendar 2021

Day 3

【UiPath】品質の高いコードとは(中編)

Last updated at Posted at 2021-12-03

はじめに

この投稿は、RPAツール「UiPath」の 実装ポイントをまとめたものです。
量が多いので、記事を数回に分けます。今回は、中編 として「安定性・効率性」について書きます。

UiPath Adventカレンダーの 3日目 の記事でもあります。

前編の記事はこちら

UiPath公式の「品質の良いコード」とは?

UiPathには、公式のコーディング規約があり、その目的は以下のように書かれています。
image.png

これを以下のように分類し「コーディング規約に書かれている事」と「自分が見聞き、経験、実践している事」をミックスして、紹介します。

ルール仕組み
 ◆ 一貫性  (命名規則や処理の構造などが複数のワークフローで統一されている)
 ◆ 可読性  (読みやすく、処理の意図が把握しやすい)
 ◆ 再利用性 (作成済・テスト済のワークフローをそのままの形で再利用しやすい)
安定性 効率性
 ◆ 効率性  (少ないリソースで高速に動作する)
 ◆ 安定性  (安定して動作する)
保守
 ◆ 保守性  (どこを修正すべきか分かりやすく、また修正による影響が予測しやすい)
 ◆ 信頼性  (エラーが発生しにくく、また発生した場合でも回復が容易である)
 ◆ 安全性  (機密情報を不正アクセスから守る)

効率性

⚫ 効率性  (少ないリソースで高速に動作する)

最初は「処理の効率性」の話です。実現するには
「効率性」のために出来る、具体策としては以下があげられます。

- 1)処理に時間がかかる部分・リソースを食う処理を把握する
- 2)繰り返しの中では処理を極限まで効率化する
- 3)処理を2段階に分けて実行する(データを絞って読み込むとか)
- 4)並列処理で待機時間を減らす

まず、非効率=「処理に時間がかかる箇所」または「リソース(CPU/メモリ)」を特定する必要があります。ログ出力を小刻みに入れて、処理に時間がかかっている部分を特定したり、タスクマネージャーで「リソース使用状況」をチェックをしたり。

また、良くあるのが「繰り返し処理」の中で、無駄な処理(例:不要なログ出力/不要な代入など)があり、数十回、数百回のループなら大した事無いのですが、数千、数万回のループだと気になってしまうほど遅くなることがあります。(1回1秒なら、10000回で10000秒=166分)

大きめの処理で時間がかかっている場合、2つに分けて実行すると効率的になることがあります。例えば、DataTableのSelect条件を複数書くよりも、1つの条件でSelect実行を繰り返すほうが早いこともあります。

UiPathには並列処理のアクティビティがあり、処理のアイドル時間を有効活用することが出来ます。ただし、非同期な処理を行うことは難しく、仮に出来たとしてもメリットが少ない(早くない)事もあるので、事情がない限り、非同期処理は諦めたほうが良さそうです。(チャレンジするのは良いことですが)

安定性

⚫ 安定性  (安定して動作する)

続いて、安定性の話。不安定になりがちなRPAでは、非常に大事な要素です。
実現するには、例えば以下のような具体策があります。

- 1)セレクター認識を安定させる
- 2)リトライをうまく使う
- 3)画像認識を避ける
- 4)環境差異を減らす

セレクター認識を安定させるには、いろいろなアプローチがあります。
UiPathが公式に纏めてくれているテクニックがあるので、ココでの言及は割愛します。

一時的エラーがある処理で、繰り返せば成功する場合は「リトライで自動チャレンジ」する事できますが、エラーをよく分析して、フローを実装する必要があります。大事なことは「繰り返し実行しても良い処理なのか」という事です。登録処理などは「実は成功している」事もありえるので、リトライする前にデータ登録済みかをチェックするなどの考慮が必要になることも。

また、要素の有無をチェックする際に「画像認識」を使うことはオススメできません。
解像度や位置のズレなど、画像認識単体では、安定性を保つのが難しいからです。

開発環境と本番環境の違いは「RPAあるある」ですが「差異を無くす努力」はするとして、本番試験を手厚く行うことが一番有効です。Studioバージョン21.10からは「リモートデバッグ実行」という機能があり、リモート端末でお試し実行もできます。また、スペックなどの情報をログに出力することで、エラー時の初動調査を加速する事も大事です。

終わりに

いかがでしたでしょうか?今回は中編として「安定性・効率性」について書きました。

この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?