いろいろなUiPath構成(Studio単体からOrchestratorまで)を速攻解説


## 概要

UiPathについてですが、まず初めは無償のCommunity Editionを用いて、このようなシンプルな構成ではじめたりすることが多いかと思います。

システム構成：最小構成
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/16613b63-ce21-baac-6651-bceb8093e756.png)

UiPath Studioをインストールして、Studio上からロボット(以下、ワークフローって呼びます[^1])を実行するスタイルですね。

[^1]: 「ロボット」というと、UiPath Studioで作成したモノ(処理)を動かすPCなどの**「実行環境」**のことを指すのか、それともそのUiPath Studioで作成した**「実行するモノ」**自体を指すのかが、文脈によって違ってきたりします。この記事では「ロボット」は**実行環境**とし、**実行するモノ**は「ワークフロー」で統一しようと思います。。

ところでみなさま、**UiPath Studio以外のプロダクト**も使っていますでしょうか？？
UiPath製品には、ロボットたちをサーバから管理するためのOrchestratorというプロダクトがあったり、UiPath社謹製のフレームワーク(テンプレート)が存在したりするのですが、それらを便利につかって実運用をしようとすると、たとえば全部のせで、こんな構成になったりします。。

システム構成：全部のせ構成
![06_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/e45e6d7f-0b02-ef49-0dcf-d5ee5910d9f8.png)

うーん、ごちゃごちゃですね┐('〜`;)┌。

さて本記事では**「最小構成」から「全部のせ」までいくつかの構成パタンを定義し、要所ででてくるプロダクトの簡単なご紹介**をしたいと思います。

使ったことのない構成がありましたらぜひとも興味を持っていただき、さわってみようというきっかけになればなー、、とおもってます。


## 構成1: 最小構成。UiPath Studioだけ
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/16613b63-ce21-baac-6651-bceb8093e756.png)

はじめに書いた、**UiPath Studioだけをインストールした構成**です。Community Editionは無償ですし[^2]、1台のPC上で個人作業を自動化する目的なら、これで必要十分です。

[^2]: 業務利用するには、会社の規模など一定の条件があります。参考: https://www.uipath.com/ja/freetrial-or-community

UiPath Studio
![01-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/133c18cc-bddc-e332-10dc-bce19dffd7cc.png)

- プロダクト
    - UiPath Studio

- できること/メリット
    - Studioだけあれば自動化できる
    - 構築が簡単

- できないこと/デメリット
    - 他のPCでワークフローを実行出来ない

**商用版のUiPath Studioを使用する際には、本番運用時はロボットをアクティベーションして利用することが必須になりますのでご注意ください。**また、Community Editionを業務利用するには会社規模など一定の条件がありますので、そちらもご注意ください。

参考:https://www.uipath.com/ja/freetrial-or-community



さて、**他のPC上でワークフローを実行したい場合は、次の構成**となります。

## 構成2: Studio/Robot で開発と実行を分離

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/d8a49f29-0245-be71-2cc3-8b338a04126f.png)

**開発するPCと実行するPCを分けたときの構成**はこうなります。UiPath Studioで「パブリッシュ」を行うと、``ワークフロー名.nupkg``みたいなzipファイルが出来ます。このファイルをUiPath Robotがインストールされた他のPCへ転送(メールでもファイルサーバ経由でも)[^3] することで、開発したワークフローを他のPCで実行することが出来ます。

[^3]: NuGetサーバでも :-)

パブリッシュ中
![02-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/39322356-e0d9-dc4d-10d3-7dbebd4dd8b1.png)

UiPath Robot(他のPC) からワークフローを実行
![02-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/242f83b0-72d6-85ef-404d-2d9439daae45.png)

- プロダクト
    - UiPath Studio(開発PC)/Robot(実行PC)

- できること/メリット
    - ワークフローの開発と、ワークフローの実行を別々の環境にすることができる

