UiPath Robot 単独インストールからワークフロー実行までのハンズオン。またプロキシを入れるなど、デバッグに便利なTIPSのご紹介。

## イントロ

UiPath をインストーラから入れると、デフォルトのままだとUiPath Studio(開発環境)とUiPath Robot(実行環境)がインストールされますが、実際のユーザ環境はライセンス数にも限りがあるため、StudioはインストールしないでRobotのみをインストールすることも多いです。

さて今回は UiPath Robotだけをインストールしてアクティベーション(Community License)を行い、ワークフローの実行までやってみます。またロボットの通信にプロキシを挟むなど、その他のTIPSをご紹介します。


## 対象の方

- UiPath Studioから実行とかはやってるけど、UiPath Robot単体環境というのはあまりさわったことがない方
- UiPath Robot がライブラリを落としてくるときにどこにアクセスしてるのかな？などが気になる方
- その他、UiPath RobotのTIPSをしりたい方


## UiPath Robotのインストール

[「UiPath Studio のインストール」](https://qiita.com/masatomix/items/9c134ad77c64ae034cdc#uipath-studio-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB) に詳しく書いてあるのですが、今回もこの記事同様「商用トライアル」版を使います。手元にあったインストーラは2018.4.5でしたが、最新版でも手順は大差ないと思います。

管理者権限を持ったユーザでインストーラを起動してからも つぎへつぎへ は基本おなじですが、インストールするモジュール選択では下記の通り「UiaPath Studio」と「ローカルアクティビティフィードをインストール」を**外して**、純粋に UiPath Robot だけを入れます。[^1]

[^1]: 結論いうと「ローカルアクティビティフィードをインストール」はどっちでもよさそう。サイトを引用すると「ローカルアクティビティフィードの追加を選択すると、C:\Program Files (x86)\UiPath\Studio\Packages ディレクトリにアーカイブとして保管されます。ローカルアクティビティフィードをインストールしない場合、Core アクティビティのみが上述のフォルダー内で利用可能になります。 」https://robot.uipath.com/lang-ja/v2018.4/docs/about-the-activities-feed

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/44aade50-7e51-0450-71a1-f281b9037560.png)

インストールが完了したら「UiPath Robotを起動」をチェックしたままインストールを完了すると、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/85120ce3-8bb4-c5ca-69e5-13b673c2868c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/22d91c59-6624-c15c-cfc1-3a825bbbf267.png)

タスクトレイにロボットが表示されました。仮にチェックを入れ忘れたり、PC再起動後またロボットを起動するにはスタートメニューから「UiPath Robot」をえらんで起動すればOKです。

インストールは完了です。


## UiPath Robotのアクティベーション

さてUiPath Robotのアクティベーションです。ちなみにStudioなどが存在する場合は、Studioをアクティベーションすれば一緒にRobotもアクティベーションされるし、OrchestratorにつないだUiPath Robotは、タスクトレイのアイコンから開くことができる設定画面をつかってOrchestratorからライセンスを取得してアクティベーションすることが出来ます。

今回は、Community Licenseでアクティベーションするために、コマンドラインからのアクティベーションを行います。

というわけで、コマンドプロンプトを開いて

```bash
C:\Windows\System32>
C:\Windows\System32> cd "c:\Program Files (x86)\UiPath\Studio\UiPath"

C:\Program Files (x86)\UiPath\Studio\UiPath> Regutil.exe get-info
エラー #17: ライセンスコードが読み取れません: -1094, エラーの説明: NSL not licensed
ライセンスステータス: -1
デバイスID: UQKbg2xxxxxxxxxx
エラー #20: ライセンスの有効期限の読み込み中にエラーが発生しました: -6003, エラーの説明: Lookup of tag failed
メンテナンス期限: 未設定
サブスクリプション有効期限: 未設定
ユーザー定義値 "Attended": 未定義
ユーザー定義値 "Unattended": 未定義
ユーザー定義値 "Free": 未定義
ユーザー定義値 "Dev": 未定義
ユーザー定義値 "AttendedConcurrent": 未定義
ユーザー定義値 "DevConcurrent": 未定義
```

アクティベーション前のようです。ひきつづき、、

```bash
C:\Program Files (x86)\UiPath\Studio\UiPath> Regutil.exe activate /email=hogehoge@ki-no.org

C:\Program Files (x86)\UiPath\Studio\UiPath> Regutil.exe get-info
ライセンスコード: NALPNA
ライセンスステータス: 2
デバイスID: UQKbg2xxxxxxxxxx
ライセンス有効期限: 2019/09/21 10:37:59
メンテナンス期限: 未設定
サブスクリプション有効期限: 未設定
Attended: 0
Unattended: 0
Free: 0
Dev: 0
AttendedConcurrent: 0
DevConcurrent: 0

ちなみにDeactivateはなぜか失敗する、、、orz

C:\Program Files (x86)\UiPath\Studio\UiPath>Regutil.exe deactivate
エラー #16: ライセンスをディアクティベーションできません: -4212, ライセンスステータス: 0, エラーの説明: SOAP invalid license number
```

