[UiPath] よくわかるモダンフォルダ(ジョブ/スケジュール設定編)

こんにちは。[UiPath Friendsコミュニティ](https://uipath-friends.doorkeeper.jp/)運営メンバの @masatomix です。

## イントロ


https://twitter.com/masatomix/status/1511974908087058436

今回はこのトピック。
Orchestratorのフォルダ構成ですが、**部署をフォルダの単位にする** というのはよくあるやりかたですよね。
またワークフローをUnattended Robot(以下UR)で動かすばあいは、フォルダにURのマシンテンプレートを登録するのですが、今回はこの辺のおはなしです。

この**つぶやき自体はUiPath Orchestrator 2020.10.xについて**書いていますが「こういう仕様なのかぁ」てのがあったのでその備忘です。フォルダ設計の参考になればとおもいます。

## 環境

オンプレの UiPath Orchestrator 2020.10.x版、2021.10.x版について記述しています。
以下OC2020、OC2021と記述します。


## ケース

こんなケースを考えてみます。

- モダンフォルダは部署で分けている
- その部署で使うワークフローを、同フォルダに入れている
- それらワークフローのうち、一部は特定のPC群で実行したいけど、その他は自由

**「部署内のワークフローのうち、一部のワークフローはあの端末群でしか実行できないんだよねぇ」** なんてケースです。

実際にOrchestratorの用語に当てはめてみるとこんなかんじでしょうか。

| 項目               | 値                                                           |
| ------------------ | ------------------------------------------------------------ |
| フォルダ           | root/部署A                                                   |
| マシン             | Client001,Client002,Client003                                |
| プロセス           | app001: Client001,Client002だけで実行できる<br/>app002: 任意のPCで実行できる |
| マシンテンプレート | テンプレート1: Client001,Client002<br />テンプレート2: Client003 |
| Windowsアカウント  | user001～user005 (今回はあんまし関係なし)                    |

図にするとこう。

![image](https://imgur.com/OQ15caV.png)

app001というプロセス(ワークフロー)はClient001,002だけで実行できるようにしたいので、**これらのPCは同じマシンテンプレート**にして、ジョブ実行時にテンプレを指定してやれば、と思いやってみたけど、、、というはなしです。

**OC2020、OC2021で仕様が違う** のでそれぞれ整理してみました。

## TL;DR

- **OC2020におけるジョブ実行ではテンプレートを指定できない**。そのためフォルダ内の一部のマシンだけでラウンドロビン[^1]させる事ができない。**「フォルダ内の全マシン」のどれかで動け**という設定はできる。もしくは**明示的にマシンを指定して実行**することもできる。
- OC2020のスケジュール実行では **「フォルダ内の全マシン」のどれかで動け** という設定のみで、**マシン指定すらも不可。**
- **OC2021のジョブ実行は、テンプレートを指定できる**ようになったため、フォルダ内の特定のテンプレートを使用するマシンでラウンドロビンができる。
- **OC2021のスケジュール実行は、全マシンのいずれか、もしくはテンプレート指定**ができる。

表でまとめるとこうです

| バージョン | ジョブ                                                       | トリガー                                                     |
| ---------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| OC2020     | フォルダ内の全マシンのいずれか<br />マシン指定               | フォルダ内の全マシンのいずれか                               |
| OC2021     | フォルダ内の全マシンのいずれか<br />テンプレートを指定<br />マシンを指定 | フォルダ内の全マシンのいずれか<br />テンプレートを指定<br /> |
| 参考<br/>OC2022.4     | フォルダ内の全マシンのいずれか<br />テンプレートを指定<br />マシンを指定 |  フォルダ内の全マシンのいずれか<br />テンプレートを指定<br />マシンを指定|

[^1]: 空いてるヤツどれかが動くという負荷分散できる機構って意味です

**OC2020はテンプレートを指定することで app001はClient001,002だけで動かすコトができると思った**のですが、テンプレ指定ができませんでした、、。ちょっと残念な仕様です。



## 各バージョンもうすこしちゃんとみてみる

### OC2020

#### ジョブ

実際にOC2020の画面でジョブ実行してみようとすると、
![2020_jobmae](https://imgur.com/M4ucjvr.png)

![2020_job](https://imgur.com/VGQW24e.png)
OC2020だと、マシン指定はできるけど**テンプレートを指定するプルダウンが存在しない**ですね。

#### トリガー

トリガーはこう。何らかマシンを指定するプルダウンすらなく、**マシンのいずれかで動くという設定しかできません**でした。

![2020_trigger](https://imgur.com/DdvDEVM.png)



### OC2021

ちなみにOC2021はこちら。しれっと改善されています。

#### ジョブ

全てのマシンが選べる
![2021_job1](https://imgur.com/pebSu04.png)

テンプレートも選択可能で、一つを選ぶと
![2021_job2](https://imgur.com/foxnW6B.png)

「そのテンプレートを使ってるマシンのうちいずれか」という設定を選べたり、
![2021_job3](https://imgur.com/sTT3jwn.png)

そのテンプレートを使っていて、いま接続されているマシンを具体的に選んだりできます。
![2021_job4](https://imgur.com/Xfk04Mq.png)

#### トリガー

トリガーはこう。全てのマシンが選べるのと、
![2021_trigger1](https://imgur.com/5QRbZCU.png)

テンプレートを指定するまで。具体的なマシンまでは選べず。
![2021_trigger2](https://imgur.com/kj0qas1.png)




### OC2020でも頑張ってみる

OC2020でもフォルダを分ければ、やりたいことはなんとか実現できます。
![image2](https://imgur.com/bclZApm.png)

フォルダ内のマシン群全体でしかラウンドロビンできないのであれば、**それぞれにフォルダを用意すればよい**わけですね。まあ、フォルダ構成を変える必要があって、うーんって感じです。



## まとめ

- OC2020について 「マシンテンプレートを共有することによって、複数PCでラウンドロビンできるようになりました」的な説明を聞きますが、**フォルダ内のPCたちではラウンドロビンができますが、テンプレート単位のラウンドロビンではできません**。
  - ジョブ実行時は「すべてのマシンのうちいずれか、またはマシン直接指定」 スケジュール実行時は「すべてのマシンのうちいずれか」のみです。
  - したがってマシンテンプレートの機構はフォルダにPCを登録するときにいっぺんに登録できる便利な仕組み、くらいになっちゃってますね。

- 一方で**OC2021以降では、ジョブ、スケジュールとも「マシンテンプレート指定」が可能**になっていました。 うん、こうあるべきだと思います。[^2]

[^2]: OC2020時点では技術的になんか障壁があったんですかね



## 蛇足(OC2020からの改善点)

最後蛇足ですが、いままで何度もOC2020を導入してきて、**運用上ココイマイチだなぁって思った部分**があるのですが、それらがいろいろ**OC2021以降では改善されていたりします**。ざっと書いてみると、、

- 今回のジョブ・スケジュール指定時のマシン指定の不自由さの改善
- アセットのリンク機能(別フォルダのアセットを自フォルダにリンクする機能[^3])
- マシンテンプレートとユーザのマッピング機構[^4]
- テナントロールとフォルダロールを取り違えにくくなった
- ユーザのグループ機能について、2020ではADのグループのみだったのが、2021からは任意のグループを作成できるようになった

などがあります。今後記事にしていこうと思います！

お疲れさまでしたー


[^3]: ユーザごとにアセット値を持つヤツはダメで、グローバルなアセットだけだけど。**この機能はOC2020でも絶対ほしかった**、、、、

[^4]: マシンテンプレートの作成時(もしくはフォルダ紐付け時)にユーザも紐付けておくことで、**UR実行時にそのテンプレを選んだら紐付けたユーザのみ選択可能になる**機構。また、そのフォルダ内でアセットを作るとき「ユーザごとアセット」だけでなく **「ユーザ、マシンテンプレートごとアセット」をつくれる**ようになる。マシンキー接続しているPCたちは、かつてのように**ロボットごとアセットが作れるぽい**？(アセットはちゃんと調べてないがざっと見たところそんな機能だった)



## 関連リンク

自分がモダンフォルダ関連で書いてある記事を載せておきます

- [よくわかるモダンフォルダ(イントロ編)](https://qiita.com/masatomix/items/686b6af4fac69a0b18a3) 
- [[UiPath] よくわかるモダンフォルダ(基本編)](https://qiita.com/masatomix/items/159d652027a80ff91002)
- [[UiPath] Orchestrator関連のシステム構成図を整理してみた(よくわかるモダンフォルダ番外編)](https://qiita.com/masatomix/items/0bc8d6053f1ac71c789f)
- [[UiPath] Orchestratorバージョンアップ時の検討事項(よくわかるモダンフォルダ番外編)](https://qiita.com/masatomix/items/0ae1c16f0779ab6e2f4f)
- [[UiPath] よくわかるUnattendedロボット(イントロ編)](https://qiita.com/masatomix/items/c63115254ed59d06ff9a)
- [[UiPath] よくわかるUnattendedロボット(同時実行編)](https://qiita.com/masatomix/items/7a8d9c6904d71303aa56)