UiPath製品群をプロキシ環境で使用するための環境設定手順(UiPath Community版/認証なしプロキシのケース)

さてさて「[UiPath製品群をプロキシ環境で使用するための環境設定手順(UiPath Enterprise版/認証なしプロキシのケース)](https://qiita.com/masatomix/items/43e691e7d47e54638984)」で、Enterprise版におけるプロキシ設定方法を整理しましたが、つづいて Community版です。


[前回の記事](https://qiita.com/masatomix/items/43e691e7d47e54638984)を前提に記載していくので、必要に応じてそちらをご確認くださいませ。

## この記事の対象の方

- トラブルシューティングなどで、Studio/Robot とOC間の電文をしっかりと確認したい方。
- [前回の記事](https://qiita.com/masatomix/items/43e691e7d47e54638984)をみて、Community版はどーなのよっておもった方。
- UiPath Loveな方:-)


## 前提

- UiPath Studio 2019.10.2 Community 版/Orchestrator Community版 2019.12.6 で確認を行いました。
- Community版なので、**Robotはユーザモードで起動**しています
- 今回の疎通確認においてもプロキシサーバは、接続できていることが目視で確認できる [Fiddler](https://www.telerik.com/fiddler)を用いています。
- その Fiddlerが``http://127.0.0.1:8888``で起動していると仮定します。


## TL;DR

Community版は原則「IEの設定」をそのまま引き継ぐようになっているので、設定しなくてもネット接続は可能でした。

## 詳細

「認証なしのプロキシを越えられればイイ」だけなら以上です。Community版は勝手にIE設定を使ってプロキシを越えてくれるようです。
ただ、**認証ありプロキシの場合は、IEの設定をそのまま引き継いでも、プロキシ認証のためのID/Passを入れる場面がない**ので、結局あとでつまづくことになりそうです。

なので、今後のため**IEの設定を利用するのではなく、明示的にプロキシ設定する方法を整理**しておきます[^1]。

[^1]: 今回の記事ではID/Passを入れるところまで言及しないんですが、対策をいつか記事にします:-)


### 登場するプログラムたち

さてEnterpriseのときと同様、UiPathが動くときにウラで動いているプログラムたちと、それらの設定ファイルについて整理します。
おおむね、

- **UiPath.Service.UserHost.exe** :(サイトより引用)すべての操作の頭脳です。
- **NuGetのプログラム**: アクティビティパッケージのダウンロードを行います
- **UiPath.Executor.exe**: (サイトより引用)プロセスの実行を直接担当するコンポーネントです。
- **UiPath.Agent.exe**: (サイトより引用)Robot の実際のユーザーインターフェースです。
- **UiPath Studio**: 開発ツールです
- **Regutil.exe**: (サイトより引用)マシンをオンラインまたはオフラインでアクティベーションできる簡易コマンドラインツールです。

などが動いています。とってもややこしいですね。
参考: https://docs.uipath.com/robot/lang-ja/docs/introduction

### どのネット接続処理を、どのプログラムがやってるかの例

つづいてそれらのプログラムたちが、どんな(ネット接続をともなう)処理を担当しているか、下記に例を示してみます。あわせて、なにも設定しなかったときのデフォルトの挙動(IE設定をみるか、ダイレクト接続するか)も整理しました。


| No | ネット接続をともなう処理| それを実施するプロセス・サービス | 初期状態の挙動|
|----|----------------------------|------------------------------|---------|
| 1  | OCへの接続・切断| UiPath.Service.UserHost  | IE設定を参照 |
| 2  | タスクトレイで操作(最新ワークフローのチェックとか)  | UiPath.Service.UserHost  | IE設定を参照   |
| 3  | ハートビート(Heartbeat) | UiPath.Service.UserHost  | IE設定を参照   |
| 4  | StudioからのPublish |UiPath.Service.UserHost    | IE設定を参照   |
| 5  | nupkgのダウンロード(ロボ)(タスクトレイからのnupkgダウンロード)                                                             | NuGetのプログラム                  | IE設定を参照|
| 6  | nupkgのダウンロード(Studio)                                                                                                | UiPath Studio(がNuGetを呼んでそう)                    | IE設定を参照                                                   |
| 7  | ワークフロー内のアクティビティのHTTPアクセス(「Orchestrator への HTTP 要求」「HTTP 要求」アクティビティで確認)Studioから実行 | UiPath.Executor                  | IE設定を参照                                                   |
| 8  | 上記ワークフローをタスクトレイから実行                                                                                                   | UiPath.Executor                  | IE設定を参照                                                   |
| 9  | Regutilによるオンラインアクティベーション                                                                                  | Regutil                      | IE設定を参照                                                  |

**Enterprise版と違い、デフォルトではどれもIE設定を参照している**ようですね。


### 個別のプログラムが参照する設定ファイル

さて個別のプログラムたちが参照する、設定ファイルもまとめておきます。

| No | プロセス・サービス      | プロキシ設定を記述する設定ファイル  | 備考                                                           |
|----|-------------------------|-----------------------------------------------------------------------------|----------------------------------------------------------------|
| 1  | UiPath.Service.UserHost.exe |  ``C:\Users\[ユーザ名]\AppData\Local\UiPath\app-19.10.2\UiPath.Service.UserHost.exe.config``         | プロセスの再起動が必要                                           |
| 2  | NuGetのプログラム       |  ``C:\Users\[ユーザ名]\AppData\Roaming\NuGet\NuGet.Config`` | プロセスの再起動が必要                                           |
| 3  | UiPath Studio           | ``C:\Users\[ユーザ名]\AppData\Roaming\NuGet\NuGet.Config``                      | Studioの再起動が必要         |
| 4  | UiPath.Executor.exe     |  ``C:\Users\[ユーザ名]\AppData\Local\UiPath\app-19.10.2\UiPath.Executor.exe.config``             | プロセス/Studioの再起動は不要                                         |
| 5  | Regutil.exe             |  ``C:\Users\[ユーザ名]\AppData\Local\UiPath\app-19.10.2\UiPath\license.config``                  |                                                                |
| 6  | UiPath.Agent.exe        |  ``C:\Users\[ユーザ名]\AppData\Local\UiPath\app-19.10.2\UiPath.Agent.exe.config``                | (利用シーンがない) |




### 設定ファイルの変更方法

Enterprise版と異なり、設定ファイルの編集に**管理者権限は不要**です。

まず``*.exe.config`` 系の記述方法はすべて同じなので ``UiPath.Service.UserHost.exe.config`` の例だけ書きます。

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

プロキシサーバとポート番号を上記のように指定します。
つぎに``NuGet.Config``。

```xml:NuGet.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <packageManagement>
    <add key="format" value="0" />
    <add key="disabled" value="False" />
  </packageManagement>
  <config>
    <add key="http_proxy" value="http://127.0.0.1:8888" /> 
  </config>
  <packageSources>
    <add key="UiPath Community" value="https://gallery.uipath.com/api/v2" />
    <add key="UiPath Official" value="https://www.myget.org/F/workflow/" />
    <add key="https://api.nuget.org/v3/index.json" value="https://api.nuget.org/v3/index.json" />
   </packageSources>
  <disabledPackageSources>
    <add key="Official" value="true" />
    <add key="Go!" value="true" />
    <add key="Microsoft Visual Studio Offline Packages" value="true" />
    <add key="UiPath Community" value="true" />
    <add key="UiPath Official" value="true" />
  </disabledPackageSources>
</configuration>
```

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

さきの表の備考で「プロセスの再起動が必要」となっているファイルを修正したときは、下記のとおり参照しているプロセスを再起動します。
Enterprise版の場合はWindowsサービスの再起動でしたが、Community版の場合は「タスクトレイの右クリック >> 終了」 と
![t01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/1bde216b-c2df-5c2a-2543-c836c51b10cb.png)

「タスクマネージャ >> プロセス >> UiPath Robot User Service(32ビット) >> タスクの終了」を行います。
![t02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/90122430-806d-73aa-77ae-b28caadab736.png)

再度 UiPath Robot を起動すると、プロキシ経由の接続になっているのが確認できると思います。


あとは``license.config`` ですが[オンラインアクティベーションをするためのプロキシ設定について (Studio / ロボット)](https://www.uipath.com/ja/resources/knowledge-base/proxy-settings-online-activation) に情報があります。


```xml:license.config
<SHAFERXMLParams>
<NSAEnabled>1</NSAEnabled>
<NSLEnabled>1</NSLEnabled>
<SecurityValue>15</SecurityValue>
<OfflineMode>0</OfflineMode>
<WorkDir>%PROGRAMDATA%\UiPath\License</WorkDir>
<LicDir>%PROGRAMDATA%\UiPath\License</LicDir>
<LogLevel>0</LogLevel>
<LogQLen>300</LogQLen>
<CacheQLen>25</CacheQLen>
<SoapThreadsMin>10</SoapThreadsMin>
<SoapThreadsMax>10</SoapThreadsMax>
<MaxLogSize>0</MaxLogSize>
<ProxyIP>127.0.0.1</ProxyIP>
<ProxyPort>8888</ProxyPort>
</SHAFERXMLParams>
```

などとすればよいようですね。



## 注意事項とTIPS

### UiPath.Service.UserHost.exe.config だけをプロキシ設定するとトラブった

``UiPath.Service.UserHost.exe.config`` だけをプロキシ設定にしたところ(つまり``NuGet.Config``は修正しない) タスクトレイからのアクティビティパッケージ更新でエラーが。。

下記オペを行うと
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/208c604b-9f7f-6b9a-699b-23c3773d4b57.png)
エラーとなりました。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/f8a3df44-65f2-526b-c463-06571f622698.png)
詳細を開いてみると、、、
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/79efb8d0-de02-c869-349c-912c0a298076.png)

