UiPathのカスタムアクティビティの配布について(Orchestrator接続あり版)

さて[前回](https://qiita.com/masatomix/items/9206873c2959451ac01e)までで、単体のRobotからカスタムアクティビティを利用するために、どこにそのカスタムアクティビティのnupkgを配置すればよいかについてしらべました。そのnupkgは個別にRobotの端末に配置する必要があったわけですが、今回はOrchestratorに接続しているRobotはどうすればよいかを整理します。

## 対象のシナリオ
いままでと同様、下記のカスタムアクティビティを使用しているシナリオ CustomActivityTest を使用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/89aae440-8cfa-4c19-975d-43e9499dee81.png)


## 全体像
構成がややこしくなってきたので図で整理。Visual Studioでカスタムアクティビティ(ActivitiesPathUtils)を作成し、そのnupkgを作成します。同じ端末にあるUiPath Studioで、それを使用するUiPathのシナリオ(Package？) であるCustomActivityTest を作成します。まあ、ここまではいままでやってる作業と全く変わらずですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/c5035b87-ce84-66f4-c5c9-24e7440012a5.png)
さてそのUiPath StudioからOrchestratorへPackage をPublishします。カスタムアクティビティを使っていなければ、ふつうにOrchestratorから図中下のロボット単体の端末へそのPackageをデプロイすればよいわけですが、カスタムアクティビティを使用する場合どこからそのnupkgを取得すればよいか、ってのを整理したいと思います。

結論をいうと図にあるようにOrchestratorにそのカスタムアクティビティのnupkgを配置(Push)しておくことで、Packageのデプロイ時にそれらのnupkgも自動で取得できるようになっています。

## Robotからカスタムアクティビティを使う(Orchestrator接続ケース)

### StudioからのPublish
Orchestratorに接続済みのUiPath Studio上で、Publishを行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/0de2d7e5-9922-907b-d69e-5233e51e8c54.png)

一応Orchestrator上でPublishされていることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/b01ab9fa-835e-3376-6f0e-b86a03e20756.png)

Orchestrator上で、該当PackageとRobotを紐付けます(蛇足ですが、Environmentは日本語訳は「ロボットグループ」になるようですね)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/7d5d7909-da4a-51d1-78f5-66c80ff660d0.png)

リリース完了です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/018911a9-064d-0223-83d0-81b8f00d0b87.png)

### ロボット単体端末からの実行
Environment に属しているロボット端末には、CustomActivityTest が配布されているとおもいます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/ba1345c4-ff36-cfd7-3eaf-63cde28665ef.png)

実行してみると、、、想定通りやっぱりダメですね。。[Orchestratorなし版でやっていた](https://qiita.com/masatomix/items/9206873c2959451ac01e#robot%E3%81%8B%E3%82%89%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%93%E3%83%86%E3%82%A3%E3%82%92%E4%BD%BF%E3%81%86orchestrator%E6%9C%AA%E6%8E%A5%E7%B6%9A%E3%82%B1%E3%83%BC%E3%82%B9)のと同様、アクティビティがない的なエラーになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/66424444-e8ba-86e7-879a-4585b7099b72.png)

### カスタムアクティビティのOrchestratorへのアップロード
さてカスタムアクティビティがないよってエラーからも分かるとおり、カスタムアクティビティ ActivitiesPathUtils のnupkgは個別に配布が必要みたいです。

しらべたところOrchestratorは、nupkgをホスティングするNuGetサーバの役割も担っているようで、NuGet関連の知識が活用出来そうです。ワタクシあまりMicrosoft 界隈に詳しくないのですが、[NuGet パッケージの公開方法](https://docs.microsoft.com/ja-jp/nuget/create-packages/publish-a-package) この辺を参考にやってみます。

このサイトをみるとnupkgのNuGetサーバへの公開は、下記のようなコマンドを使うようです。

```
dotnet nuget push AppLogger.1.0.0.nupkg 
 -k qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 
 -s https://api.nuget.org/v3/index.json
```

ドットネット、、、こんなコマンドあんのかな？とおもって叩いてみたら、ありました :-)。.NET Framework に同梱されていたんですかね、、。

さて、-k オプションはAPIキー、-sオプションのURLはNuGetサーバのURLっぽい。どう指定するのかしらべたところ、これらはOrchestratorに接続した端末の `%programData%\UiPath\UiPath.settings` に書いてありました。

```json:UiPath.settings
{
  "NuGetApiKey": "78542xxx-xxxx-xxxx-xxxx-xxxxxxxxxx",  ← -kに指定
  "NuGetServerUrl": "https://[サーバ名]/nuget/feed/default", 
  "ActivitiesFeed": "https://[サーバ名]/nuget/activities", ← -sに指定
  "UiPathServerUrl": "https://[サーバ名]",
  "TracingLevel": "Information",
  "LowLevelTracing": false,
  "SecureLicenseKey": "xxxx",
  "LoginToConsole": true,
  "ResolutionWidth": 0,
  "ResolutionHeight": 0,
  "ResolutionDepth": 0,
  "FontSmoothing": false,
  "ConnectionString": ""
}
```

ちなみにAPIキーはOrchestratorのWEB画面上、Settings >> Deployment からも確認可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/c340fd77-302b-9465-0bfb-198e32b49660.png)


