【まるでUiPathのオープンソース版!?】OpenRPAをセットアップしてみる

RPA (**R**obotic **P**rocess **A**utomation)ソフトウェアは、5大ソフトウェア (WinActor、UiPath、BizRobo!、Automation Anywhere、Blue Prism) 以外にも、国産、海外モノ、有料版、無料版など様々な種類が存在し、30~40くらいはあるようです。そんな中で2019年にリリースが開始されたオープンソースの無料RPAソフトウェアである**『[OpenRPA](https://openrpa.openrpa.dk/)』**が、面白そうだったので取り上げてみることにしました。そして、実際にインストールして試してみた感想を書きました。

# OpenRPAとは
OpenRPAは2019年にデンマークで配布が始まったオープンソースのRPAソフトウェアで、UI Automationと呼ばれるユーザーインターフェイス要素を分解できるAPIを使った、セレクターによるUI操作や、バックエンドサーバーの機能もOpenFlowと呼ばれるソフトウェアで提供している、無料RPAソフトウェアとして割と機能がそろっている部類の製品です。英語をはじめとしてオランダ語、ドイツ語、ポルトガル語、中国語などに翻訳がされているようです。(日本語はない)

OpenRPAのウェブページ:
https://openrpa.openrpa.dk/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/6656410a-b7ad-6ec9-0901-94a5ad995795.png)

ウェブページからは最新のバイナリファイルがダウンロードできるほか、GitHubにリポジトリがあり、そこでソースコード開発がされています。

OpenRPAソースコードのリポジトリ:
https://github.com/open-rpa/OpenRPA

OpenRPA Wikiページのリポジトリ:
https://github.com/open-rpa/openrpa/wiki

サーバー機能であるOpenFlowのリポジトリ:
https://github.com/open-rpa/OpenFlow

『[OpenRPA User Guide - YouTube](https://www.youtube.com/playlist?list=PLT7hbkkZmg-lPsLx8KExbNSvVFbXZNLcC)』

# OpenRPAの特長

* レコーディング機能、基本的なデバッグ機能、セレクターウィンドウによるユーザーインターフェイス要素分解、および約50の基本的な[アクティビティ](https://openrpa.openrpa.dk/pages/activities)を含む100弱のアクティビティを実装している。
* [Microsoft Workflow Foundation](https://ja.wikipedia.org/wiki/Windows_Workflow_Foundation) をベースに作成されている。(UiPathと同様)
* RDAとしてデスクトップ版のみ、もしくはOpenFlowと組み合わせてサーバー版としても動作する。サーバー版はリモート管理、状態・プロジェクト・ワークフローのリモートからのハンドリングが可能。データやファイルの保存を中央集中管理が可能。アクセス制御リストによる防御、EAS265による暗号化が可能。
* Windowsアプリ、Internet Explorer、Javaアプリ、Chrome/Firefoxの操作が可能。画像認識/OCRの機能[^1]も持つ。
* 拡張可能なプラグインモデルを取っている。

[^1]: OCRエンジンはオープンソースのTesseractが使われています。日本語モジュールも付いています。

# 実際にセットアップしてみた
ウェブページからダウンロードモジュールを入手します。(2020年3月頭現在、v1.0.81、240MBくらい)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/bdcbd38f-3134-5e5a-fbad-1ef6f449ecc9.png)
デジタル署名がされていないので、ダウンロードして実行する際に、何度かWindows Defender等のセキュリティソフトにブロックされることがあるので、都度解除します。

インストーラーを起動します。「Next」ボタンをクリックして進めていきます。560MBが必要なディスク容量です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/c5d7cf7a-83f9-8c0b-316f-9bdfc0ff6ae3.png)

インストール先を聞かれるので、そのまま「Install」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/db7c36a9-407e-c85b-4f76-ed90198d0411.png)

インストールが進行していきます。終わったら「Close」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/57bdaad2-2fdb-75c4-c11f-37b814f7c7b5.png)

Windowsのスタートメニューにもアイコンが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/5c05e06b-af94-ac54-67f8-f69c889dd4e7.png)

# 初回起動とサインアップ
アイコンをクリックすると、OpenRPAの開発環境が起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/319cb0a6-7d55-beed-548d-c25a9e0a206c.png)

初回起動時には登録を求めるダイアログボックスが表示されるので、登録を行いサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/3a1258b8-7a90-df7c-d8ba-a16585041552.png)

その後、リボンの「Settings」タブを見てみると、Chrome/Firefoxブラウザープラグインのダウンロードを行うページへのリンクや拡張機能 (パッケージ)マネージャへのリンクがあるので、必要なものをインストールしておきましょう。パッケージマネージャーではOpenRPA本体の最新版への更新も可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/dc786184-3072-2ddf-0530-91b67552d8db.png)

Chromeプラグインのダウンロードページ:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/903973a0-4e6a-2770-851d-e35827d772a3.png)

Package Manager:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/999a6b19-3c1d-3c76-6599-14b84f188181.png)

# 新しいプロジェクトを作ってみる
さて、さっそく新しいプロジェクトを作成してみましょう。リボンの「General」タブから「New」-「New Project」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/a584de00-9b7f-17b5-6e57-9f69577337b5.png)

プロジェクト名を聞かれるので、適当な名前を付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ad7af072-6f70-8880-e6f9-e179f291ce0c.png)

すると以下のように、新しいワークフローが作成され、シーケンスを作成していく画面となります。ここで面白いのは、OpenRPA自体は英語であるにもかかわらず、UIの一部は日本語になっていることです。これはMicrosoft Workflow Foundationのコンポーネントを使っているところがあるからなのでしょう。それにしても、UiPathにそっくりな画面ですね!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/1a604df4-9394-2d57-a702-404466bd7bca.png)

