昨年公開され、新しいUiPath Studioに組み込まれたReFrameworkと、適用例を紹介します。
Enterprise RPAに求められるもの
RPAプロジェクトも規模が大きくなってくると、ロボットの開発や運用に求められるものが変わってきます。
- ・信頼性と拡張性
ロボットが複数の処理(トランザクション)を実行すると、トランザク - ション単位での実行結果の確認や、失敗したトランザクションの再実行を
- 行うことが求められます。
また、トランザクションが増えた時に、容易にBOR(BackOffice Robot)化 したり、複数のロボットで分散処理に移行することが求められます。
- ・ロギングと分析
RPAプロジェクトではROI(投資対効果)の可視化が必要で、その根拠と - なるロボットの起動回数、処理したトランザクションの数や時間、などの
- 情報の取得が求められます。
- また、稼働状況やエラーの発生時の迅速な対応も求められます。
- ・ワークフローの一貫性
多くのロボットを効率よく開発・運用するために、処理に必要となるパラ - メータやアセット、アクティビティの定数(タイムアウト値)などの情報
- の管理方法、ログの書式や出力タイミング、エラーの補足とその後のリト
- ライ処理、テストケースの記述と実行など、一貫した取り扱いが求められ
- ます。
フレームワークの活用
Enterprise RPAの要求に答えるためには、すべてのロボットのワークフローを改善する必要があり、そのためには、フレームワークの導入が効果的です。 また、フレームワークの開発や継続的改善にはナレッジとリソースが必要となることから、ベンダーが提供するワークフローがあれば、それを活用するのが望ましいです。
ReFramework
前述の課題を受け、昨年UiPathからReFrameworkが発表されました。
GitHubで公開されるとともにUiPath Studioにも統合され、新規のワークフローを「Robotics Enterprise Framework」として作成することで、ReFrameworkが組み込まれたテンプレートが自動で作成されます。

ReFrameworkは、多くの機能が組み込まれていますが、主な機能は以下の通りです。
- ・設定情報の管理
処理を行う上で必要となるパラメータやアセットの情報をExcelファイル - にまとめ、起動時に読み込むことで、設定情報を簡易にしています。
- ・トランザクション
ロボットが行う処理をトランザクション単位に分解して管理するよう設計 - されています。処理の最小単位ごとに、処理が成功したのかを管理できる
- ようにすることで、後述の機能を実現にしています。
- ・キュー
- トランザクションの情報をOrchestratorのQueueを使って管理すること
- で、処理が失敗した際のリトライや、複数のロボットによる分散処理を可
- 能にしています。
- ・エラーリトライ
トランザクション処理で発生した例外を補足し、そのトランザクションの - 処理を再実行するよう設計されています。
- ・ロギング
トラブルシュートや、稼働状況の確認に必要となるデータを付加した上で - ログを生成します。
- ・スクリーンキャプチャー
例外発生時の状況を把握できるように、自動でスクリーンキャプチャーを - 取得し保存します。
- ・テスト
初期化とトランザクション処理を独立して記載することで、テストケース - を自動実行することができます。
ReFramework活用例
ReFrameworkを理解するため、以下の処理を行うロボットを考えます。
Google Trendsの急上昇ワード(https://trends.google.co.jp/trends/hottrends#pn=p4 )を取得し、取得したワードの検索結果(タイトルとをURL)をワードとともに保存する
ロボットとトランザクション
処理を急上昇ワードの取得とワードの検索結果の表示に分け、Googleでのワード検索から結果の取得を1トランザクションと考え、2つのロボットで処理を行います。
- ・TrendWords — 急上昇ワードを取得しキューに登録するロボット
- ・TrendSearch — キューに登録されたワードを検索し保存するロボット
TrendWords
https://github.com/miyaichi/TrendWords
このロボットはData Scraping機能を使って簡単に実装できます。
- ブラウザを立ち上げ、Google Trendsの急上昇ワードページを開く
- 当日の急上昇ワードの表示されているテーブルからワードを取得する
- 取得したワードを日付とともにキューに登録する

TrendSearch
https://github.com/miyaichi/TrendSearch
このロボットは、ReFrameworkを使って実装します。トランザクションの取得やログイングはフレームワーク側で処理されるため、[GetTransactionData.xaml] の[out_TransactionField1/out_TransactionField2] の値を設定し、[Process.xaml] にて以下のビジネスロジックを記載します。
- ・ブラウザを立ち上げ、Googleを開く
- ・トランザクションのWordパラメータで検索
- ・検索結果をスクレイピング
- ・スクレイピングしたデータをExcelファイルに保存

また、Process.xamlの単体テストのために、Test_ProcessTransaction.xamlも実装します。このワークフローでは、InitAllSettings.xamlを呼出し後、テスト用のQueueItemを作成し、Process.xamlを呼び出します。

単体テスト
Test_ProcessTransaction.xamlを実行すると、テスト用のキーワードでGoogleを検索し、結果がConfig.xlsxで指定したData\Output\TrendSearch.xlsxに保存されていることが確認できます。
結合テスト
まず、OrchestratorにTrendWordsというキューを作成し、RetryCountを10に設定します。次に、TrendWordsを実行し、キューにデータが格納されていることを確認したら、TrendSearchを実行します。
エラーシュミレーション
エラーリトライの実行を確認するため、Process.xamlにpseudoErrorというBooleanの変数を作成し、Defaultを(new Random().Next(1,10) Mod 3) = 0とします。次に、Process.xamlのType IntoActivityの後に以下のIf Activityを挿入します。Google検索後10回のうち3回程度でSystem Exceptionを起こすことで、エラーをシュミレートします。

まず、TrendWords/TrendSearchを実行し、TrendSearchの実行ログ(UiPath StudioのOutputパネル)でSystem Exceptionの発生を確認します。次にOrchestratorでSystem Exceptionが起きたトランザクションがリトライされていることを確認します。

ログ分析
Orchestratorに統合されたElasticSearchのログをKibanaで可視化することもできますが、簡易的に、ローカルのログファイルをTableauで可視化します。
まず、ログファイル(C:\Users\<User>\AppData\Local\UiPath\Logs\YYYY-MM-DD_Execution.log)がJson形式になるよう、行頭の日時とメッセージタイプを削除します。
- ・修正前
10:19:43.6879 Info {“message”:”TrendWords execution started“ - ・修正後
{“message”:”TrendWords execution started“…
次に変換したJsonファイルをTableauに読み込み、ワークシートとダッシュボードを作成します。
指標の例は以下の通りです。
- ・ジョブ・トランザクションの処理数、処理時間
- ・System Exception / Business Exceptionの発生状況

まとめ
ReFrameworkは、UiPathでのワークフロー開発をより進化させるものだと思います。また、ワークフローのパーツである、Reframeworkフォルダのxamlファイルは単体でも利用可能です。使えるところから試してみたらいかがでしょうか。