【UiPath】スニペットをつかってみよう！

## 皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん＊＊は！はなっち！です。

【初めに】
先日、UiPathで使う、テンプレートの話を三回に渡って記事にしました。
[【UiPath】テンプレートをつかってみよう！（その１）](https://qiita.com/HANACCHI/items/66d6a6f064db3b0d46f0)
[【UiPath】テンプレートをつかってみよう！（その２）](https://qiita.com/HANACCHI/items/473b9580bb297e723050)
[【UiPath】テンプレートをつかってみよう！（その３）](https://qiita.com/HANACCHI/items/2228b42c26f67a54260a)

この執筆の過程で、UiPath MarketPlaceに登録されているすべての情報をデータスクレイピングし、どんなテンプレートがあるのかを調査しました。UiPath MarketPlaceに登録されているReSoruceは1557件（2022/12/20頃当時）存在し、テンプレートは101件ありました。
<img width="350" alt="タイプごと件数" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/6d8db5e9-8a94-7ae7-c603-1056960b4514.png">

カスタム アクティビティが多いのは予想していましたが、ソリューションは別にして、「テンプレート」を押さえて、「スニペット」が201件と、大量に登録されている事がわかりました。

スニペット...
<img width="350" alt="スニペット" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/e96b4b7f-ecc3-3b70-5987-b782f3736de8.png">
昔、`Delay`を開いてみて、
<img width="350" alt="スニペット" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/50ad87ad-2719-be09-bc64-52e1259e93cc.png">
例えば`Delay 1 Second.xaml`をドラッグ＆ドロップしてみて、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/edbd0956-83d6-b370-9e59-458cde52c9c8.png)
なぁんだ、待機アクティビティに、いろんな値が設定されているものが沢山用意されているだけか...なんて思って思って、そのまま自分自身に「蓋」をした記憶...

でもMarketPlaceには沢山登録されている。もしかしたら、使い方によってはとても便利な機能なのかもしれない！って事で、今回は、「スニペット」に関してまとめてみました。

- - - 
## １）スニペット、誰が作っている？
<img width="350" alt="スニペット作者" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/49251459-faa2-07b5-ef4f-73ed793d2902.png">

第一位は、「パーソルプロセス＆テクノロジー株式会社」さんで３６本。なるほど。
第二位は、「作成者: shinji miyagi」さんで、１６本。おっ！我らがミヤギさんですね！[@shinji miyagi](https://qiita.com/miya_gis)

そのミヤギさんの「スニペット」の作品は、
<img width="350" alt="スニペット作者みやぎさん" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/04bb5e06-99e3-9597-c8de-e83845367ca2.png">
なんか面白そうですね。
[【IsHoliday】](https://marketplace.uipath.com/listings/frkrzph01saux115kxmb3r)なんて、日本の祝日かどうか、企業さん独自休業も反映してあげると、大変便利そうですね。皆さんの開発の現場でもご苦労されているのでは？

- - - 
## ２）スニペット、どう入手する？
まずは、MarketPlaceに、「スニペット」として登録されているファイルをダウンロードしましょう！
このリンク先をクリックすると、[【IsHoliday】](https://marketplace.uipath.com/listings/frkrzph01saux115kxmb3r)
UiPath MarketPlaceに飛びます。
<img width="350" alt="スニペット作者みやぎさん" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/fe2a8502-ff86-894a-afe8-8549726b7996.png">
サインインして、ダウンロードをクリックし、ダウンロードします。
<img width="250" alt="ダウンロードファイル" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/b7858902-4200-2a98-e082-34a526af12f4.png">
ダウンロードしたファイルは、カスタムアクティビティなど.nupkgではなく、単なる.zipファイルなんですね。
解凍してみましょう。
<img width="250" alt="解凍後フォルダの中身" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/657ec058-1e85-a1ca-f16f-3d38c16f9a5a.png">
よく見る.xamlの他に、休日情報が設定されているExcelファイルも同梱されていました。どうやらこの２ファイルで、IsHolidayの機能を実現させるようです。
詳しくは、MarketPlaceの[【IsHoliday】](https://marketplace.uipath.com/listings/frkrzph01saux115kxmb3r)の説明書きをご覧くださいませ。
- - - 
## ３）スニペット、どうインストールする？
「スニペット」タグを選択してみましょう。その中のフォルダを選択し、右クリックすると、「開く」と言うのが表示されます。
<img width="350" alt="スニペット" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/2eef70ab-6d8b-a7b7-c2ee-7b7f3b6feadc.png">
開いてみましょう！ファイルを選択した状態で「開く」をすると、Studio上でその.xamlファイルを開いてしまいますよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/ff4094b0-0b4b-4510-8786-141a3ae38f09.png)
Explorerが開きました！
```ruby:Explorer
C:\Users\<<ログインid>>\AppData\Local\Programs\UiPath\Studio\Snippets\SnippetsVBasic\Snippets
```
フォルダ構成、フォルダ中のファイル名が、スニペットの内容と一致しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/d5f49f46-9328-9e7c-9837-d64d2756391e.png)
どうやら、このフォルダ中に、先ほどのファイル、フォルダを格納すればよさそうです！
やってみましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/20754bd5-c894-3a2c-d6dd-9f03f930f99d.png)
こんな風にしました。
UiPath Studioに戻って、更新をクリックしてみましょう！
<img width="350" alt="スニペット" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/c339cdfa-cf0a-3f0a-b492-b5d682894c41.png">
すると、スニペットフォルダ情報が更新され、先ほどの【IsHoliday】が見えていますね！
<img width="350" alt="スニペット" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/2fdc5a08-aedf-7850-490d-5734cab7a342.png">
どうやら使えるようになったようです。
- - - 
## ４）スニペット、どう使う？
では、昔やった`Delay 1 Second.xaml`のように、`IsHoliday.xaml`をドラッグ＆ドロップしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/e1f108ed-615a-c8ee-a799-515ad7e2ba7b.png)
あら、エラーになってしまいました。仕様書をみると、引数で情報をやり取りする.xamlのようです。
こういった場合は、`IsHoliday.xaml`を開いて、「名前を付けて保存」する際に、ご自分のロボットのフォルダを指定して、`IsHoliday.xaml`をロボの部品として組み込むんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/7484bbc9-8bb3-a721-0878-a3b12855243b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/c45bbc03-586f-9f06-0c2b-9db07dadd3e9.png)
「プロジェクト」タブで更新をすると、名前を付けて保存した'IsHoliday.xaml`が見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/19c8b4e3-b61e-69c2-ffea-2b7beb7f6c4d.png)

「スニペット」タグで開いた`IsHoliday.xaml`は読み込み専用でしたが、「プロジェクト」タブから開いた`IsHoliday'は読み込み専用ではなく、Invoke Workflow アクティビティを使って使用できそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/316ecca1-c48c-4851-4a86-f22a201eb572.png)
こんな感じに...
- - - 
## ５）スニペット、こうも使える？
`Delay 1 Second.xaml`をドラッグ＆ドロップしたら、そのまま使えた事を思うと、引数が無いものは、そのまま使えるのではないか？と言う思いに至りました。
やってみましょう！

例えば、[【半角⇒全角変換でこんなエラーに遭遇した！】](https://qiita.com/HANACCHI/items/5d1f89a2fc20ab334adb)で紹介した、ロケールIDを取得するとか、"SJIS"文字コードセットを使う際に使用するSystem.Text.EncodingProvide中のRegisterProviderメソドは、ロボットを作成する上で知っていればより良いけど覚えられないよね？って時に、それを.xamlとして切り出し、「スニペット」フォルダに保存することで、他のロボットを作成する際に利用できますね。
例えば、[【UiPath：言語コードによる、DateTime.ToLongDateString()などの出力内容（興味本位）】](https://qiita.com/HANACCHI/items/2b69662eace7b1a33097)で紹介した、CurrentCultureを設定する.xamlも同様ですね。

1.新しいシーケンスを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/822a2c05-c241-6a93-2db6-f41e95286854.png)
2.アクティビティにて、必要な処理を設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/cbfb5767-2550-d8fa-05e1-891487e8fdec.png)
3.保存した.xamlファイルを、Explorerの世界で、「スニペット」の任意の場所に`移動`する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/84e98180-ce2f-3ab8-463b-756edbd4fca5.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/df74330d-585c-d2b7-5b67-0b45541b48c0.png)
4.「スニペット」で更新し、移動された.xamlがある事を確認する。
<img width="350" alt="スニペット" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/134159f1-04d7-626b-734e-b5567e22c906.png">
5.「Mail.xaml」などに、新しく登録した.xamlファイルをドラッグ＆ドロップしてみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/5bf13afa-6ba0-df02-2bfb-616c3e0b8372.png)
エラーになっていません！このまま使えそうです！

## 【まとめ】
・「スニペット」は、「テンプレート」のように制御のひな形となるのではなく、「ライブラリ」のようにカッチリとしたアクティビティ然としたものになるのではなく、 **自由度が利く** 「.xaml」を使用するための機能です。
・MarketPlaceにあるものを使用するに留まらず、業務ロジックなどを作りこんで、開発プロジェクト内で共有する事ができます。それにより、 **業務ロジックなどの統一化** が図れます。
・ただ、「スニペット」から参照した.xaml中の変数のスコープはその.xaml中にとどまるでしょうから、 **見直しが必要な場合もあり** ます。
・.xamlファイルを「スニペット」フォルダに配置する事だけで利用可能な手軽さ。ただ、「ライブラリ」などと違って、版数管理などはプロジェクト内で行わなければならないのはご愛敬。自由度が利くが故ですね。ですので、スニペットを管理、開発する、 **「スニペッター」** が居るといいですね。

- - - 

##おわりに
いかがでした？

今回も読んでいただきありがとうございました！
是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました！