【UiPath】アクティビティでも出来ることはアクティビティでやりたい

UiPathではVB.NETのコードを使用することができる。VB.NETを使えばアクティビティだけでは出来ないことも出来るようになったりで、より効率的な自動化を実現できたりする。

一方で、VB.NETのコードをただ使えばいいというわけでもない。UiPathは元々ローコードツールで、プログラミングの専門知識が無くても作成できるというのがウリだ。本職エンジニアの人からすればVB.NETのコードでサクッと書いたほうがわかりやすいかもしれないが、専門知識の少ない人にとってはVB.NETのコードが乱用されたワークフローは可読性が落ちるしデバッグや修正も難しくなる。

状況にもよるが、アクティビティで出来ることはVB.NETのコードを使わずにアクティビティでやっていきたい。ここでは、いくつか事例を紹介する。

## Ifと代入
『変数Scoreが100より大きい時は変数Resultに"合格"、それ以下の時は"不合格"を代入する。』というロジックを実装する場合、VB.NETを使えば代入アクティビティだけで書くこともできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/6cdc154e-94b5-7d99-5004-b054f9cfd730.png)

一方で、アクティビティだけで書いた場合がこちら。アクティビティの数は増えているが、何を処理しているのかはこちらのほうが明確だ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/370246f4-186f-8ecc-20b0-c66792667d3d.png)

## 文字列操作
文字列の操作はStringのメソッドで実装しがちだが、「テキストを変更」アクティビティを使うことで対応できるものも多い。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/25f67fba-a08f-7b9c-4e38-7b4b295708d5.png)

### トリム（空白削除）
Stringのメソッドがこちら。トリム系のメソッドはデフォルトでは半角空白が設定されており、テキスト前後の余計な空白を削除するのが基本的な使い方になる。
- `String.Trim`：指定した文字列の先頭と末尾から、空白や指定した文字を削除
- `String.TrimEnd`： 指定した文字列の末尾から、空白や指定した文字を削除
- `String.TrimStart`： 指定した文字列の先頭から、空白や指定した文字を削除

「テキストを変更」で実装する場合は、「変更を追加」から「トリミング」を選ぶ。デフォルトでは左右両方トリミングする設定となっており、`String.Trim`と同じ動きをする。`String.TrimEnd`と同じことがやりたければ右、 `String.TrimStart`なら左だけチェックを入れればよい。
なお、Stringのメソッドでは引数を渡すことで空白以外の文字も除去できるが、「テキストを変更」の「テキストをトリミング」では対応できない。空白以外を除去したい場合はVB.NETで記述するか置換などで対応しよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/612342b6-db92-27d2-0d74-120538b3cdfa.png)

### 大文字⇔小文字変換
Stringのメソッドがこちら。
- `String.ToUpper`：指定した文字列のすべての文字を大文字に変換
- `String.ToLower`：指定した文字列のすべての文字を小文字に変換

「テキストを変更」で実装する場合は、「変更を追加」から「テキストを大文字/小文字にする」を選ぶ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/18b3e318-4af3-ce4c-352e-dd649688b0b4.png)

### 文字列を連結
VB.NETでは「`&`」か「`+`」で繋げれば文字列を連結できる。「`+`」は数値の加算にも使われるため、文字列の結合には「`&`」を使うことが推奨されていたりする。他、`String.Concat`メソッド等でも結合できる。

アクティビティでは「テキストを変更」の「テキストを結合」から実装できるが、さすがに文字列結合だけ行うのでは「`&`」で書けば十分だろう。トリムした後に文字列を追加したい等、他の文字列操作と同時に行う場合はアクティビティで書いてもよいかもしれない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/a9fd998e-af32-b685-1be1-e979e394e22a.png)

### 置換
指定した文字を別の文字で置き換えるには、VB.NETでは`String.Replace`メソッドを使用する。例えば、文字列`"ABC"`の`"A"`を`"D"`に変えたい時は、`"ABC".Replace("A","D")`だ。

アクティビティではいくつかやり方がある。例のようなシンプルな置換では、先ほどまでと同様の「テキストを変更」アクティビティの「テキストを検索して置換」で対応できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/6841ca09-1f6f-e5ba-a8df-b1fd653bdcab.png)

複雑な置換を行いたい場合は正規表現ビルダーが使える「一致するパターンを置換」アクティビティを使おう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/840bf0b0-08c7-8b77-1b0b-30508226f293.png)

### Stringメソッドについて
ここまでアクティビティで代替できるStringメソッドの例をいくつか記載したが、アクティビティでは基本的に一つのアクティビティで一つの処理しかできない。一方、Stringメソッドは連続して記載することができるので、代入アクティビティなど一つを使ってVB.NETで一気に書くか、「テキストを変更」アクティビティを追加していくかは状況によって判断しよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/8aac532e-9b49-3cb5-d371-89adac8c808b.png)

## ファイルの数だけ繰り返し
VB.NETでは、指定したフォルダの中のファイルの情報を取得したい場合は`Directory.GetFiles`メソッドを使う。以前はUiPathでもこのメソッドを使い、「繰り返し（コレクションの各要素）」を使用して処理を行っていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/6145c5a9-f815-3999-bb0a-8d26cc62f62f.png)

UiPath.System.Activities v21.10.3 で「繰り返し (フォルダー内の各ファイル）」が実装されている。各種設定が視覚的にわかりやすくなっているので、使えるならばこちらを使おう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/b6b2809c-a79b-f096-eef6-2a3813bb974e.png)

## まとめ
VB.NETのコードを代替できるアクティビティをいくつか紹介した。
UiPathは随時更新が行われており、新しいアクティビティもどんどん追加されている。現状VB.NETで書くしかないロジックも将来的にはアクティビティで実現できるようになるか、あるいは既になっているかもしれないので、アクティビティの一覧は時々眺めてみよう。

## 動作環境
UiPath.System.Activity v24.10.7