- できないこと/デメリット
    - **転送(配布)が面倒**くさい
    - ``hogehoge_20190909_02.nupkg``みたいな、よく分からないバージョンの ``nupkg``ファイルが発生し、**バージョン管理がカオス化**する
    - 知らないところで、知らない人が作成した``nupkg``が運用される(いつの間にか作成者が辞めちゃってたり)


開発と実行が分離されましたが、開発PCと実行PCが複数台になってくると**「この``nupkg``は、どのPCで実行してよいワークフロー？？」「このバージョンって、xx対応入ってる？」など、管理が大変**になってきそうですね。


## 構成3: Orchestratorで統制する

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/121791da-286f-a432-c771-96f8299047b3.png)


前の構成に、サーバ製品である「UiPath Orchestrator」を導入した構成です。特徴は

- リリース/配布する「ワークフロー」の管理
- 「ワークフロー」を実行するPCの管理
- 「ワークフロー」のリモート実行、スケジュール実行
- 他システム連携
- StudioとRobotのライセンスの管理
- カスタムアクティビティの管理

などがあります。Orchestratorは高機能で重要なプロダクトなので、すこし詳細に見てみます。

### 3.1 リリース/配布する「ワークフロー」の管理と、実行PCの管理

Orchestratorのワークフロー(``*.nupkg``)を管理する仕組みは以下の通り。

1. 開発者が「パブリッシュ」を行うと**``nupkg``が Orchestratorサーバに送信**される
2. 図中の運用担当者が、WEB画面を使って**「リリース作業」行うと、Orchestratorに送信された``nupkg``が実行PCへ自動配布**される

この``nupkg``の配布の仕組みにより、**運用担当者がOKをだしたバージョンだけ本番リリース**することができます。また運用担当者がリリースをするときに「どのコンピュータ(ロボット)で実行してよいか」を指定することができるので、**ワークフローを実行可能なPCの管理** もおこなう事が可能です。

開発者が、Orchestratorへパブリッシュする画面。
![03-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/74709abf-8dff-7c42-7069-2c40e7f18956.png)

運用担当者のリリース作業を実施する画面
![03-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/705ea2a8-b8cc-8d5a-ad87-4ad0ee2c2243.png)

### 3.2 「ワークフロー」のリモートからの実行、スケジュール実行

リモート実行は、ある意味**Orchestratorの目玉機能**かもしれません。Orchestratorで管理されるロボットには**「Attended Robo(AR)」「Unattended Robot(UR)」**というライセンス形態があります。**ARは通常のロボット同様にヒトがワークフローを起動する、有人運用向けのライセンスで、URはリモート実行が可能な、無人運用向けライセンス**です。

**URなロボットはWindowsが起動さえしていれば(ログインすら不要) OrchestratorのWEB画面上からの指示により「ワークフロー」を遠隔から実行可能**となります。
![03-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/1ce0b18e-91ae-8ba8-61d1-6f3b770023b1.png)

またURは**スケジュール実行が可能**なので、毎日夜間に処理をさせるなどバッチ的な使い方ができたりします。
![03-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/c955b306-2c0a-ff9c-3dc0-a40cc8afb83f.png)

こういう海外製品のスケジュール機能って、日本固有の祝日や業界固有の休日(証券取引所の営業日とかね)とかに弱くてつかえないことも多いんですが「非稼働日設定」ができたり、それなりにつかえそうな機能です。

### 3.3 他システム連携

たとえば先の「非稼働日設定」などでも機能不足だったり、もしくは独自のスケジューラ(JP1とか千手とかね)をすでに持ってたりするばあい、他システムからOrchestratorの機能を呼び出したくなります。

そんな、**他システムからOrchestratorのいろいろな機能を呼び出すために、OrchestratorはRESTのAPIをもっています。**それを用いることで、独自のスケジューラからAPIを叩いてワークフローを実行することもできます。

また、**実行されたワークフローの完了などは、OrchestratorのWebhookで通知を受け取ることが出来る**ので、実行から正常終了まで、他システムで制御することができそうですね。
![03-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/87adeecd-2944-460d-909a-4b7449b7a347.png)

うまく使うことで、ワークフロー間の連携に使うことも出来そうです！[^4]