そしてなんと驚くことに、右クリックのコンテキストメニューも日本語が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/2e2dadf4-04b4-eafd-6a2f-cb2d8c4f8b46.png)

変数の作成画面も日本語です。ここもUiPathとそっくりですね。(Microsoft Workflow Foundationのコンポーネントを使っている)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/5ea77777-af12-0e6f-9058-c6856ddec3d9.png)


# アクティビティの一覧
画面左側の「Toolbox」パネルを表示させると、約100のさまざまなアクティビティが用意されています。
以下がアクティビティの一覧です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ac143ff9-6838-37e8-53c1-6ad187c92e7c.png)

# レコーディングを使ってみる
レコーディング機能も備わっているので、使ってみることにします。

1. デザインパネルのキャンバスの中で、シーケンスをクリックして選択します。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/cbea73f0-ceea-6f5a-176e-02111f1f280a.png)
2. リボンの「Record」ボタンが有効になるのでクリック、レコーディングが開始されます。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/51bc61ac-6842-0d6e-23a4-d2512ad80f4c.png)
3. いま、「Minimize」がONになっているため、OpenRPAのウィンドウが最小化され、タスクトレイに入ります。(`ESC`キーを押すと、レコーディングモードを終了します。)
4. Windowsタスクバーの検索ボックスをクリックして、「Wordpad」とキー入力します。検索結果がスタートメニューに表示され、「ワードパッド」のアイコンが表示されるので、マウスでクリックします。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/92bbee32-4466-cb3d-041b-9a2b9fd8b370.png)
4. ワードパッドが起動しました。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ea48ccb0-a218-a20d-5749-638534d896b4.png)

ここまでで`ESC`キーを押して、レコーディングモードを終了します。すると、シーケンスの中に、ワードパッドを起動するワークフローが記録されていることがわかります。OpenRPAでは、UiPathなどの主要RPAソフトウェアで実装されているように<font color="Red">**マウスカーソルでポイントしたウィンドウやUI要素がハイライトされるというしくみが既定ではONになっていません。**</font>そのため、レコーディングモードであることが多少わかりにくいですが、レコーディングはきちんと行われています。(「Settings」リボンの「Recording Overlay」をONにすると、マウスカーソルの移動に伴ってUI要素が緑色でハイライトされるようになっています。ただUiPathやAutomation Anywhereなどと比べると、ハイライトできるところが少ないようです。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/3e49d291-020a-46b9-f58b-a8cbf6cf0fd8.png)

# レコーディングされたワークフローの要素を見てみる

それではレコーディングされたワークフローの中身を見ていくことにします。

### Windows検索ボックスを選択する部分

シーケンス内の最初のアクティビティである、検索ボックスのクリックですが、これは「GetElement」アクティビティとして配置されています。コントロールのプレビュー画像と、「Open Selector」「Highlight」のボタン、そして中に入れ子で「ClickElement」アクティビティがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0c314311-37da-3d78-2959-c6c5d0e04d6e.png)

「OpenSelector」ボタンをクリックすると、セレクターのウィンドウが表示され、UI要素の詳細がJSON形式などで表示されます。これもUiPathにそっくりですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/553b51ff-b3a7-019c-86b5-fade74a69ead.png)

「Highlight」ボタンをクリックすると、コントロールが表示されている場合は、該当する部分が赤くハイライトされます。今回の場合はWindows検索ボックスの部分が赤くハイライトされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/6a601d5e-8676-f4ab-1fe7-21269ed8e13c.png)

GetElementアクティビティのプロパティを見てみると、日本語で表示されています。プロパティの中にはVB式も書けるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ea1a9bbc-1ba3-213e-95d3-d1c821dd52e0.png)


### 検索ボックスにキーワードを入力する部分

次のアクティビティは「Wordpad」と文字入力をする部分ですが、これは「TypeText」アクティビティとして実装されています。TypeTextでは特別なキーを押す場合も含めて[特別な文法](https://openrpa.openrpa.dk/pages/typetext-syntax)があるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/558a52fc-4449-ea27-f21b-a233df397980.png)

プロパティのTextの詳細を開いてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/85fdfd82-86b5-43bf-1342-72f961a81ce2.png)

すると「式エディター」に詳細なテキストが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/414c6d79-6f42-3ddf-6344-6eb4a967a357.png)

### 実行してみると...

ワークフローをリボンの「Save」ボタンで保存した後、「Play」ボタンをクリックして実行してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/a58996cf-61a9-4643-67d3-bc326b8ce7ee.png)

すると、検索ボックスへのキーワード入力のところで最初の1~2文字が落ちてしまいました。調べてみると、直前のClickElementアクティビティのPostWaitプロパティで1秒程度のウェイトを設定することで、キーストロークを落とさずに入力できることがわかりましたので、このウェイトを設定します。

すると、スタートメニューで「ワードパット」アイコンが表示されるところまではいきました。ただ、最後のクリックされて起動するところまではうまくいきませんでした。

このように、シナリオによっては、レコーディングされた内容を微調整する必要がありそうです。

# 感想
以上、ざっと触ってみましたが、ユーザーインターフェイスや操作方法、実装はかなりUiPathに似ており、「UiPathのオープンソース版か!?」と思わせるほどでした。UiPathもOpenRPAも同じMicrosoft Workflow Foundationをベースに作られており、OpenRPAの中で日本語UIになっている部分がMicrosoft Workflow Foundationのコンポーネントで実装されていることがわかります。これをUiPathの実装と比べると、UiPathがどれくらいこのコンポーネントを使っているのか理解することが可能です。

今後、いろいろな機能が実装されていくのでしょうが、発展を楽しみにしたいところです！

それではまた！