さてやってみます。Visual Studio側の端末の、カスタムアクティビティのnupkgがあるディレクトリで、下記の通りコマンドを実行します。

```
Z:\git\Path\Path>dir ActivitiesPathUtils.0.0.15.nupkg
2018/10/10  13:49            10,731 ActivitiesPathUtils.0.0.15.nupkg
               1 個のファイル              10,731 バイト
               0 個のディレクトリ  156,051,349,504 バイトの空き領域
```

```
Z:\git\Path\Path> dotnet nuget push ActivitiesPathUtils.0.0.15.nupkg 
 -k 78542xxx-xxxx-xxxx-xxxx-xxxxxxxxxx 
 -s https://[サーバ名]/nuget/activities   (実際は一行で)


info : ActivitiesPathUtils.0.0.15.nupkg を 'https://[サーバ名]/nuget/activities' にプッシュしています...
info :   PUT https://[サーバ名]/nuget/activities/
info :   Created https:/[サーバ名]/nuget/activities/ 367 ミリ秒
info : パッケージがプッシュされました。

Z:\git\Path\Path>
```

おおお、パッケージがプッシュされた、と。。じっさい、Orchestratorサーバ側でみてみると、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/bcb2a03c-3bc1-0f62-c807-cdec56622b8b.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/39b54fb4-d9a4-615f-a2d4-771a5118594a.png)

ちゃんとアップロードされていますねー。


### 再実行
さてOrchestratorにカスタムアクティビティのnupkgがアップされたので、再実行してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/55f06c86-567b-612f-17f1-6fa6d7ed0863.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/2406d60a-1f4c-c5ae-cd92-77e0309fed36.png)


実行できました。


## まとめ
カスタムアクティビティを作成してそのnupkgをどのように共有するかについて、[UiPath Studioから使用する場合](https://qiita.com/masatomix/items/1f63513e80313a99faeb#uipath-studio%E5%81%B4%E3%81%A7%E3%81%AE%E4%BD%9C%E6%A5%AD) 、[単体Robotから使用する場合](https://qiita.com/masatomix/items/9206873c2959451ac01e)、Orchestratorに接続したRobotから使用する場合、をそれぞれ整理しました。

個別にnupkgを配布・共有する必要があったカスタムアクティビティですが、Orchestratorを導入することでその必要がなくなり、とても便利になることが分かりました。

おつかれさまでした。

## ソースコード

https://github.com/masatomix/UiPath_Path/releases/tag/0.0.15
に配置しました。



## 関連リンク
- [UiPath.Settings ファイルの説明](https://robot.uipath.com/lang-ja/docs/uipathsettings-file-description) ロボットのガイド
- [アクティビティパッケージの管理](https://studio.uipath.com/lang-ja/v2018.3/docs/managing-activities-packages)  Studioのガイド
- [NuGet パッケージの公開方法](https://docs.microsoft.com/ja-jp/nuget/create-packages/publish-a-package) 




## 記事目次
- [UiPath Studioで使用するカスタムアクティビティの作成方法](https://qiita.com/masatomix/items/1f63513e80313a99faeb)
- [UiPath Studioで使用するカスタムアクティビティの作成方法 つづき(GUI構築)](https://qiita.com/masatomix/items/e75598f73b0e019044ac)
- [UiPathのカスタムアクティビティの配布について(Orchestrator接続なし版)](https://qiita.com/masatomix/items/9206873c2959451ac01e)   
- [UiPathのカスタムアクティビティの配布について(Orchestrator接続あり版)](https://qiita.com/masatomix/items/af71fa799d53d3cbc08a) 今回の記事
-  [UiPathのカスタムアクティビティの配置場所について(アクティビティ開発者・UiPath開発者・Robot向け)](https://qiita.com/masatomix/items/b8988fcc2bd7046825f2) 次回の記事
- https://github.com/masatomix/UiPath_Path ソースのMaster Branch