UiPath ReFrameworkことはじめ

## この記事の対象者

- ReFrameworkの特徴・メリットを知りたい
- ReFrameworkをStudioで開く方法を知りたい
- ReFrameworkの処理概要を知りたい
- ReFrameworkにおけるTransaction〇〇がよく分からない
- ReFrameworkにおけるディスパッチャーとパフォーマーがよく分からない

## ReFrameworkとは

**大規模展開のベストプラクティスに準じたプロセス**を自動化するのに向いているのがこのフレームワークです。UiPathが提供しているもので、UiPath Studioでネイティブで新規作成することが可能です。

最近日本語版ReFrameworkも出たそうです。

<https://go.uipath.com/ja/component/japanese-reframework#>

## ReFrameworkのメリット

さまざまな非機能要件が事前に盛り込まれているため、安定性・保守性が担保しやすい、というところがメリットに挙げられると思います。

- 設定ファイルから値を呼び出す仕組み

- 各所における例外処理

- ワークキューの使用を助ける仕組み

  などなど

## ReFrameworkのセットアップ

英語版ReFrameworkはUiPath Studioのプロジェクト作成画面からセットアップすることが可能です。

前述した日本語ReFramworkをセットアップしたい場合は、対象の.jsonファイルをUiPath Studioで開いてください。

## ReFrameworkの構成

では、日本語版ReFrameworkを拝借し、全体のポイントと構成について見ていきましょう。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542997/5b2d4c3d-5618-dbaf-1af9-ceadd8b52739.png)



### 全体のポイント

- ディスパッチャーとパフォーマーの違いを理解しましょう

| プロセス         | 役割                                                   |
| ---------------- | ------------------------------------------------------ |
| ディスパッチャー | ワークキューにデータを登録するプロセス                 |
| パフォーマー     | ワークキューからデータを取得し、業務処理を行うプロセス |

  ReFrameworkにおいてワークキューを使用する場合、ワークキュー登録プロセスと処理専用プロセスを分けることを推奨しているようです。処理専用プロセスが独立することで、複数ロボットを同時に動かして分散処理をするとか、そんなところを目指しているんだと思います。


- 繰り返し処理・単位を定義しましょう

  大前提としてReFrameworkは繰り返し処理を前提としたつくりになっています。そのため、ReFrameworkを使用する際は、業務をプロセスに適用するうえで、繰り返し処理・単位は何？というところをきちんと定義する必要があります。

- Transaction○○を定義しましょう

  ReFrameworkを覗いてみると、変数にTransaction〇〇というのがあり、よく登場してきます。Transactionとは、その業務の繰り返し処理を示す概念と思ってください。

  ここまでの内容を、簡単な処理にあてはめてみましょう。

  <u>とあるシステムのページをまたぐ検索結果を抽出する処理(ディスパッチャープロセス前提)</u>

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542997/368adec2-0ff7-6b26-5925-2356574f7fda.png)

  

  - 繰り返し処理：検索結果ページを表示し、nページの検索結果を取得後、キューに追加

- 繰り返し単位：検索結果ページ単位

- TransactionNumber：ReFremeworkにおいて繰り返しをインクリメントする変数。
- TransactionData：繰り返し処理のリスト全体を示すデータを格納する変数。
- TransactionItem：**繰り返し処理がある場合、その繰り返し処理を示す**データを格納する変数。



  ポイントは、TransactionItemは「**繰り返し処理を示す**」という点です。

  ここに格納されるデータは1行分リストが格納されることもあれば、TransactionNumberになることもある。繰り返し処理がない場合はNothingが格納されます。例の場合は、検索ページ単位＝TransactionNumberのため、TransactionNumberをセットしてます。割と使われ方はケースバイケースです。

  このように、ReFrameworkに当てはめたい処理を、これらの項目に分解して、どう当てはまるのかをきちんと定義しましょう。（この辺の考えはパターン化したいですね。。。）

- フローの条件分岐を理解しましょう

  ReFrameworkにおいて「初期化」や「トランザクションデータを取得」など処理ブロックのようなものがあり、それぞれ矢印が伸びていることが確認できます。中には「トランザクションデータの取得」のように矢印が2か所に伸びてるものもあります。このとき、矢印部分をクリックすると条件設定が確認できます。ここをきちんとおさえておくと、ReFrameworkの動きがより理解しやすくなるかと思います。

### 構成

それでは、構成についてポイントも交えて頭から見ていきましょう。

- 初期化

Configファイルを読み取り、アプリケーションの初期化等を行います。読み取ったConfigファイルは変数Configに格納されます。アプリケーション起動前に対象アプリケーションをKill Processします。アプリケーション起動時は、認証情報をOrchestratorのAsset、またはWindows認証情報からGetするのが推奨のようです。

- トランザクションデータを取得

トランザクションデータを取得、とありますが、そこから伸びている条件設定の観点で処理内容についてみていきましょう。

| 条件設定             | 後続処理               | トランザクションデータを取得　の終了時点 |
| -------------------- | ---------------------- | ---------------------------------------- |
| 新規トランザクション | トランザクションを処理 | TransactionItemがNothingではない         |
| データなし           | プロセスを終了         | TransactionItemがNothing                 |

つまり、ここではTransactionItemをNothingか否か、という状態を作り出すということが処理内容となります。そのため、代入アクティビティなどを使って、TransactionItemへ格納するデータを調整する必要があります。

- トランザクションを処理

トランザクション、つまり繰り返し処理部分を行います。繰り返し処理の最後にTrunsactionNumberに1足します。

- プロセスを終了

アプリケーションの終了処理等を行います。

## さいごに

UiPath Level3を遂行するうえで、大枠としてつかむ必要はあるけど、ビデオを見ても、触ってみても概念が分かりづらい部分を中心にまとめてみました。きっとことはじめ的な内容になると思います。

ただ、Transactionの説明の部分がディスパッチャープロセスが前提なので分かりにくいかもしれません、いつかパフォーマー前提に書くぞ・・・。

何卒、お役に立てれば幸いです。