【RPA(UiPath)】各バージョンとアクティビティパッケージの解説(Orchestrator観点無)

# はじめに
本記事はRPAのUiPathを利用している人向けの記事となります。UiPathの開発ツール(Studio/Robot)を構成している要素であるパッケージについてと管理方法、気を付けるべき事について解説していきます。エンタープライズ版についての記載になっているので、コミュニティ版はフォルダ階層部分は参考になりませんので、ご注意ください。バージョンは19.4以降のものでの情報となります。

<目次>
〇UiPathの基本構成の全体像
〇UiPath Studioの構成要素
〇各バージョンについて
〇依存関係について
〇パッケージの格納先と展開先
〇新しいバージョンにアップデート、ダウングレード実験
〇端末を交換する時に意識すべきこと
〇さいごに

# UiPath 基本構成の全体像
UiPathの基本構成の全体像については、こちらの記事でわかり易く説明されていますので、こちらをご覧ください。本記事では端末側をより詳細にした内容をこれから説明していきます。
[いろいろなUiPath構成(Studio単体からOrchestratorまで)を速攻解説](https://qiita.com/masatomix/items/a1ce4f5a92d17c4208ae)


# UiPath Studioの構成要素
UiPath Studioについて下記の様に分解した概念図は下記の通りです。
①パソコン上のUiPath Studio
②UiPath Studio
③アクティビティパッケージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/6eed6769-c768-e6f7-fce1-09a950d3c1c8.png)



①~③の通りに中身を細かく見ていくとこんな感じになります。
①は皆様がよく使われるChromeとかと同様でPC上にインストールして使うアプリケーションとしてUiPath StudioやRobotは同じ立ち位置にいます。インストールとダウンロードが一緒になってしまっている人がたまにいますが、ダウンロードはPC上にデータやファイルを取得してくる事でインストールは取得してきたものを実際に使えるようにセットアップ(展開/配置/設定)するもので違いがあります。

②について、StudioやRobotは人が命令できるようにする画面や内部プログラムを動かせるようにする基礎部分が存在し、そこに様々なアクティビティパッケージがくっついて構成されています。アクティビティの種類はシーケンスやクリック等が纏まったパッケージやExcel操作に関わるアクティビティが入っているパッケージがあります。アクティビティパッケージは複数のアクティビティが入っている袋みたいなものです。

⇩公式のアクティビティとアクティビティパッケージの説明はこちら
https://docs.uipath.com/activities/lang-ja/docs/introduction


③について、アクティビティパッケージは上記で説明の通りです。アクティビティパッケージ以外にプロセスパッケージ、ライブラリパッケージ、テンプレートパッケージというものが存在しております。Studioで作成したアークフローをRobotが使えるようにパブリッシュ(※1)したものがプロセスパッケージです。ライブラリは作成した便利なワークフローをアクティビティとして扱うようにしたものです。カスタムアクティビティと言われているものがライブラリに該当します。テンプレートパッケージはUiPath Studioで開発を行う際に、テンプレートから新規作成で選択可能なもの達です。デフォルトで存在するもの以外に自分で作ったテンプレートを登録する事もできます。私は個人的に開発の一番初めに扱うものとして「初期テンプレート」と呼んでます。


※1 作成したXAMLとproject.jsonが配置されているプロジェクトフォルダを.nugetに圧縮する事


#各バージョンについて
次に各バージョンについて説明します。UiPathには下記の通りバージョンがあります。

①製品自体のバージョン
②アクティビティパッケージのバージョン
③プロセス、ライブラリパッケージのバージョン

①のバージョンはStudioとかRotobo自体のバージョンでStudio起動した時の左下に出てくるものです。(2019.10.4の例)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/1790f631-57c7-1716-4d9d-033c1d81c1e3.png)

②のバージョンはそのままの意味でアクティビティパッケージのバージョンです。
③も②と同様。

ライセンスがバージョンに関係性があると気にされる方がいますが、ライセンスはどんな製品を扱えるかをコントロールするもので、どのバージョンを扱えるかには関係していません。

製品自体のバージョンとアクティビティパッケージバージョンには関連性があり、アクティビティパッケージとプロセス、ライブラリパッケージバージョンが直接的な関連性を持っています。アクティビティパッケージのどのバージョンがどの製品バージョンで扱えるの？となると思いますが、「パッケージを管理」上で表示される説明の箇所に特定の前提バージョンの記載が記載されているときがあります。ここに記載がなければ製品バージョンに依存していないのでバージョンアップしても利用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/278cf831-b97c-ae91-2930-365f735a2ae5.png)


上記の依存関係の箇所にUiPath[]という製品バージョンっぽいものが存在しており、これが製品バージョンと関係しているのか？と思ってUiPath社に問い合わせしたところ関係ないそうです。