[^4]: 個人的にはOrchestratorのQueue機能で、**処理が完了したらキューにデータを投げる → そのキューを待ってるワークフローが動き出す**、、という連係も出来そうです。。[ピタゴラRPA](https://twitter.com/hashtag/%E3%83%94%E3%82%BF%E3%82%B4%E3%83%A9RPA?src=hashtag_click) の中の方々、いかがでしょう？？


### 3.4 StudioとRobotのライセンスの管理

このへんからなんか仕事っぽい(?)話になってきますが[^5]、、、、。

[^5]: 興味がなければ読み飛ばして:-)

Orchestrator管理下のStudioやRobotたちは、いわゆる新規やライセンス更新時のライセンスアクティベーションが自動で行われます。ライセンスの管理なんてなんかうれしい？？っておもうかもしれませんが、ウン十台のロボットを各ユーザが自身で操作してライセンス更新するなどは、なかなか大変だったりします。Orchestrator管理下のPCたちは、それらの作業から解放されるということです。

またOrchestrator配下のロボットには**「同時利用ライセンス(Concurrent)」というライセンス形態**があり「Studioは同時起動xx台まで」とか「ARは実行可能状態にできる台数は何台まで」みたいなライセンス形態で利用することが可能です。とても便利です。

### 3.5 カスタムアクティビティの管理

このあと出てくるカスタムアクティビティ開発ですが、カスタムアクティビティはワークフロー同様ほかのPCへの配布をどうやるかが課題となります。Orchestratorは開発したアクティビティを配布する機能を持っていますので、カスタムアクティビティを積極的に開発するのであれば、Orchestratorを置くととても運用が楽になります[^6]。地味に重要なポイントです。

[^6]: 必須ではないです。Orchestratorがない場合は、別にNuGetサーバを用意するか、ネット上のNuGetサーバを使用する事になります。また、広く公開する場合は、UiPath Go! ですね:-)

さてさて **Orchestratorによって「ワークフローや、それを動かす実行環境」の統制**が出来ることがわかりました。。つづいて「開発する環境」の統制、いわゆる**開発の標準化**を見てみます。


## 構成4: Attended Framework/RE Framework
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/97d6611a-f9e9-c131-be9b-d4389d1ea4ae.png)

前構成に、UiPath Studio 開発PC上に**「Attended Framework/RE Framework」を追加**しました。

複数人で開発しているとよくでてくる「エラー処理(例外処理)」とか「ログ出力形式」など、定型化・共通化・ルール化したい大事なことについて、**Framework(テンプレート)におまかせ**することができます。

Attended Framework
![04-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/0532a2dd-b89d-cf17-a6fe-f12c9f6bb088.png)

- プロダクト(前構成との差分)
    - UiPath Studio(開発PC)上に「Attended Framework/RE Framework」テンプレート

- できること/メリット
    - **ワークフロー開発者の負担軽減**
    - Attended Frameworkは**小規模でも生産性が落ちない**(くらいシンプル)
    - RE Frameworkは、**OrchestratorのQueue/Transaction機構を使ったベストプラクティスな運用**が出来る

- できないこと/デメリット
    - RE FrameworkについてはOrchestrator導入が前提となっている
    - RE Frameworkは多少複雑なので、小規模だと重厚長大すぎる(学習コストが開発規模を上回る可能性)

Attended Frameworkについては別途整理したことがあるので、興味がある方は以下をご参照ください。

参考: [UiPathの Attended Framework テンプレートを使ってみた](https://qiita.com/masatomix/items/1d96169a7c423b1939b0)

以下は重厚長大だと言った、RE Frameworkです。。ステートマシンを使ってて、わりと複雑に見えますね。。
![04_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/9b9fe807-bbc7-53a4-9ecd-219119d08103.png)


## 構成5: カスタムアクティビティ開発
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/8ba2a59d-3728-0d58-bfa6-5bdee6e93575.png)

