[UiPath] RPA開発で使う共通部品まとめ 

#はじめに
UiPathでWF開発する際、「共通部品」と呼ばれているものについてはいくつか種類があります。
色々あるけど何をどう使えばベストなんでしょうかね？あらためて、それぞれの特徴についてまとめてみました。
＜使用バージョン＞UiPath Studio 2020.10.2

###更新履歴
- 2020/12/09　投稿

#UiPath 共通部品の種類と特徴一覧
|　　　　種類|xaml<br>ファイル|★テンプレート|スニペット|★ライブラリ|★カスタム<br>アクティビティ|★UIライブラリ|
|:---|:---:|:---:|:---:|:---:|:---:|:---:|
|**形式**|xaml（プロジェクト）|xaml（プロジェクト）|xaml|nupkg|nupkg|nupkg|
|**開発方法**|Studio<br>アクティビティ|Studio<br>アクティビティ|Studio<br>アクティビティ|Studio<br>アクティビティ|C#.net|Studio<br>オブジェクトリポジトリ|
|**共有方法**|xamlファイルを共有|パブリッシュしたプロジェクトを共有※|xamlファイルを共有|パブリッシュしたプロジェクトを共有|ビルドしたnupkgファイルを共有|パブリッシュしたプロジェクトを共有|
|**利用方法**|Invoke Workflow|プロジェクト作成時選択|ドラッグ＆ドロップ|ドラッグ＆ドロップ|ドラッグ＆ドロップ|ドラッグ＆ドロップ|
|**利用者による変更**|可能|可能|可能|困難|困難|困難|
|**用途**|よくある処理を別WFとして切り出す|開発ベースとして使う共通フォームを作る|よくある処理をアクティビティのセットにする|よくある処理を1つのカスタムアクティビティにする|既存アクティビティでは実装できない処理をアクティビティ化する|セレクターなどUI識別要素を部品としてバージョン管理する|
★Orchestratorを使用した共有が可能
※Orchestrator経由のテンプレート共有機能はv20.10から実装

<img width="70" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912140/8446379a-f956-2918-b9f3-aa6689f9a3c7.png">…いっぱいあるけど、どれがオススメなんですか？
<img width="70" alt="image.png" src="https://1.bp.blogspot.com/-39LCjzW8pDA/XvcI4mEApbI/AAAAAAABZto/IOwANO0mePEoUeH6IeyOohg7gs7q2YPogCNcBGAsYHQ/s400/megane_hikaru_man.png">開発者のレベルや人数、環境にもよるから一概には言えないけど…OCを導入しているならOCでバージョン管理＆配布できると楽かもね。

#各共通部品のメリットと作成方法
###xamlファイル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912140/b2f73529-de4c-f6f4-51bd-6fcd1d8ccd01.png)
**メリット**：作成も利用もかんたんで分かりやすい。引数も受け渡しできる。
【部品開発者】
1. Studioを開き、新しいプロジェクトで「プロセス」を作成
2. 共通処理をアクティビティで実装
3. 作成したxamlファイルを利用者に共有
【部品利用者】
1.  [ワークフローファイルを呼び出し / Invoke Workflow] を使って呼び出す

###テンプレート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912140/e35702e9-6779-363c-262d-72a8433d0ee2.png)
**メリット**：Attended Frameworkなど、UiPathが提供しているテンプレートも多い。v20.10からはOCでの管理が可能。
【部品開発者】
1. Studioを開き、新しいプロジェクトで「テンプレート」を作成
　または通常のプロセスを作成し、「テンプレートとして抽出」を選択
2. 共通処理をアクティビティで実装
3. （v20.10以上の場合）Orchestratorにパブリッシュ
　　※Orchestrator上では、ライブラリ一覧に表示
【部品利用者】
1. パブリッシュ先のテナントに接続している場合、テンプレート一覧に表示されるので選択してWFを開発
　※Orchestratorを使わない場合 / v20.10より前の場合の共有方法
　　→作成したプロジェクトファイルを利用者に共有し、テンプレート表示場所にコピーする
　　　テンプレート表示場所（ユーザー用）：`C:\Users\USER\Documents\UiPath\.templates`
　　　テンプレート表示場所（共通）：`%UiPathフォルダ%\Studio\ProjectTemplates`