UiPathは1つの製品バージョンで複数のアクティビティパッケージバージョンを扱う事ができます。プロセス別にどのアクティビティパッケージを使うのかUiPathはどうやって知ることができているの？と思うと思いますが、Main.xamlを作成する時に一緒に同じ場所に作成されるファイルである「project.json」の中でどのバージョンを扱うのかを指定できて、プロセス単位でのコントロールを可能にしています。製品自体のバージョンアップがあってもproject.jsonで指定しているアクティビティパッケージのバージョンを変更しなければproject.jsonに記載しているアクティビティパッケージバージョンで利用する事ができます。但し後述でも詳細説明しますが、動かしている端末の展開先フォルダに指定しているバージョンのものが存在しないとエラーになってしまうので注意です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/d865e1b3-4da7-b357-1bf8-ccafb2921fb7.png)


#パッケージの格納先と展開先
パッケージの格納先と展開先について説明していきます。ずっと同じ端末を使っていればあまり考慮しなくても済みますが、Studioで開発したものを別の端末であるRobot端末で動かすようにしたりするときに考慮が必要な事項となります。パッケージの管理場所は下記3つデフォルトで存在します。

①製品をインストールした時に格納された該当バージョンのパッケージ群を管理する場所
②パブリッシュした.nugetパッケージを管理する場所
③.nugetパッケージを実際に使えるように圧縮されたものを展開する場所(プログラムが実際に使っているのはここのファイルです)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/55cfed22-2acc-d5be-35b9-e80666c6d7cc.png)

①の場所にはインストール時に配置されるものと人が意図的に.nugetを配置する場所です。人が配置するパターンはどんな時かというとStudio端末でExcelアクティビィパッケージをアップデートした時にRobotでもそのバージョンを利用できるようにする必要があります。その時に①のフォルダに格納したり、マーケットプレイスからダウンロードしてきたパッケージをStudioで扱えるように配置したり等があります。人が配置せずStudio画面上のパッケージ管理画面から新しいバージョンのものを更新した際は、このフォルダには配置されません。(私も過去ハマりましたが、ここではその端末で利用可能なバージョンがどれかを把握する事はできません)

②は人がパブリッシュした.nugetが配置される場所です。Robotで実行可能なプロセスもここのフォルダから情報を取得してきます。

③は.nugetの状態では製品のプログラムが扱う事ができないため中身を展開して実際に呼び出される場所です。ここに実際にStudioやRobotが実行できるパッケージ達が管理されています。パッケージ名のフォルダ下にバージョン毎のフォルダが存在し、その先にUiPathが扱う事が可能な状態でファイルが配置されています。②に配置された.nugetをRobotで初回実行すると②から③に展開されたものが配置されます。いまこの端末ではどんなパッケージ達が扱う事ができるようになっているか確認したい場合は③の箇所を確認すると良いでしょう。

【③の階層にあるExcelアクティビティのパッケージ展開フォルダ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/a2e5fea8-988d-c47b-7321-d5393a7ff21d.png)

【パッケージを管理で表示されるパスを定義しているファイルはこちらです(ご参考)】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/b8196c93-9f26-27b4-ea36-6ab64d1cb2ad.png)



Studioでダウンロード/作成してきたパッケージをRobot端末に配置したり、いま全体でどんなパッケージが扱われているか把握していく事は規模が大きくなっていくにつれて困難になってきます。その問題を解決するためにはOrchestrator上で利用パッケージやライブラリを一元管理するようにしたり、バージョン管理システム(Git,Svn等)を上手く活用していく事が必要です。後者はしっかりとしたバージョン管理システム管理者がいないと管理しきれないため有識者がいない場合は、Orchestratorで管理していくのが推奨です。(Orchestratorの場合も管理者は立てる必要はあります)

#新しいバージョンにアップデート、ダウングレード実験
次の新しいバージョンにアップデート、ダウングレードした時にどうなってしまうか見ていきます。製品バージョンは同じでアクティビティパッケージを古いものから新しいものに変更した場合とその逆を検証します。

ちなみに古いバージョンから新しいバージョン利用の互換性を後方互換、新しいバージョンから古いバージョンに戻しても利用可能な互換性を前方互換といいます。UiPathでは基本的に後方互換はv2018.3以降はされるようになっていますが、前方互換はどのバージョンでも動作保証しておりません。なので基本はStudioで作ったプロセスは作成時よりもバージョンの低いStudioやRobotで動作させない事を守るのが確実です(詳細はUiPath公式ドキュメントの「後方互換性と前方互換性」を参照下さい)


まず20.10をインストールしたばかりの展開先フォルダ内のsystem.activitiesのフォルダを見てみるとこんな感じです。現在のバージョン以外は各メインバージョンの最新のものが一つデフォルトで入っているみたいですね。(一番最後のマイナーバージョンの数字の過去分は入っていない)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/ec5d0add-072f-1dd8-319a-6cc3438db27f.png)

【製品バージョンは同一でアクティビティパッケージのバージョンが変わるときの検証】
<UiPathが保証していない20.10.4→19.10.1(アクティビティ前方互換確認)>