アクティベーションできました。。(今回実施してませんが)アクティベーションを行っていないと、ワークフローを実行しようとしたときにエラーで異常終了するようになっています。

参考: [Regutil を使ったコマンド記述](https://robot.uipath.com/lang-ja/v2018.4/docs/regutil-command-descriptions)


## ロボットが参照する nupkg 達の配置場所

さてさてUiPath Robotはワークフローなどを配置するディレクトリなどいくつか特殊なディレクトリが存在するので、それらを整理しておきます。

| パス                            | 実パス(例)                          | 役割                                            | 
|-------------------------------|---------------------------------|-----------------------------------------------| 
| ``%programData%\UiPath\Packages`` | ``C:\ProgramData\UiPath\Packages``  | 実行したいワークフローのnupkgを配置するディレクトリ。                 | 
| ``%USERPROFILE%\.nuget\packages`` | ``C:\Users\[ユーザ名]\.nuget\packages`` | 実行するワークフローが依存するライブラリがダウンロードされて、それらが解凍されるディレクトリ | 


実行するワークフローを配置した図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/bcdf049c-e7fd-2e7b-9560-e2e541966f99.png)


依存ライブラリが展開された図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/684dd61c-c26c-abca-ab7c-44b6d7e119c8.png)



## 実行する

さて、ワークフローを実行してみましょう。今ちょうどサンプルを作ってるので、下記からサンプルワークフローの nupkg ファイルをダウンロードしてください。

https://github.com/masatomix/My_Attended_Framework/releases/tag/1.0.7115.18328

Attended_FrameWork.1.0.7113.2777.nupkg がダウンロード出来たと思うので、上記のワークフローnupkgの配置場所: ``C:\ProgramData\UiPath\Packages`` へファイルを置いてください。
その後タスクトレイのロボットアイコンをクリックすると、下記のようにワークフローが認識されて表示されますので、右のダウンロードボタンを押して依存ライブラリをダウンロード(と展開) しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/260e34d8-abf7-a0f5-ed3e-cd7149ccb901.png)



その後もう一度、ボタンをクリックすることで、ワークフローが実行出来ると思います。

実行中画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/bdd529b0-dc15-5482-be2c-404003b28f7c.png)


以上でStudio でのワークフロー開発者側ではなく、ワークフロー実行者側の環境構築と、サンプルワークフローの実行が出来ました。

## 実運用上は

- 今回はローカルでCommunity License でアクティベーションしましたが、本番導入時は UiPath社から受領したライセンスコードを使用するか、Orchestrator からライセンスを受領したりします。
- 今回は Studio開発者が開発したnupkgを何らかの方法で受領してファイルを配置しました(Webから落としました)。Orchestratorが導入されていれば、そこからファイルを受領することが出来てとても便利です。

参考:[UiPathのカスタムアクティビティの配布について(Orchestrator接続あり版)](https://qiita.com/masatomix/items/af71fa799d53d3cbc08a)


## その他TIPS

### UiPath Robotでプロキシを経由したい

ワークフローが依存しているライブラリの nupkg のダウンロードについて、どこに取りに行っているのかな？などを知りたかったりしますが、その際の外部との通信にプロキシを通す方法です。

https://robot.uipath.com/lang-ja/v2018.4/docs/redirecting-robots-through-a-proxy-server ココにあるとおり、設定はおもに3箇所。IEのプロキシ設定と、その他 UiPath用の以下の2箇所[^2]。

[^2]: 厳密な役割分担はあまり調査できておらず、、。すんません。NuGet系は3つめぽい

- C:\Program Files (x86)\UiPath\Studio\UiPath.Service.Host.exe.config
- C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config

二つ目は NuGet関連なので、UiPath専用ではなさそうですね、、さてそれぞれ下記のように変更してみます。

まずは UiPath.Service.Host.exe.config から。

```xml:UiPath.Service.Host.exe.config
...割愛。
  <!--Proxy configuration-->
  <!--
  <system.net>
    <defaultProxy>
      <proxy
        usesystemdefault="true"
        proxyaddress="http://proxy_server:proxy_port"
        bypassonlocal="true"
      />
    </defaultProxy>
  </system.net>
  -->
```

これらをアンコメントし、``proxyaddress="http://proxy_server:proxy_port"``をたとえば``proxyaddress="http://127.0.0.1:8888"`` などと変更します。

つぎに NuGet.Config について。コレは存在しない場合もあるようで(いちどもnupkgを取りにいってないなど)、なかったら適宜つくればよいようです。

```xml:NuGet.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="http_proxy" value="http://127.0.0.1:8888" /> 
</config>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>
```

``<config>...</config>`` を追加しました。



最後にWindowsのサービス(Win+R で services.msc で起動できる)から、UiPath Robot サービスを再起動しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/74bc818b-de7d-bcdf-6709-752ad623d4a5.png)