なんか失敗してます。**「``UiPath.Service.UserHost.exe.config``を修正すると``NuGet.Config``も修正しないとダメ」** なように見えますね。ご注意です。Studio上でのnupkgのダウンロードは普通に動いてるんですけどね、、。

ちなみにStackTraceはこんな内容です。

```
パッケージ 'Hello2019_1.1.0.2' のインストールに失敗しました
RemoteException wrapping System.Exception: パッケージ 'Hello2019_1.1.0.2' のインストールに失敗しました
---> RemoteException wrapping System.Exception: NU1101: Unable to find package Hello2019_1. 
No packages exist with this id in source(s): Go!, https://orch.example1.xyz/nuget/activities, 
https://orch.example1.xyz/nuget/feed/default, Local, Microsoft Visual Studio Offline Packages, Official 
```



### TIPS:ユーザ名などが入ったディレクトリの指定

よく出てくる``[ユーザ名]``が含まれたディレクトリ``C:\Users\[ユーザ名]\AppData\Local\UiPath\app-19.10.2\``などは以下のように環境依存することなく指定することができます。

```console
c:\>
c:\> cd %localappdata%\UiPath\app-19.10.2\

C:\Users\xxxx\AppData\Local\UiPath\app-19.10.2>  ← 本文中のUiPathインストールディレクトリ
```

