UiPath の RPA ってどんな製品？

まだ使ったことがない方に、改めて UiPath の RPA がどんな製品なのかをご紹介します。本稿の後半は、少しだけプロのソフトウェア開発者の方向けの内容です。

# 3つのコアプロダクト
現在、UiPath は企業における自動化を支援するために、大変多くの製品をもっています。その中でも、コアプロダクトとよばれる重要な製品が3つあります。Studio、Orchestrator、Robot の3つです。

![Qiita用イラスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3377536/0ef490b2-f376-cbc5-a8fe-e85d35bf2389.png)

## [Studio について](https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/introduction)
ワークフローとよばれる .xaml ファイルに、アクティビティとよばれる部品をドラッグ&ドロップでぺたぺた貼り付けて、自動化を作成します。各アクティビティの動作は、プロパティパネルで調整できます。ひとつのプロジェクトをパブリッシュすると、ひとつの自動化（オートメーション）ができます。

Studio は Windows 版のみ提供されています。なお Studio をインストールすると、必ず Robot も一緒にインストールされます。

## [Orchestrator について](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/introduction)
Web サーバーです。オンプレミス版とクラウド版がありますが、クラウド版の利用を強くお勧めします。ここで、Studio/Robot と自動化を管理できます。Studio/Robot にライセンスを付与したり、自動化の実行スケジュールを登録したり、自動化の実行ログを確認したり。ほかにも便利な機能がたくさんありますが、ここで紹介するには多すぎるので割愛します。

## [Robot について](https://docs.uipath.com/ja/robot/standalone/2023.10/user-guide/introduction)
自動化を実行します。Attended Robot（有人ロボット）と、Unattended Robot（無人ロボット）があります。どちらも同一のソフトウェアですが、使い方が違います。

Windows 版は、Robot だけを（Studio なしで）インストールすることもできます。また、Linux 版と Mac 版の Robot も提供されています。（Linux 版と Mac 版の Studio は提供されていないため、必ず Robot のみのインストールになります。）

