【WinActor】UiPath経験者が受けるRPA技術者検定アソシエイト

UiPathデベロッパー上級の取得から約2年、ようやく重い腰をあげWinActorの学習を開始し、RPA技術者検定アソシエイトを取得できました。
UiPath経験者から見た場合のWinActor学習のポイントについて、備忘録がてらに書いていきます。


## 用語
### ノード・シナリオ
ロボットに操作させる手順を記録したものをWinActorでは「**シナリオ**」と呼びます。
UiPathでは「ワークフロー」が近い意味になります。場合によっては「ロボット」と呼ばれたりするのも同じです。

このシナリオを構成する各部品のことを「**ノード**」と呼びます。
こちらはUiPathでいう「アクティビティ」と近い意味になります。

この辺りは置き換えで覚えておけば大丈夫でしょう。


### フローチャート・グループ
WinActorにも「**フローチャート**」が存在し、こちらはUiPathのフローチャートとほぼ同じ意味です。
UiPathではワークフローをシーケンス・フローチャート・ステートマシンのいずれかを元に組むことになりますが、WinActorのシナリオではフローチャートのみです。

WinActorの「**グループ**」はUiPathの「シーケンス」が近い意味になります。
グループを使うことで、シナリオ内の複数のノードをまとめて管理しやすくすることができます。UiPathのフローチャートに配置したアクティビティをシーケンスでまとめるのと同じです。

前述の通り、WinActorではフローチャートを使わずにグループのみで組む、というような使い方は出来ません。あくまで、フローチャートに配置した各ノードをグループでまとめるという形です。


### ユーザライブラリ
WinActorにはUiPath同様、**ライブラリ**の概念が存在します。
共通の操作などを再利用可能なように部品化したもので、ユーザが自作できる点などは同じです。

異なる点は管理方法などいくつかありますが、時に大きな違いだと感じたのはライブラリの位置づけです。

UiPathでは標準で組み込まれているアクティビティの種類が多く、これらだけでも十分にロボットを作ることができます。ライブラリを使ったことがないという方も多いでしょう。
一方WinActorのノードは基本的な機能に限られており、本格的なロボットを作る場合はほぼライブラリを使うことになります。

その代わり、WinActorでは公式から提供された多くのライブラリ（同梱ライブラリ）が初期からインストールされており、すぐに使用することができます。
以下はWinActor公式サイトの各ライブラリについての情報です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/f44dcddf-201d-8d6f-7fe8-2afca67b60b3.png)

https://winactor.biz/knowledge/?limit=20

個人的な感覚の話になりますが、この「同梱ライブラリ」と「ノード」を合わせてUiPathでいう標準アクティビティに相当するイメージです。
UiPathの「ライブラリ」のイメージをそのままWinActorに持っていくことは難しいと思いますので、UiPath経験者の方もWinActorのライブラリについては改めて学習することをオススメします。


## 変数
WinActorにもUiPathと同様に変数が存在します。
基本的な考え方は同じですが、**WinActorの変数には型がない**という大きな違いがあります。

基本的にはUiPathのGenericValue型と同じように「適宜適切な型へ変換される」という認識で問題ないかと思います。
全変数がGenericValue型で設定されるイメージですね。


### 小数点の計算
型が無いという点について、考えなければいけないことの一つが小数点の計算です。

UiPathでは型が設定できますので、整数の計算がしたければ型をInt32等の整数型にすれば済みます。
型が無いWinActorではどうするかというと、「四則演算」のノードに「小数点以下を切り捨てる」のオプションがありますので、整数の計算がしたい場合はこれにチェックを入れて運用する形になります。

![blog59_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/a1835317-848b-7b9e-a14a-7b8dc3c2464a.png)


### 制限文字数
WinActorの変数に入れられる文字数は**1024文字**にデフォルトでは設定されています。
UiPath（vb.net）のString型は実質無制限（メモリ依存）で、Excelのセルでも3万文字は入りますので、変数としてはかなり少ない値になります。

なお、メモリ使用量が増加する恐れがありますが、バージョン6以降ではシナリオ設定からこれを解除し無制限にすることができます。


### 定数の入力
実際触ってみればすぐ慣れるとは思いますが、定数の入力に少しクセがあります。

![shorts5_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/9f9c9175-9e04-05b1-2d25-0171fe0f55c8.png)

例えば、「文字列送信」ノードで送信文字列のプロパティの場合は以下のように設定します。
- 定数を送信したい：`値⇒ 定数`
- 変数を送信したい：`変数`
- 変数と定数を合わせて送信したい：`値⇒ 定数 %変数%`

`値⇒ `や変数のみ指定する場合の変数名はプルダウンから選択できます。
変数と定数を組み合わせたい場合は、`値⇒ `を選んだ上で変数名を%で囲います。

また、「待機ボックス」など一部のノードでは定数の入力が前提となっているプロパティがあり、その場合は変数だけ入れたい場合でも%で囲う必要があります。


## 自動記録・要素認識
WinActorでもUiPath同様に、ユーザの操作に自動的に検出・記録しシナリオの作成を行う「自動記録」の機能があります。

WinActorバージョン7の自動記録で使用できるモードは、自動切り替えを除くと以下の7つです。
- 「イベントモード」
- 「エミュレーションモード」
- 「IE モード」
- 「Chrome モード」
- 「Firefox モード」
- 「Edge モード」
- 「UI オートメーションモード」

UiPathと似たような顔ぶれに見えますが、「UI オートメーションモード」はV7.2.0で追加された機能であり、自動記録のモードとしては後発です。

UiPathの自動記録は、2020年実装のモダンデザインからは「アプリ/Web レコーダー」の一つの機能としてまとまりました。過去には自動記録がBasic/Desktop/Web/Citrix等に分かれている時代もありましたが、基本的にはUi要素を取得して認識することがメインだと思っています。

一方でWinActorは、UiPathに比べると、相対位置での操作（エミュレーションモード）や画像認識がかなり活用されています。前述の通りUi要素での認識は後発の機能になりますから、それまではイベントモードでもブラウザ（IE）モードでも操作できないモノについては全てエミュレーションモードでカバーしていたような形です。
これを踏まえ、「イベントモード」、「エミュレーションモード」、「ブラウザ（IE）モード」の3つの違いや注意点などをしっかり抑えておくのがよいでしょう。


# 学習に使用したサイトなど
https://winactor.com/training/

公式の入門講座（eラーニング）が無料で用意されています。
アソシエイトを受講された方のブログ等を見るとたいてい受講がオススメされています。（筆者は未受講です。）

--- 

https://dx-pro.resocia.jp/rpa_column/004

過去のブログ等見ると昔はヒューマンリソシアさんで無料の講座を受講できたみたいですが、現在は有料です。

---

https://www.knet-bpr.com/column/winactor-lectureship/

アソシエイト範囲外のところも多く含まれると思いますが、一つ一つ丁寧に解説しているのでオススメです。

---

https://winactor.biz/use/manual.html

最新バージョンのマニュアルを公式サイトから閲覧できます。
流石に全部読むには文量が多いですが、基本マニュアルの**簡易マニュアル**がスライド形式でコンパクトにまとまってますので、これだけでも目を通しておくとよいかなと思います。