「RPAって何ができるの？」に対する超具体的な回答（UiPath）

#はじめに
「RPAについて、何となくでいいから雰囲気掴みたいんじゃーヾ(｡｀Д´｡)ﾉ」みたいな人向けの記事です。
（まぁ言ってしまえば、自分が試した結果を簡単に説明するためのメモです。）

「こんな風に処理を組むよ！」とか、「こんな機能があるよ！」みたいな超具体的なツール紹介です。（「ビジネスのここに効きます！」みたいな記事ではございませんぞ。）

世の中いろいろなRPAツールがありますが、本記事は「UiPath」の紹介になります。
（UiPathのサイトがかなり詳しく書いてあるし、ガイドもチュートリアルも豊富なので、細かい話はそっちを見た方が良いですぞ。）

[日本フォーラム](https://forum.uipath.com/c/japan)もあるので、そちらもご参照下さい。

**前提**
対象バージョン：2017.1.6522 CommunityEdition

#UiPathについてざっくり
端的な感想は「すげぇマクロ」って感じ。
「なにか新しい機能が強み」というよりは、「簡単にマクロ化できるのが強み」って感じました。
※新しい機能もあります。「ロボットの管理機能（Orchestrator）」とか、「リモートデスクトップでも操作できるよ！」とか。

##UiPathの操作概要
こんな感じで作りますってのを紹介します。
名前を入力して、「Hello! + 名前」的に返してくれる処理を作ってみます。
参考記事：[UiPathでRPAを実践してみる(1) ～FlowchartからHello World～](https://qiita.com/motuo/items/5176f814aa609b916f1b)
（参考サイトをGifアニメにしただけ、みたいなところはあります。）

1. 起動(「try」プロジェクトの作成)
![image.png](https://raw.githubusercontent.com/nh321/material/master/uipath/uipath1.gif)
2. 処理を書く
![image.png](https://raw.githubusercontent.com/nh321/material/master/uipath/uipath2.gif)
3. 変数を作って設定する
![image.png](https://raw.githubusercontent.com/nh321/material/master/uipath/uipath3.gif)
4. 動かしてみる
![image.png](https://raw.githubusercontent.com/nh321/material/master/uipath/uipath4.gif)

ということで、非エンジニアにも説明できそうなレベルで簡単です。

##UiPathができること（アクティビティ）
主要なアクティビティを抜粋して記載します。
以下を組み立てて処理を作る感じになります。
（だいたいを理解することを目的とするので、ちょっと違うこと[^1]も記載しています。また、紹介していないものもあります。）

公式ガイドもあります[^2]：[UiPath Activities ガイド](https://activities.uipath.com/)

[^1]: 「OCR」アクティビティには、「File」は無いとか。
[^2]: だいぶ日本語です。一部翻訳されてないです（そんなに問題にはならない）。

|アクティビティ|アクティビティ|アクティビティ|簡易説明|
|:---|:---|:---|:---|
|UI Automation|Element/Text/Image/OCR|Mouse/Keyboard|カーソル配置/指定箇所クリック/キー入力　など|
|||Control|ラジオボタン・セレクトボックスの操作/UI要素情報の取得/アクティブ化/視覚的強調　など|
|||Find|UI要素の検索・取得（絶対指定/ワイルドカード指定/相対位置指定）/ユーザによる指定/UI要素が表示・非表示されるまで待機　など|
|||Attribute|UI属性の取得/属性値が指定値になるまで待機/スクリーンショット　など|
|||Event|UI要素が表示・非表示された時を検知するトリガー|
|||ScreenScraping|指定した文字列を含むUI要素の取得/指定されたUI要素から文字列を取得/指定したWEBページから文字列などを取得|
|||File|画像の保存/変数への格納|
||Browser|（いろいろ）|タブ閉じる/戻る/進む/ブラウザ起動時のページに遷移/JavaScriptを実行/指定URLに遷移/ブラウザを開く/画面更新など|
||Window|（いろいろ）|閉じる/隠す/最大化/最小化/サイズ・位置の変更・復元/アクティブ化|
|User Events|Element/Image Trigger|Click/Keypress|指定したUI要素をクリック/キー押下したことを検知するトリガー|
||System Trigger|（いろいろ）|指定したキー操作/マウス操作を検知するトリガー|
|System|File|（操作系）|ファイル自体のコピー・削除・移動/ファイルの読み込み・書き込み　など|
|||（トリガー系）|ファイルの変更を検知するトリガー|
||Clipboard|（いろいろ）|クリップボードから取得/クリップボードに格納|
||Application|（プロセス操作）|プロセスリストの取得/プロセスのKill|
|||（アプリケーション操作）|起動/停止|
||Environment|（いろいろ）|ビープ音を鳴らす/環境変数の取得　など|
||PowerShell|（いろいろ）|Powershellコマンドを実行する|
||Dialog|（いろいろ）|ユーザ入力を期待するダイアログ（テキスト入力/ファイル指定/フォルダ指定）/メッセージボックス　など|
|Programming|String|（いろいろ）|文字列・配列をJSONオブジェクトに変換/正規表現での一致・不一致判定/文字列置換|
||Datatable|（いろいろ）|UiPath内のテーブルを生成・操作する（カラム・行の追加・削除/テーブルのクリア・マージ・出力/レコードを対象にしたループ処理）|
||Debug|（いろいろ）|アクティビティのコメントアウト化/指定したメッセージ・変数のログ出力/コメントの挿入　など|
||Execute|（いろいろ）|指定した COM オブジェクトのメソッドを呼び出す|
|Workflow|ControlFlow|Assign|変数への指定値の格納|
||（FlowChart内での制御）|ループ処理|配列等の要素がなくなるまで(For Each)/条件を満たしている間(Do While)/条件が満たされるまで(RetryScope)|
|||条件分岐|IF/Switchが使える|
|||break処理|For Eachを抜け出す（他のループについては明記なし。）|
|||Sequence|FlowChartの亜種：分岐はできず、順に実行するフロー|
||FlowChart|（いろいろ）|分岐等が可能な一般的な処理フロー。複数FlowChartを用意してそれらの分岐制御等が可能|
||Error Handling|Try Catch|エラー発生時の挙動を制御できる|
||State Machine|（いろいろ）|FlowChartの亜種：UMLで言うところの状態遷移図|
||Checkpoint|（いろいろ）|指定した条件がTrue/Flaseの時にエラーを生成する。|
||Invoke|（いろいろ）|指定したワークフローを同期的に呼出し、必要に応じて対話的に処理できるようにする。|
|Orchestrator|（いろいろ）|（いろいろ）|別途説明|
|Cognitive|Translate系|（いろいろ）|指定したテキストを翻訳する|
||Analysis系|（いろいろ）|指定したテキストを解析する。（言語、長さ、肯定的または否定的感情の度合い）（利用には、Google/IBM/Microsoftいずれかへのサービス登録が必要。[^3]（API連携をする感じ。））|

[^3]: 「[UiPath Cognitive Service Activities Tutorial](https://forum.uipath.com/t/uipath-cognitive-service-activities-tutorial/1066)」を参考にどうぞ。

#おまけ
##インストール方法
以下サイトを参考にインストール。
（ここで改めて記事にするほどでもないので割愛します。）

参考サイト：
[UiPathでRPAを実践してみる(1) ～FlowchartからHello World～](https://qiita.com/motuo/items/5176f814aa609b916f1b)
[【UiPath／ユーアイパス】無料版のダウンロードからインストール方法まで](https://uipath.info/download/)

##学習方法
[UiPathAcademy](https://academy.uipath.com/)というUiPath操作についての学習サイトがあります。
かなり丁寧に作られているので、真面目に取り組めば力になるはずです。


###コース：基本トレーニング
**時間**

- 14時間程度（14レッスン。1レッスン1時間前後[構成は以下]。）
    - 20～30分の動画
    - 1～3つの実践型トレーニング
    - 小テスト
- いきなり小テスト！とかはできない。（ちゃんとやっておかないと、ファイナルテストで泣きます。）

無料の講習を3日間受けてきます！とでも言って、研修行っている体で、自宅で受けましょう。

**小テスト**

- NG時にフィードバックされるのはグロスの得点のみ
    - どの回答が間違っているかは分からないです。
        - ソンビアタックせずにちゃんと学習しましょう。
- 合格すると、回答が合ってたか、間違ってたかを教えてくれます。
    - 正解は教えてくれません。

**ファイナルテスト**
14のレッスンの最後にファイナルテストがあります。

- 45問。
- 3回失敗すると、24時間強制待機＋もう一度最初から
    - 未検証：いずれかの動画を再視聴すれば良い？
    - 小テストは何度失敗しても良さそう（5回くらい失敗したけど大丈夫だった気がする）
- ファイナルテストに合格すると「orchestration用トレーニング」ができる
    - 合格しない限りできない

**ベストプラクティス**

14レッスン目で、「ベストプラクティス」が公開されます。
これを取得するために、進めるのもありだと思います。
（ファイナルテストの手前なので、時間さえあればきっと誰でもたどり着けます。）

##OCRの精度
基本的にPC文字を対象にしている[^4]っぽいので、手書き文字は不得手っぽい。
手書き文字のスクレイピングを期待するなら、手書き文字OCRエンジンを別で用意したほうが良さそう[^5]。

[^4]: 「[tesstrain.sh で Tesseract-OCR の言語データをカスタマイズする](https://qiita.com/atuyosi/items/c0933b5edf605c4a7c19)」に成り立ち/カスタマイズ方法があります。
[^5]: 「[Tegaki.ai](https://www.tegaki.ai/)」とか

**日本語適用方法**
1. [インプットデータ](https://github.com/tesseract-ocr/tessdata/blob/bf82613055ebc6e63d9e3b438a5c234bfd638c93/jpn.traineddata)を取得[^6]。
2. それを以下に格納。（消されているのはユーザ名です。）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/a6263dea-8052-899c-a227-fa5bc83e4e8a.png)
3. 「GetOCR」を選択
4. 右下の「Outline」＞GetOCRの配下＞GoogleOCRを選択
5. 右上の「Propaties」＞Options＞Languageを選択
6. "jpn"と入力（※画像中だと"eng"になっている・・・） 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/4f7c6b1c-7d87-0bf3-cf02-7fabf1b42d18.png)

[^6]: 最新版だとエラーになりました。このコミットのデータが上手くいきました。

参考にしたQA
[Installing additional language pack for google OCR](https://forum.uipath.com/t/installing-additional-language-pack-for-google-ocr/2380)
[OCR Engines in Studio - Setup and Languages](https://forum.uipath.com/t/ocr-engines-in-studio-setup-and-languages/7863)

##APIを投げる
デフォルトではできないので、リクエストを投げるアクティビティをインストールする必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/9754166f-ed44-0dbc-a0c4-c4fa4dcf2bfb.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/667e6919-133b-0255-f750-fd48571d13a6.png)

シンプルなGetでのAPI連携を試したがこんな感じに取得できた
（以下は、GET投げて、その結果をログに出力する処理です。）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/3bdf411d-7d21-5584-9bd4-6717d7c41f71.png)

##Orchestrator
UiPathが特徴として推しているのが、「Orchestrator」という機能。
説明は「[UiPath入門(5)〜UiPath Orchestratorとは](http://blog.jippahitokarage.com/entry/2017/08/06/140300)」が詳しかったので、そちらをご参照下さい。

##操作者の監視
操作者の操作を監視して、特定操作をトリガーにして動くことができます。

Trigger系のアクティビティはMonitorアクティビティと一緒に用いる必要があります。
実際の設定は以下のような感じです（これは、windowsのexplorerボタンを押下した時に"Clicked!"というメッセージボックスを表示させる処理。）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/57d8c5d9-e730-2cd3-fe13-c1f71cf92b77.png)

##バージョン管理
json形式で出力/読み込みできるので、それをgitとかで管理すれば良いかと。
標準の出力形式もほとんどxmlみたいなモノなので、GUIツール特有の「バージョン管理に悩む・・・」って問題は無さそうです。

※「簡単なパラメータの変更なら、jsonそのまま直しちゃえよ」って公式も言っているので、メンテも楽です。（UiPathStudioは少し重いのでありがたいですね）

#さいごに
百聞は一見にしかずなので、試してみて下さい。
UiPathに関しては条件さえ満たしていれば、無償で利用可能です。（2017年12月現在）

ちなみにですが、RPAはライセンス費がそこそこ良い値段のものが多いです。
大規模に適用させて、ユーザ自身でメンテしていくならありな気がしますが、
「適用可能範囲が狭い」とか、「メンテは滅多にしない！」とかなら、別の選択肢を考えた方が良さそうです。

この先、ライセンス形態もいろいろ増えていくと思いますので、いろいろ比較して見るのが良いと思います。
RPAはあくまで手段ですので、安易に流行りに乗って「こんなはずでは！」とならないようにご注意下さい。

#追記
2017/12/28 こんな記事書きましたヨ→「[RPAExpressとUiPathの比較](https://qiita.com/nh321/items/0055f6199ec8f33215ae)」

※合わせてこちらもご覧ください：[RPAを検討する人に知ってもらいたい「JenkinsでのWindows自動化」](https://qiita.com/nh321/items/629fbee4ae2a38a1480d)

---