UiPathには、すでにたくさんのアクティビティが存在しますが、たとえば「自社ルールのチェック処理」など、**アクティビティは存在しないけど自社の開発者が横断的で共通化したい処理**などがあったりしますよね。「自社独自のエラー処理(xxログを出してxxへメール通知とか)」とかもそんな類です。

そういった**独自のアクティビティを開発したいばあい、Visual StudioとC#をつかって「カスタムアクティビティ」を開発することが可能**です。


独自に開発した、カスタムアクティビティ
![05-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/73e4f0e4-9a21-e072-ff1c-2547bfb2c056.png)

それを開発するVisual Studio
![05-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/e534a4c8-0434-bc08-d787-e06c7b7db41c.png)


- プロダクト
    - カスタムアクティビティを開発するための、Visual Studio

- できること/メリット
    - **独自の処理をアクティビティとして開発・配布できる**。
    - 存在するアクティビティを使って記述した``Xaml``を実行できる「Invoke Workflow File」アクティビティとの違いは、
        - カスタムアクティビティは、**他のアクティビティ同様の使い勝手**(左ペインからDrag&Dropなど)で利用できる。
        - そもそも「Invoke Workflow File」はすでにXamlを実行するだけで、**C#などを使う**ための機構ではない

- できないこと/デメリット
    - C# など、プログラミングスキルが必要

ところで**カスタムアクティビティの配布は「NuGetサーバ」というWEBサーバが必要ですが Orchestratorがその機能を持っている**ので、図のようにOrchestratorからアクティビティの配布が可能です。

ちなみに「Invoke Workflow File」などで実行出来るXamlを「カスタムアクティビティ」として使用する「ライブラリ」機構というのもあり、それを使うと C#を使わなくてもカスタムアクティビティを作成することは可能です。既存のワークフローを手っ取り早くカスタムアクティビティにするにはこの機構が適していますが、**アクティビティのGUIを緻密に設定したい場合や、そもそも既存のアクティビティで実現できない処理を実装したい場合は、C#を用いたカスタムアクティビティ開発**をする必要がありそうです。

参考: [UiPath Studio 2018.3 Early access - Beta release をさわってみた2 (カスタムアクティビティ)](https://qiita.com/masatomix/items/ae619eed7699e677338d)


## 構成6:「全部のせ」。Elasticsearch/Kibana 追加
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/e51cd8c8-bf6d-48fc-d601-377bad7720b7.png)

いよいよ最後です。

さて**「リリース時や実行環境の統制」**も出来ましたし**「開発時の開発標準の整理」**も出来ました。あとは**日々の運用に入ったときのコト**を考えてみます。Orchestratorを導入したことで無人運用や夜間運用など、人の目をはなれたところでロボットたちが稼働している状況です。そうすると**ロボットたちがちゃんと働いているかな？？とかサボってるヤツ(使われていないロボットって意味ね)はいないかな？とか、やたら時間がかかるワークフローを動かしているロボットがいないかな？などなどを日々チェックしたくなります**よね。

ただOrchestratorのダッシュボード(トップ画面)はとっても質素です。

Orchestrator ダッシュボード
![06_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/35e2e418-02af-db7f-baa7-9eebe3e55aeb.png)

そこで**Orchestratorのログを分析してくれるElasticsearch**と、それを**グラフィカルに表示してくれるKibana**を導入します。Orchestratorに蓄積されたロボットたちの稼働ログを Elasticsearch/Kibanaに格納することで**さまざまな切り口でロボットの稼働状況を閲覧することが可能**になります。
![06_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/1340bfe8-4c20-727e-77ee-866792931f55.png)

ダッシュボードはいろいろカスタマイズ可能になっています。たとえば上記はKibanaのダッシュボードのサンプルですが、Orchestratorのログをつかって、

- ある時間帯の処理件数
- ある時間帯のエラー件数
- ある時間帯のワークフローごとの処理件数
- ロボごと、ある時間帯の1分ごとの稼働件数
- ある時間帯の1分あたりの処理件数
- ある時間帯に発生したワークフローのエラーメッセージ

などなどをグラフィカルに表示したモノです。