### Attended Robot（有人ロボット）とは
ユーザーが [Assistant](https://docs.uipath.com/ja/robot/standalone/2023.4/user-guide/about-uipath-assistant) から自動化の開始を指示します。すると、ユーザーの PC 上で Robot が自動化を実行します。Robot がユーザーの代わりにキーボードとマウスを操作して、ユーザーの作業を支援します。

自動化の実行中にユーザーがキーボードやマウスを操作すると、自動化が失敗することがあるので注意が必要です。これを回避するための機能やテクニックも多く用意されています。[ピクチャインピクチャ](https://docs.uipath.com/ja/robot/standalone/2023.4/user-guide/picture-in-picture)とか、[バックグラウンドプロセス](https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/background-process)とか、[ユーザー入力をブロック](https://docs.uipath.com/ja/activities/other/latest/ui-automation/block-user-input)アクティビティとか。

### Unattended Robot（無人ロボット）とは
Orchestrator が Robot に自動化の開始を指示します。その指示を受けた Robot は、無人の Robot 用 PC の Windows に自動でログインし、自動化を実行します。終わったら、Robot は自動で Windows からログオフします。（便利！）

Unattended Robot 用の Windows アカウントとパスワードは、Orchestrator に設定しておく必要があります。

自動化を実行中の PC は無防備になってしまうので、安全な場所に置きましょう。たとえば、キーボードとマウスは外して、鍵のかかるサーバールームに置くとか。サーバールーム内の仮想マシンで Unattended Robot 用の PC を構築するのも良い方法です。

# UiPath の RPA は、プロの開発者から見てどうなの？
C# や Java、Python などのプログラミング言語を使いこなすプロのソフトウェア開発者は、RPA とはおもちゃみたいなものであり、プロの使用に耐えるものではないとの印象をお持ちかもしれません。でも、それは正しくありません。

もともと、ワークフロー (.xaml ファイル) とアクティビティは、Microsoft が開発したもので、[WWF (Windows Workflow Foundation)](https://learn.microsoft.com/ja-jp/dotnet/framework/windows-workflow-foundation/) という技術に含まれています。.NET 上で軽快に動作します。

WWF については、[エッセンシャル WF: Windows Workflow Foundation](https://www.amazon.co.jp/gp/product/4798114251) という書籍がよく説明しています。この本が扱っている WWF はバージョンが少々古いため、現時点では強くお勧めできませんが、WWF における理念や設計上の関心事を知ることができます。（この本は、C# でばりばりコードを書く人向けです。RPA 開発者向けではないのでご注意を。）

このように、UiPath の製品は Microsoft の技術基盤の上に構築されています。UiPath の創業者 [Daniel Dines](https://en.wikipedia.org/wiki/Daniel_Dines) は、Microsoft の開発者でした。

## 画面操作の自動化
フォルダとファイルは、ツリー構造をもちます。ルートフォルダからファイルまでの経路（パス）は、[ファイルパス](https://learn.microsoft.com/ja-jp/dotnet/standard/io/file-path-formats)で表します。同名のファイルでも、経路が違えば区別できます。

同じように、画面上の UI 要素（ボタンやメニューなど）もツリー構造をもちます。ルートウィンドウ（壁紙）から UI 要素までの経路（パス）を、UiPath では[セレクター](https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/about-selectors)というテキスト情報で表します。見た目が同じ UI 要素でも、経路が違えば区別できるというわけです。

セレクターは作成と保守が容易なので、ワークフロー開発の生産性を高めます。また、画像や位置情報によらず UI 要素を認識できるので、ワークフロー実行の安定性をも高めます。この UI 要素への経路（パス）は UiPath の重要な技術要素のひとつであり、社名の由来にもなっています。

UI 要素のツリー構造は、[UI Explorer](https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/uipath-explorer) で確認できます。

## .nupkg による再利用可能な実行コードの配布
.NET における実行コードは .nupkg ファイルにパッケージされ、[NuGet サーバー](https://www.myget.org/)でホスト・配布されます。NuGet は、.NET の実行コードの配布インフラです。.nupkg には new package という意味があり、発音もニューパッケージです。

Orchestrator は、NuGet サーバーとしての機能も持っています。UiPath の自動化も、.nupkg ファイルにパッケージされ、各 Robot 端末に自動で配布されます。

.nupkg ファイルはバージョン管理されるので、共通のライブラリも安全に配布できます。たとえば、
- ライブラリの新しいバージョンを公開したら、既存の自動化が動かなくなってしまう、ということはありません。既存の自動化は当該のライブラリの固有のバージョンを使うようになっているので、そのライブラリの新しいバージョンには影響されないからです。（その必要があれば、既存の自動化を新しいバージョンのライブラリを使うように直して再パブリッシュします。）
- Studio/Robot をバージョンアップしたら、既存の自動化が動かなくなってしまう、ということもありません。Studio/Robot と、自動化を構成する .nupkg ファイルは完全に分離されているからです。（Studio/Robot 自体の不具合により動かなくなることはまれにありますが、）

## ワークフローのバージョンを管理する
Studio でワークフロー（.xaml ファイル）を開くとビジュアルに編集できますが、その中身は XML 形式のテキストファイルです。そのため、ワークフローは Git などのバージョン管理システムで簡単に管理できます。

Studio は Git や SubVersion などのクライアント機能を内包しており、Studio 単体でそれらのリポジトリにアクセスできます。もちろん、使い慣れた Git のクライアントツールを Studio と併用することもできます。

## ワークフローで、共通部品を作成する
アクティビティ（ワークフローに貼り付けて使う部品）は、Studio のワークフローだけで簡単に作成できます。（なお、C# を使ってより高度なアクティビティを作ることもできます。）Studio で[ライブラリプロジェクト](https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/about-libraries)を作成してパブリッシュしてください。ひとつのワークフローが、ひとつのアクティビティになります。

そのため、これまでに多くのアクティビティが作成されています。これらのアクティビティは、[UiPath Marketplace](https://marketplace.uipath.com/ja) で見つかります。UiPath が提供する既定の部品以外にも、多くの部品が利用可能となっているのです。車輪の再発明を避け、効率よく自動化を作成できます。

たとえば、社内システムにログインする部品を作ったら、社内の Orchestrator で公開できます。これにより、社内の自動化開発において、生産性や保守性を高めることができます。

自社製品の操作を自動化する部品を作ったら、ぜひ Marketplace で公開してください。自社製品への注目度を高め、ユーザーにより良い利便性を提供できます。

## 複数の無人ロボットを協調動作させる
Orchestrator には、キューという機能があります。一般に、[キュー](https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A5%E3%83%BC_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF))とは先に入れたものから先に出てくる「先入れ先出し」といわれるデータ構造のことです。

Orchestrator のキューは、処理の単位（トランザクション）をアイテムとして管理できます。Robot にやらせたい処理をアイテムとしてキューに入れます。複数の Robot が、これをひとつずつ取り出して処理します。この仕組みにより、数十から数百もの無人ロボットを協調動作させることができます。

自動化による処理が失敗したら、自動でリトライさせることもできます。これは、失敗したアイテムを同じキューに入れ直すことで実現されています。とても単純で頑健な仕組みです。
![キュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3377536/adee770f-454e-b4f2-d1c1-65be6f30464b.png)

ご関心のある方は、キューに入れた[アイテムの状態遷移図](https://docs.uipath.com/ja/orchestrator/standalone/2023.4/user-guide/queue-item-statuses)を眺めてみてください。キューを操作するサンプルワークフローは、[このページの末尾](https://docs.uipath.com/ja/orchestrator/standalone/2023.4/user-guide/managing-queues-in-studio)からダウンロードできます。この状態遷移図とサンプルワークフローは、私が書いてユーザーガイドに提供したものです。

## 膨大な労働力をオンデマンドで調達する
前節では、数百もの Robot を並列処理させることをご紹介しましたが、そんなにたくさんの PC をセットアップするなんて非現実的だと思いませんか？ 実は、これはとても簡単です。

UiPath には[クラウドロボット](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/running-unattended-automations-using-cloud-robots---vm)という機能があり、Robot がセットアップ済みの PC をクラウドから簡単に調達できます。これは、尋常ではなく大規模な、文字通りの桁違いの労働力を、オンデマンドで調達できることを意味します。（それだけの費用もかかりますが、）

クラウドロボットに VPN を設定すれば、企業のイントラネット内のリソースにアクセスさせることもできます。もはや、Unattended Robot 用の PC を自分で準備する必要はありません。

というわけで、Orchestrator もクラウドで、Robot もクラウドです。ちなみに Studio もクラウドでできます。[StudioWeb](https://docs.uipath.com/ja/studio-web/automation-cloud/latest/user-guide/overview) という製品があります。

## 現実世界のワークフローと、PC で実行可能なワークフローのギャップを埋める
現実世界のワークフロー（社長承認が必要な稟議とか）は、開始してから完了するまでに数か月かかることもあります。でも、自動化（=プログラム）は PC の電源を切ったら終わってしまいます。これでは、現実世界のワークフローの流れをプログラムで表現することはできません。

このギャップを埋めるべく、WWF のワークフローには、実行中の状態を保存（永続化）して、その実行を中断できるという機能が備わっています。あとで、この実行状態をロードして、ワークフローの実行を途中から再開できます。元の PC とは別の PC で再開することもできます。

このアーキテクチャを活用して実装されたのが、UiPath の [Action Center](https://docs.uipath.com/ja/action-center/automation-cloud/latest/user-guide/introduction) という機能です。人間の判断が必要になったら、Unattended Robot は自動化の実行を中断して Windows からログオフします。次に、ユーザーが Orchestrator 上で何らかのアクションをします。承認するとか却下するとか、フォーム上で追加情報を入力するとか。すると、Unattended Robot が Windows にログインして、自動化の実行を再開します。

このように、Action Center はユーザーと Unattended Robot が協調して作業できるようにします。これを [Human in the Loop](https://docs.uipath.com/ja/document-understanding/automation-cloud/latest/user-guide/about-document-understanding)（人間参加型）といいます。また、PC の電源断をまたいで実行を継続できる能力を [Long Running Workflow](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/working-with-long-running-workflows)（長期実行ワークフロー）といいます。

Action Center を試すには、Studio のプロセスプロジェクトに [UiPath.Persistence.Activities](https://docs.uipath.com/ja/activities/other/latest/workflow/about-the-persistence-activities-pack) パッケージを追加し、プロジェクトの設定で「永続性をサポート」を有効にしてください。自動化の実行を中断・再開するアクティビティ群は、[このページ](https://docs.uipath.com/ja/action-center/automation-cloud/latest/user-guide/persistence-activities)で解説されています。

中断してユーザーのアクションを待っている自動化の一覧は、Orchestrator の[ナビゲーションバー](https://docs.uipath.com/ja/automation-cloud/automation-cloud/latest/admin-guide/exploring-the-user-interface)にある「Actions」のページで確認できます。

## ほかの Web サービスと連携する
ひと昔前の Web サービスは、ユーザー名とパスワードで認証することが一般的でしたが、これにはセキュリティ上の不安がありました。アプリが何らかの Web サービスを使うには、アプリにユーザー名とパスワードを教える必要があるからです。

悪意をもったアプリにパスワードを教えたら、アプリがユーザーになりすまして悪いことをするかもしれません。そのつもりがなくても、パスワードが漏洩するリスクもあります。

そのため、現在の Web サービスでは [OAuth 認可](https://ja.wikipedia.org/wiki/OAuth)が広く使われています。これは、ユーザーがブラウザーでログインし、Web サービスの利用権限を部分的にアプリに許可する仕組みです。OAuth はアプリにパスワードを教える必要がないため、とても安全です。

一方で、アプリに OAuth クライアントの機能を実装するのは少々面倒です。実装したとしても、ユーザーがその場にいないと Web サービスへのアクセスをアプリに認可（ブラウザーでログイン）できないため、このアプリを無人の環境で動かすことはできません。

これは、アプリ（= Unattended Robot）が外部の Web サービスを使いたいときに問題となりますが、UiPath はこれを利用しやすい形で解決しています。ユーザーは、あらかじめ Web サービスにログインし、権限移譲の許可を Orchestrator 上に（もしくは Robot 端末上に）保存しておくことができます。これにより、Robot はユーザーによるログインを必要とせず、当該の Web サービスをすぐに呼び出して利用できます。この機能を [Integration Service](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/introduction) といいます。

Integration Service に対応したアクティビティ群を使うと、認証（と認可）のステップをまったく意識することなく、外部の Web サービスの API を簡単に呼び出せます。さらに、外部の Web サービス上における何らかの[イベント](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/event-triggers)（メールの受信など）をきっかけとして、Unattended の自動化を自動で開始することもできます。

現在、Integration Service は 140 ほどの Web サービスとの接続をサポートしています。これには [Outlook](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-microsoft-outlook365) や [Gmail](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-google-gmail)、[Box](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-box-box)、[Jira](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-atlassian-jira) など、日本でも人気のサービスが多く含まれています。独自のコネクターをユーザーが実装することもできます。

なお、現在の Integration Service はクラウド版の Orchestrator でのみ利用できます。（オンプレミス版では利用できません。）

## プロ開発者が培ったスキルを、自動化開発に活かす
UiPath Studio は .NET ネイティブな開発環境です。ワークフローの開発においては、.NET の膨大なクラスライブラリを直接利用できます。（ワークフローの変数パネルで、使いたいクラスを選んでください。）これには DataTable や正規表現はもちろん、[LINQ](https://www.amazon.co.jp/dp/4798069906) などのプログラミングテクニックも含まれます。

さらに、Studio 2023.10 からは [Coded Workflow](https://docs.uipath.com/ja/studio/standalone/2023.10/user-guide/coded-workflow) がサポートされました。.xaml ファイルにアクティビティをぺたぺた貼る代わりに、.cs ファイルに直接 C# コードをがりがり書くことで自動化を作成できます。UiPath Studio は市民開発者にも比較的簡単に扱えますが、プロが使うとより卓越した生産性を発揮できる本格的な開発環境です。

# UiPath の始め方
[UiPath Automation Cloud](https://cloud.uipath.com/) にアカウントを作成し、Studio をダウンロードしてインストールしてください。それだけで、すぐに無料で始められます。

Automation Cloud にテナントを作成したら、まずはいい感じの URL を取得してください。これは早い者勝ちなので、今すぐやるのが吉です！

多くの Studio や Robot が必要になったら、ライセンスを追加してください。同じ URL のテナントを、そのまま使い続けることができます。

なお、[テナント](https://docs.uipath.com/ja/automation-cloud/automation-cloud/latest/admin-guide/about-tenants)とは Orchestrator のほか複数の UiPath のサービスを提供する論理単位です。必要に応じて、複数のテナントを Automation Cloud 上に作成できます。

# まとめ
UiPath は、自動化（無人の環境で実行できるプログラム）を作成し、配布し、実行するインフラとしてとても優れています。これは、プロの開発者の方にも活用する価値が高いものだと思います。

事実、UiPath 社は、その製品群を（RPA の枠をこえて）Automation Platform と呼称しています。上記にご紹介した機能の数々は、まさに企業において自動化を運用するためのインフラであり、プラットフォームです。[Document Understanding](https://docs.uipath.com/ja/document-understanding/automation-cloud/latest/user-guide/about-document-understanding)（AI OCR）や [Test Suite](https://docs.uipath.com/ja/test-suite/automation-cloud/latest/user-guide/introduction-test-suite)（ソフトウェアテストの自動化）など、ここでは紹介できなかった機能も多くあります。

UiPath の製品群を「部品をぺたぺた貼って自動化を作成できるおもちゃみたいなもの」と捉えては見誤ります。WWF のワークフローとアクティビティは、新しいプログラミングパラダイムを提示しています。ぜひ、活用して頂きたいと思います。