TypeInto（文字を入力）アクティビティは苦手な文字がある（「特殊キーの構造エラーです」の対策まとめ）

# はじめに
先日、実務で使用しているロボットが `TypeInto` アクティビティでエラー発生してしまったことがありました。
そのとき調べて初めて知った仕様があったため、備忘的にまとめておきます。

# 結論から
`[`（角カッコ）を入力する際は気を付けましょう！
100%エラーになってしまうケースが存在します。

# 検証環境
- UiPath
  - Studio 2021.10.3 Community License
- 使用パッケージ
  - UiPath.UIAutomation.Activities v21.10.3

# やりたいこと
メモ帳に以下の文言を入れたい！ただそれだけです。
`[TEST]`
※`[` という文字が含まれていれば、どんな文言でも構いません（`[` の位置も任意）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/9ea93544-7a42-2338-3423-26efa7b128bc.png)

文字を入力ですから、シンプルに `TypeInto` アクティビティを使うだけですね。
早速検証してみたいと思います！

# 入力方式の3パターン
UiPath の `TypeInto` アクティビティは、3パターンの入力方式があります。

1. デフォルト
1. ウィンドウメッセージを送信
1. 入力をシミュレート

それぞれの違いについてはUiPath社様が公式ドキュメントにまとめて下さっているので、詳しくは以下をご参照下さい。
私は細かな違いを忘れた際に、よく以下のページを参照して確認するようにしています。

https://docs.uipath.com/studio/lang-ja/docs/input-methods

※上記サイトから抜粋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/2464108c-0400-19f2-4906-b415ee615b9e.png)

# 入力メソッド：デフォルト
まずは基本となる入力方式 `デフォルト` で試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/bced89cd-78c7-73ec-079b-9bfcde20d9e0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/b1fb147c-775d-f5ec-381f-f4058e9ef42a.png)

いざロボット実行！

### ロボット実行結果
エラーになりました…。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/bb75bd1a-3de3-9e8f-d775-234241d39aa5.png)

### 解説
なんだかよくわからないエラーですね。
調べてみると、UiPath Forum で同じ事象が取り上げられていました。

https://forum.uipath.com/t/topic/265539

※上記サイトから抜粋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/79aaff31-b9b3-e3c4-f3a6-3e8815345f45.png)

理由はわかりませんが、`[` が特殊記号扱いになるようでエラーになってしまうようです。
`[` を `[[` に置換して再実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/f9f83027-317b-ca8c-278d-e49e194cc71e.png)

正常動作し、メモ帳に `[TEST]` と入力されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/1c3fbd64-380e-90a5-d006-cdd3841d49ef.png)

:::note alert
入力方式「デフォルト」の場合、"[" の入力は "[[" に置換しないと100%エラーが発生する
:::

# 入力メソッド：ウィンドウメッセージを送信
次は入力方式 `ウィンドウメッセージを送信` で同じことを試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/891d58cd-2ef0-4a93-199f-fb0a96cd2070.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/cb2fe3d9-7ec8-5230-32ba-2e34bc0c964a.png)

いざロボット実行！

### ロボット実行結果
同じくエラーになりました…。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/bb75bd1a-3de3-9e8f-d775-234241d39aa5.png)

### 解説
入力方式「デフォルト」と同様、`[` を `[[` に置換して再実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/ad55dcae-fc4e-676a-bba6-5e374587e1af.png)

正常動作し、メモ帳に `[TEST]` と入力されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/1c3fbd64-380e-90a5-d006-cdd3841d49ef.png)

:::note alert
入力方式「ウィンドウメッセージを送信」の場合、"[" の入力は "[[" に置換しないと100%エラーが発生する
:::

# 入力メソッド：入力をシミュレート
最後に入力方式 `入力をシミュレート` でも同じことを試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/842c3f34-f545-1b5f-b7f5-3d1ebdb5849d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/3fc2aa83-a82b-f18e-72d4-40cfa93b4a5c.png)

いざロボット実行！

### ロボット実行結果
エラーになるかと思いきや、正常動作しメモ帳に `[TEST]` と入力されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/1c3fbd64-380e-90a5-d006-cdd3841d49ef.png)

### 解説
:::note info
入力方式「入力をシミュレート」の場合、"[" は正常に入力可能
:::

# UiAutomationNext ではどうなる？
せっかくなので UiAutomationNext でも動作結果を検証してみます。
UiAutomationNext で文字入力したいときは `NTypeInto` アクティビティを使用します。

## 検証結果
`TypeInto` アクティビティと、`NTypeInto` アクティビティで、動作の違いはありませんでした。

### 入力文字列：`[TEST]`
- デフォルト：<font color="red">エラー</font>
- ウィンドウメッセージを送信：<font color="red">エラー</font>
- 入力をシミュレート：正常

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/ec6e3b71-6787-3249-ac5d-e02f634160c4.png)

### 入力文字列：`[[TEST]`
- デフォルト：正常
- ウィンドウメッセージを送信：正常
- 入力をシミュレート：正常

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/c77babeb-7873-adda-1538-4fa4731fcc76.png)

※「入力をシミュレート」の場合、メモ帳への入力文字列がそのまま `[[TEST]` となるので注意です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368775/3dee1252-808f-9c2a-1fbc-d7ed15a09e13.png)

# 結論まとめ
`[` という文字を、`TypeInto` アクティビティ、または `NTypeInto` アクティビティで入力したときの動作表。

| 入力メソッド         | 動作結果                    | 対策        |
|:---------------------|:---------------------------:|:-----------:|
| デフォルト           | <font color="red">NG</font> | "[[" と入力 |
| ウィンドウメッセージ | <font color="red">NG</font> | "[[" と入力 |
| シミュレート         | 〇                          |             |

**「入力をシミュレート」と互換性が無いアプリケーションやWebサイト**
かつ、
**`[` が入力される可能性があるフィールド**
については、`[` を `[[` に置換するロジックを仕込んでおくと良いと思います。

私が実務でこのエラーに遭遇した時は、入力対象のアプリケーションが「入力をシミュレート」に対応していなかったので、上記ロジックを入れることで対処しました。

# 最後に
同様の現象が、`[` 以外の文字でも発生するのでしょうか…？
ご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。
（わかり次第、記事をアップデート予定です）

# 関連リンク
- UiPath ドキュメントポータル：文字を入力 (Type Into) アクティビティ
https://docs.uipath.com/activities/lang-ja/docs/type-into

- UiPath ドキュメントポータル：入力メソッド
https://docs.uipath.com/studio/lang-ja/docs/input-methods

- UiPath Forum：文字を入力アクティビティのエラーについて
https://forum.uipath.com/t/topic/265539