【UiPath】Studio/Robotにおけるユーザーモードとサービスモードの違い

# はじめに
本記事ではUiPath Studio/Robotにおけるユーザーモードとサービスモードの違いについて説明します。対象バージョンはv2020.10以降を想定しています。
UiPathの [公式Webガイド](https://docs.uipath.com/ja/robot/standalone/2023.4/user-guide/interactive-sign-in) では、たとえば次のような動作モードに関する記述があります。
- Robotが **ユーザーモード** の場合には対話型サインインを利用できる
- Unattended Robotの場合は **サービスモード** でインストールする

などなどです。
そもそもこれらの動作モードはどのように違うのでしょうか？
またどのように使い分ければ良いのでしょうか？

# 動作モードによる違い
本質的な違いを一言で言うと **「UiPath RobotサービスがWindowsサービスで動作するかどうか？」** です。
- ユーザーモード: UiPath RobotサービスがWindowsサービスではなくWindowsログインしているユーザー権限で実行される
- サービスモード: UiPath RobotサービスがWindowsサービスとしてSYSTEM権限で実行される

これらの動作モードはUiPath Studio/Robotインストール時に決定されます。インストールオプションとして、
- Studio(Automation Developer)またはAttendedロボットを選択 → ユーザーモードでインストールされる
- Unattendedロボットを選択 → サービスモードでインストールされる
    - 詳細インストールオプションにより、Studio/Attendedロボットをサービスモードでインストールすることも可能です。「UiPath RobotをWindowsサービスとして登録します。」のオプションがオンの時はサービスモード、オフの時はユーザーモードでインストールされます。
![Studio_InstallMode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/bd9cf7d4-6cb4-6244-ec55-98f43188efcb.png)
- なおCommunity版をクイックでインストールした場合や、管理者権限を使用せずに「現在のユーザーのみ」にインストールした場合にはユーザーモードになります。

インストール後に動作モードを確認するにはどうすれば良いでしょうか？
- Windowsサービスマネージャー(services.msc)を見てみましょう。UiPath Robot Serviceが存在すればサービスモード、存在しなければユーザーモードです。
![RobotService.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/454a2862-6dbd-a302-5946-1f44a48dd051.jpeg)
    - ※ UiPath **RobotJS** Serviceという似たようなサービスもありますが別物です。
- 他にも確認方法があります。詳しくは https://forum.uipath.com/t/topic/416737 をご覧ください。

# そもそもUiPath Robotサービスとは？
- UiPath Robotのアーキテクチャをざっくりと図解すると次のようになります。
![UiPathRobot.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/2796c0f1-7a67-7579-a3fc-74ccb376e46f.png)

	- Robotサービス: UiPath Robotの頭脳にあたる。UiPath Orchestratorとのコミュニケーションを行い、NuGetフィードからNuGetパッケージのダウンロードを行ったり、Executorに自動化処理の実行指示などを行う
	- Assistant: 人間とのインターフェース、Robotエージェントとも呼ばれる。Orchestrator接続を含めた各種設定を行ったり、Attendedによる自動化処理の実行開始などを行う
	- Executor: 実際の自動化処理を行う。NuGetパッケージおよび依存関係のあるアクティビティを読み込んで実行する

- このうちAssistantとExecutorは基本的にはユーザーモード、つまり現在Windowsログインしているユーザー権限で実行されます。
    - ※ ただしバックグラウンド処理のワークフローは例外で、Executorがサービス権限で実行されます。

ではRobotサービスをサービスモードで実行する必要があるケースはどのような場合でしょうか？

# サービスモードのユースケース
## その1
まず **Unattendedロボットを使う場合** です。Unattendedロボットは無人状態でもOrchestratorからの命令を受けて、あらかじめ指定した実行アカウントでWindowsログインすることによってジョブ実行が可能です。
Orchestratorと通信を行うためにはOSが起動したタイミングでRobotサービスを起動させる必要があります。つまりWindowsサービスとして登録し、サービスモードとして動作することが必須となります。
また自動化処理実行のためにWindowsログインしてデスクトップセッションを開始するにはサービスモードによる特権が必要となります。

## その2
他には **Orchestrator接続を管理者権限によって制御したい場合** です。
- ユーザーモード: 一般ユーザー権限によってOrchestrator接続設定を変更したり、接続・切断が行えます。
- サービスモード: Orchestrator接続設定を変更したり、接続・切断するには管理者権限が必要です。
- このためユーザーによって勝手にOrchestratorから切断されては管理の上で困るケースではStudio/Attendedロボットであってもサービスモードでインストールして運用した方が良いでしょう。

逆にユーザーモードの方が良いのはどのような場合でしょうか？
# ユーザーモードのユースケース
## その1
**対話型サインインを使う場合** です。 [対話型サインイン](https://docs.uipath.com/ja/robot/standalone/2023.4/user-guide/interactive-sign-in) は従来のマシンキーを使用せずにブラウザーでOrchestratorへサインインすることによって接続することができます。対話型サインインはどのようなメリットがあるでしょうか？
- マシンキーを使用しないためOrchestratorでマシン作成・管理が不要
- ユーザーのロボット設定で「ドメイン\ユーザー名」の指定が不要
- Automation Cloud環境では [ユーザーライセンス管理](https://docs.uipath.com/ja/overview/other/latest/overview/what-is-my-licensing-model) を使用することによって、テナントをまたがって1ユーザーライセンスでサインインすることができます。
    - ※ マシンキー接続では同一ユーザーでもテナントごとにライセンスが必要となります。

今後はマシンキーが非推奨となりますので、Studio/Attendedロボットをユーザーモードで使用している場合には対話型サインインに移行することを検討してはいかがでしょうか？

## その2
**Orchestrator接続を利用ユーザーに委任したい場合** です。要するにサービスモードのユースケースその2の逆です。
社内に管理者を立てるのが難しい場合、物理的に分散されたマシンをリモートで管理するのが難しい場合など、利用ユーザーにガイドラインを周知しつつも管理を任せた方が良いケースもあります。

# 動作モードの違いによる細かい注意点
その他、動作モードの違いによってStudio/Robot設定で注意すべき点についてご説明します。
- **NuGetキャッシュ** (%UserProfile%\\.nuget\packages)の読み書き権限
    - ユーザーモード: Windowsログインユーザーの権限でNuGetパッケージが展開され、Executorから読み込まれます。
    - サービスモード: SYSTEM権限で一部のNuGetパッケージが展開され、Executorから読み込まれます。
    - このためサービスモードでプロセスを実行した後ユーザーモードに変更を行った場合、権限不足によってエラーが発生する場合があります。この問題を回避するにはNuGetキャッシュを一旦手動で削除します。詳細は [公式Webガイド](https://docs.uipath.com/ja/robot/standalone/2023.4/user-guide/nuget-packages-not-accessible-after-migration) をご参照ください。
- Robot→Orchestrator間の **プロキシ接続** の設定箇所
    - ユーザーモード: Windowsプロキシ設定が参照されます。
    - サービスモード: Robotサービスの動作には uipath.config ファイル が参照されます。
    - 動作モードによるプロキシ設定の違いについては [ナレッジベース](https://www.uipath.com/ja/community-blog/knowledge-base/robot-orchestrator-proxy-configuration-v202210) をご参照ください。

# おわりに
- ユーザーモードとサービスモードの違いを意識しておくとStudio/Robotの運用管理・トラブルシューティングに役立つことがあります。この記事が何かのお役に立てば幸いです。