こういったツールを導入することで、**ロボットが正常に動いているか**はもちろん、たとえば**利用頻度が低いロボットのライセンスを見なおす**とか、**やけに時間のかかっているワークフローの処理を見なおす**とか、**ロボットたちの未稼働時間帯をみつけてもっと働かせる(!)**とか、そういったことが可能になるわけですね。

## 補足: その他

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/91315c10-a837-ffcc-06b5-864a2815884c.png)

補足として、さきほど記載した「ライブラリ」機構(既存のワークフローを手っ取り早くカスタムアクティビティにする機構)と、ソースコードを管理するためのGit/Subversion/TFS を追記しました。

UiPath Studio上でプロジェクトを新規作成する際「ライブラリ」を選択、そして共通処理をStudioで記述して(つまりxamlです)パブリッシュします。するとOrchestratorにカスタムアクティビティとしてアップロードされ、Orchestrator配下のStudioやRobotたちから、**そのxamlがカスタムアクティビティとして**使用可能になります。

ほとんどワークフローのパブリッシュとおなじ
![07-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/58b908fc-c153-ee61-9715-23d5b015bbb0.png)


またソース管理については、いままで TFS/SubversionしかつかえなかったStudioですが、2019.xのバージョンから待望のGit対応がされました。Git使いとしてはうれしい限りです :-)。



## まとめ

なかがったですね。さいごに各構成をまとめてみます。


| 構成 | 主要プロダクト |特徴/目的   |
|:-----------|:------------|:------------|:------------|
| 構成1: UiPath Studioだけ|UiPath Studio|シンプル|
| 構成2: Studio/Robot で開発と実行を分離  |UiPath Studio/Robot|別環境で実行|
| 構成3: Orchestratorで統制 |  UiPath Orchestrator|リリース運用・実行環境の統制|
| 構成4: Attended Framework/RE Framework  |Frameworkテンプレート| 開発フレームワークで標準化|
| 構成5: カスタムアクティビティ開発 | Visual Studio|C#で共通処理|
| 構成6: Elasticsearch/Kibana |Elasticsearch/Kibana|運用状況の可視化|
| 補足: その他 |Library/Git/Subversion/TFS|ライブラリとソース管理|


UiPath製品群の構成例、いかがだったでしょうか？
これらはUiPathを使っていく上で重要な技術要素になってくると思いますので、**これからもこれらをもうすこし掘り下げていきたい**と思います。とくにカスタムアクティビティ開発やOrchestratorまわりでElasticsearch/Kibana を使う件などはまだまだネットにも情報が少なく、これから情報を収集・発信していきたいコンテンツですね。

これからもよろしくおねがいします。
おつかれさまでした。。。


## 関連リンク

- [UiPath Orchestrator CEを用いた運用環境の構築手順のご紹介](https://qiita.com/masatomix/items/9c134ad77c64ae034cdc) OrchestratorにもCommunity Editionというモノが存在します。興味があれば是非ともさわってみましょう！
- [カスタムアクティビティの作成方法](https://qiita.com/masatomix/items/1f63513e80313a99faeb) カスタムアクティビティ開発入門です
- [Attended Framework テンプレートを使ってみた](https://qiita.com/masatomix/items/1d96169a7c423b1939b0) Attended Frameworkを整理した記事。
- [UiPath Orchestrator向けのElasticsearch/Kibanaの構築メモ](https://qiita.com/masatomix/items/91c7d056f484e3fa42a3) 構築したときの記事
- [筆者がかいたその他のUiPath系記事](http://bit.ly/2lFSjni)
- [Studio単体からOrchestratorいろんな構成を速攻解説。](https://qiita.com/masatomix/items/151c201e057b621aa866) 先日の「[UiPath新ユーザーコミュニティ キックオフイベント](https://uipath-friends.doorkeeper.jp/events/96399)」で登壇させていただいたときの資料
- [Twitter/masatomix](https://twitter.com/masatomix)
- [Twitter#UiPathFriends](https://twitter.com/hashtag/UiPathFriends?src=hashtag_click)