ほかにも

```console
c:\>
c:\> cd %appdata%\NuGet\

C:\Users\xxxx\AppData\Roaming\NuGet>  ← 本文中のNuGet関連の設定ファイルを置く場所
```

```console
c:\>
c:\>cd %userprofile%\.nuget

C:\Users\xxxx\.nuget>   ← activity package(nupkg) が展開される場所
```


```console
c:\>
c:\>cd %programData%\UiPath

C:\ProgramData\UiPath>  ← ローカルでPublishしたnupkgが置かれるディレクトリがある場所
```

エクスプローラなどにも貼り付けて利用できますので、ご活用ください。

以上、Community版のUiPathを使うときのプロキシ設定でした。
おつかれさまでしたー。


## 関連リンク

- [Robot をプロキシサーバーからリダイレクトする](https://docs.uipath.com/robot/lang-ja/docs/redirecting-robots-through-a-proxy-server)  コレで全部いけるといえばいけるのですが、、、。基本的な考え方やデフォルト値がわからない。アクティベーション(regutil.exe)は別記事だったり、、。
- [オンラインアクティベーションをするためのプロキシ設定について (Studio / ロボット)] (https://www.uipath.com/ja/resources/knowledge-base/proxy-settings-online-activation)  regutil.exe は(公式の)ナレッジベースで。。
- [LicenseTool コマンドの説明](https://docs.uipath.com/robot/lang-ja/docs/licensetool-command-descriptions) あれ、regutil.exe 廃止？でしたっけ。新ツールのプロキシ設定はココ。
- [UiPath Robot ガイド>>はじめに](https://docs.uipath.com/robot/lang-ja/docs/introduction)  リンク先のさらにリンク先に、サービス、Executor、トレイ、などプロセスの種類が説明されています。
- [UiPath Robot 単独インストールからワークフロー実行までのハンズオン。またプロキシを入れるなど、デバッグに便利なTIPSのご紹介。](https://qiita.com/masatomix/items/13f3239a99c922726224) まえに中途半端に整理していたところを、今回包含して整理できました。
- [UiPath製品群をプロキシ環境で使用するための環境設定手順(UiPath Enterprise版/認証なしプロキシのケース)](https://qiita.com/masatomix/items/43e691e7d47e54638984) 本記事はCommunity版についてですが、Enterprise版についての記事。