さて、``%USERPROFILE%\.nuget\packages``にあるファイルを全部消して、再度ワークフローを実行してみましょう。再度ダウンロードが走るはずなので、、、FiddlerなどのHTTP(s)のProxyソフトで確認してみると、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/75ee3f50-7a01-5521-74c5-641fd4b21aae.png)


よさそうですね！これでnupkgをどこから落としてきているかなどを正確に把握することができます。



### 参照フィード

さて早速プロキシ設定を追加した状態にしておいて、どのサイトにnupkgを落としに行っているかをみてみます。nupkg って気がつくとダウンロードできていたりするので、、、。

先ほどのFiddlerにより、おおむねこの辺に取りにいってそうです。


- まずはローカルのパス(``%USERPROFILE%\.nuget\packages`` ) にあればそれを使うが、なかった場合は、
- Orchestrator に繋がっている場合は、Orchestratorのフィード(自前でも、Community版のOrchestratorでも)
- ちなみにCommunity 版のOrcherstratorのフィードは https://platform.uipath.com/nuget/activities みたい
- オフィシャル https://www.myget.org/F/workflow/
- コミュニティ https://gallery.uipath.com/api/v2  ←ちなみにUiPath Goのフィードも入ってました[^3]
- NuGet のサイト https://www.nuget.org/


[^3]: 例: [kino.UiPath.Utils.Activities](https://gallery.uipath.com/packages/kino.UiPath.Utils.Activities/)

などを参照し、先に応答したところからダウンロードしてくる仕様になってるようです。

NuGetのサイトは UiPath Studio では取りにいってなかった気がするので、ちょっと予想外でした。 NuGet.Config に

```xml
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
```

って書かれているから、、ですかね。。


**-- 2019/06/25追記 --**
まっさらの環境にStudioを入れて確認してみたところ、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/831bf885-d53b-ee67-26a0-1bd449c28ded.png)

ユーザが定義したサイトとして、NuGetのサイトが登録されていました。。つまり、UiPath RobotとUiPath Studioはデフォルトではおおむね同じフィードサイトを参照していそうって事が分かりました。(同期しているかは後述)

、、ココからナゾが一つ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/376ec68b-c51d-12c2-c57c-eb4630eec5d2.png)

こう、設定してみました。コミュニティ( https://gallery.uipath.com/api/v2 )だけ指定しているので、www.nuget.orgには取りに行かないと思ったのですが、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/26399a82-57bb-92ae-ae6f-8b0280a1fab4.png)

うーん取りに行ってますね。ナゾです。4つのうち、ローカル、オフィシャルの状態にはかかわらず 「コミュニティ」をチェックしているときだけ、この事象が発生しているように見えます。ナゾです。。
あ、ちなみにフィードへのアクセスのプロキシ設定は、StudioはIEのプロキシの設定に依存するみたいですね。。


あと、このStudio側でのフィード先のON/OFFですが、Robotはこの設定とは同期していなそうです。実際 Studioのフィード設定を全OFFにしてみましたが、Robotはちゃんと各フィードからnupkgをダウンロードしていました。。Robotは %ProgramData%\UiPath\UiPath.settings の ActivitiesFeed パラメタを参照しているからでした(ココもデフォルトは空なんですけどね、、、)。。
**-- 2019/06/25追記ここまで --**

おつかれさまでした。



## 関連リンク

- [UiPath Studio/Robot/UiPath Orchestrator CEを用いた運用環境の構築手順のご紹介](https://qiita.com/masatomix/items/9c134ad77c64ae034cdc)
- [UiPathのカスタムアクティビティの配置場所について(アクティビティ開発者・UiPath開発者・Robot向け)](https://qiita.com/masatomix/items/b8988fcc2bd7046825f2) 2018.2までの情報で少し古い
- [アクティビティフィードについて](https://robot.uipath.com/lang-ja/v2018.4/docs/about-the-activities-feed)
- [サンプルワークフローのnupkg](https://github.com/masatomix/My_Attended_Framework/releases/download/1.0.7115.18328/Attended_FrameWork.1.0.7115.18328.nupkg)
- [サンプルワークフローのソースコード](https://github.com/masatomix/My_Attended_Framework)