20.10.4で適当にアクティビティを配置して、19.10.1にダウングレードして開いてみたらどうなるかやってみます。20.10.4で作成されたプロジェクトパッケージフォルダのproject.jsonファイル内のSystem.activitiesのバージョンを19.10.1を指定してStudioで開いてみます。(展開先フォルダに19.10.1が存在するので、これで19.10.1のものが使用されます)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/358016f1-6288-9d25-6ce5-e27e3bdcea48.png)


結果認識できているアクティビティもいますが、認識できず無効になってしまっているアクティビティもいくつか出てきてしまっています。project.jsonファイル内の指定をもとの20.10.4に戻すと全て認識できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/ac1d3fad-7160-7dac-3d11-d943ada3d0d6.png)


<19.10.1→20.10.4(アクティビティ後方互換確認)>

次に19.10.1で作成されたプロジェクトパッケージフォルダのproject.jsonファイル内のSystem.activitiesのバージョンを20.10.4を指定してStudioで開いてみます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/1a2b96d6-aeb3-9b21-37f6-20ca140cd364.png)

system.activities関連のアクティビティを適当に配置。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/70c615e0-330c-f1c6-30be-166fa5b7c6c7.png)

system.activitiesを20.10.4に更新。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/8d5efd76-0252-bc89-4528-60c64c534b7f.png)

20.10.4→19.10.1の時のように、Studio上で認識できなくなっているアクティビティは無いです。後方互換性があるので、見た目上はエラーにはならない事が確認できました。
プロジェクトフォルダ毎比較してみると、差分はproject.jsonの中のバージョン指定の所だけでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/160eaf31-03b7-3fc2-f48b-086bcb08e37d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/9e7b702b-2e8e-4ab4-4fa1-1055d034f707.png)

20.10.4で作成されたプロセスと19.10.1で作成されたプロセスを比較すると、20.10.4にしか存在しないアクティビティがありました。新しい方にしかないアクティビティはダウングレードしたときに認識できずに下記のようなエラー画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/c343d465-0cc5-fcd3-bd6c-4e8f567bdeb5.png)

既存アクティビティでもXAMLファイル内のプログラムに大きく変更があった箇所は新規と同様認識できなくなっています。同じプロセス終了トリガーでも見た目もプログラムの書き方も変わってます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/d9eb38d4-decd-3368-e8ec-75f4432e32f8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/a9ec576f-09d1-85a4-883d-0dbd06fe9713.png)


#端末を交換する時に意識すべきこと
以上の検証結果からわかったように、新しいアクティビティパッケージバージョンから古いものにダウングレードするのは基本やめた方が良いです。たまたま「存在しない無効なアクティビティ」の表記になってなくて使えているようでも古くした事で上手く動作しなくなる危険性があります。

新しいものに切り替える分には気にする事は無いように見えますが、アクティビティパッケージバージョンを更新する際は必ず、修正対象のプロジェクトフォルダを新しいバージョンで開く前にバックアップを残しておく事をお勧めします。新しいバージョンで逆に上手く動作しないケースもあり、元に戻したいとなった時に戻すのが困難になってしまうためです。


また、開発した端末とは別の場所で動作させる際には、project.jsonに記載されているアクティビティパッケージバージョンが展開先フォルダに存在しているか確認しましょう。存在しない場合はStudioを使って配置や手動又はOrchestratorを利用しての配置が必要になります。指定のバージョンが見つからない場合、一番近い低いバージョンで動かせるようにするランタイムルール設定がありますが、安定したプロセスを目指すなら意図しているバージョンで動くように管理した方が良いです。こっちで動く、あっちで動かないとかの時に対応が複雑化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/898472/5f7d7b06-717c-8d3a-f5b7-ac4b2281938f.png)

#さいごに
製品、アクティビティパッケージバージョンは適切に管理する事が必要です。開発者任せにしていると色々なバージョンでの開発が入り乱れて、その端末でしか開発できなくなってしまったり、動かくなってしまうといった原因になっていきます。会社全体で管理するか、RPA推進/管理しているチーム毎にそれぞれ管理されるかを決めておくとよいでしょう。ルールがないと結果複雑な環境になり、プロジェクトメンバーの生産性に繋がってきますので、しっかりとコントロールすることをお勧めします。ここに記載しているような内容は開発者にも理解してもらった方が、更にバージョン管理が強化されます。


途中比較に使ってたツールは「WinMerge」というフリーソフトです。会社でも利用が許可されている所は多いので、比較作業を結構やる人はお勧めです。


【参考文献】
書籍：公式ガイド UiPathワークフロー開発 実践入門 

[UiPath バージョンアップガイド](https://www.uipath.com/ja/resources/knowledge-base/uipath-version-up-guide)

[UiPath パッケージ管理方法について](https://www.uipath.com/ja/resources/knowledge-base/how-to-manage-packages)