###スニペット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912140/770d6fb3-cbfa-6970-e9f1-e596bb273b30.png)
**メリット**：よく使うアクティビティのセットやプロパティ設定を簡単に引っ張り出せる。
【部品開発者】
1. Studioを開き、新しいプロジェクトで「プロセス」を作成
2. 共通処理をアクティビティで実装
3. 作成したxamlファイルを利用者に共有
【部品利用者】
1. 共有されたxamlファイルをスニペット表示場所（任意フォルダ）にコピーする
2. Studioのスニペット一覧から、スニペット参照先フォルダを追加する
3. アクティビティパネルにスニペットをドラッグ＆ドロップしてWFを開発
　※ちなみに、UiPathプレゼンツのスニペット表示場所はココ：`%UiPathフォルダ%\Studio\Snippets`
　※スニペット参照先フォルダの指定はココ↓
　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912140/998af28f-c055-240b-3915-3df2b0d72f33.png)

###ライブラリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912140/2201820c-f987-4c3d-6e67-f25a6fed829f.png)
**メリット**：Studioで開発できる人なら、その調子でカスタムアクティビティが作れちゃう。OCがあると、更新パッケージの再配布も楽。
【部品開発者】
1. Studioを開き、新しいプロジェクトで「ライブラリ」を作成
2. 共通処理をアクティビティで実装
3. Orchestratorにパブリッシュ
【部品利用者】
1. パブリッシュ先のテナントに接続している場合、Package Managerからインストール
2. アクティビティ一覧に追加されるので、ドラッグ&ドロップしてWF開発

###カスタムアクティビティ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912140/9a87cd9c-5271-211f-8dbb-3be03732321e.png)
**メリット**：C#コーディングにより作成するので、Studioのアクティビティを使う他の方法に比べ自由度が高い。
【部品開発者】
※下記はざっくりした流れです。詳細については [公式ガイド](https://docs.uipath.com/developer/lang-ja/docs/creating-activities-with-code) を参照ください。
※ゼロからコーディングすることなくカスタムアクティビティを作成可能な [Activity Creator](https://marketplace.visualstudio.com/items?itemName=UiPathLabs.UiPathActivitySet) というVisual Studioの拡張機能も公開されています。
【部品開発者】
1. Visual Studioを開き、C#クラスライブラリ(.NET Framework)プロジェクトを作成
2. コーディングが終了したら、「’プロジェクト’のビルド」を実施（dllファイルの生成）
3. Nuget package Explorerにてdllファイルをパッケージ化する（nupkgファイルの生成）
4. 作成したnupkgファイルを利用者に共有
【部品利用者】
1. 共有されたnupkgをパッケージフォルダにコピー
2. Package Managerからインストール
3. アクティビティ一覧に追加されるので、ドラッグ&ドロップしてWF開発
　※ローカルのパッケージフォルダ：`%UiPathフォルダ%\Studio\Packages`

###UIライブラリ
v20.10より実装された新キャラで、UI要素（セレクター等のメタデータ）をオブジェクトとして保持できる機能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912140/7bd37adc-f894-c073-e896-23172a0d4c91.png)
**メリット**：UI識別情報を部品化できるので、開発効率＆アプリやブラウザ変更への対応性◎。OCがあると、更新パッケージの再配布も楽。
【部品開発者】
1. [オブジェクトリポジトリ](https://docs.uipath.com/studio/lang-ja/docs/about-object-repository)の機能を有効化し、「要素をキャプチャ」
2. 取得した要素をUIライブラリとして抽出
3. ライブラリファイルをOrchestratorにパブリッシュ
【部品利用者】
1. パブリッシュ先のテナントに接続している場合、Package Managerからインストール
2. オブジェクトリポジトリのUIライブラリ一覧に追加されるので、ドラッグ&ドロップしてWF開発

#まとめ
色々種類があって迷ってしまうこともある共通部品ですが、開発者・OC管理者同士で相談しながら使いやすいものをどんどん使ってもらえれば、開発スピートや後々の管理性UPにつながります。
v20.10で登場したオブジェクトリポジトリは今までに無かった類の共通部品となるので、開発ベストプラクティスのようなナレッジも変更を余儀なくされるかもしれませんね。
「自分のところではこのタイプを使ってます」のような声にも興味があります。感想・ご指摘など是非リアクションいただければと思います :smile: