【UiPath モダンデザイン】開発がさらに捗る!今日から使えるオブジェクトリポジトリ

RPAエンジニア 小林


UiPath Studio 2021.10からモダンデザインが導入され、UIオブジェクトを一元管理するオブジェクトリポジトリが使えるようになりました。従来のUiPathにはなかった機能なので難しく感じる人もいるかもしれませんが、実はとても便利な機能です。今回は、オブジェクトリポジトリの使い方や導入の際の考え方を紹介します。

オブジェクトリポジトリは、簡単に言ってしまえばUI要素を1カ所でまとめて管理するための機能です。ロボットを開発する中で、何度も出てくる値や変更するかもしれない値は変数や引数として扱います。それと同様に、UI要素もまとめて管理してしまおうというのがオブジェクトリポジトリの考え方です。

オブジェクトリポジトリの使い方

※オブジェクトリポジトリを使うにはUiPath Studioの「モダンデザインエクスペリエンス」が有効化されている必要があります。詳しくはこちらの記事をご覧ください。

オブジェクトリポジトリにUIオブジェクトを登録する

UiPathのオブジェクトリポジトリではオブジェクトは「どのアプリ」の「どの画面」の「どの要素」かを指定して登録します。今回は例として、BlogトップページにあるRPA BlogへのリンクのUI要素を取得してみようと思います。まず、UiPath Studioでオブジェクトリポジトリの「プロジェクトUI記述子」を右クリックして新しいアプリケーションを作成します。今回はChromeを使うのでアプリケーション名は「Chrome」とします。

オブジェクトリポジトリにアプリケーションを作成する

次は今作成したアプリケーションに画面を追加します。先ほど作成したアプリケーション(Chrome)を右クリックして画面を作成します。画面名(今回は「Blog_ミツエーリンクス」とします)を入力し、操作したいアプリケーション上の画面を指定して作成できます。

オブジェクトリポジトリに画面を作成する

画面を作成できたら、同じ要領で作成した画面「Blog_ミツエーリンクス」を右クリックして要素を作成します。要素名(今回は「RPA Blog」とします)を入力し、要素を指定して作成します。

オブジェクトリポジトリに要素を作成する

これでオブジェクトリポジトリへのUIオブジェクトの追加が完了しました。最終的には次の図のように、アプリケーション「Chrome」の配下に「Blog_ミツエーリンクス」の画面があり、さらにその配下に「RPA Blog」の要素があるという構成になっていると思います。

オブジェクトリポジトリに登録したUIオブジェクトの構成

UIオブジェクトとアクティビティを関連付ける

続いてオブジェクトリポジトリに登録したUIオブジェクトを各アクティビティに反映させます。今回は「RPA Blog」のリンクをクリックするフローを考えます。まず、Chromeを使うためにアプリケーション/ブラウザーを使用(UiPath.UIAutomationNext.Activities.NApplicationCard)アクティビティを使います。アプリケーション/ブラウザーを使用アクティビティを開いたらオブジェクトリポジトリの画面「Blog_ミツエーリンクス」を同アクティビティにドラッグアンドドロップするだけです。クリックに関しても同様に、アプリケーション/ブラウザーを使用アクティビティの中に配置したクリック(UiPath.UIAutomationNext.Activities.NClick)アクティビティに要素「RPA Blog」をドラッグアンドドロップします。これでRPA Blogのリンクをクリックするフローのできあがりです。

UIオブジェクトをアクティビティにドラッグアンドドロップする


オブジェクトリポジトリを使うメリット

ここまでオブジェクトリポジトリにUIオブジェクトを登録してフロー内で利用する方法を紹介しました。UI要素を管理する場所が個々のアクティビティからオブジェクトリポジトリに変わっただけのように見えますが、これには大きなメリットがあります。

まず、UI要素の再利用が容易になるという点です。オブジェクトリポジトリに登録した要素は、オブジェクトリポジトリに対応したアクティビティにドラッグアンドドロップするだけで使えます。同じ要素を何度も操作するロボットの場合、何度も画面上で指定せずに済みます。また、オブジェクトリポジトリはUIライブラリプロジェクトとして切り出しパブリッシュすることで共有することもできるので、チーム開発もしやすくなります。

オブジェクトリポジトリからUIライブラリを作成する

もう1つのメリットは、UI要素の修正が容易になるという点です。操作対象のUI要素のセレクタに変更があった際も、オブジェクトリポジトリのUIオブジェクトを右クリックして表示される「記述子を編集」から修正するだけです。オブジェクトの修正はそのオブジェクトを参照するアクティビティにも適用されるので、対象のオブジェクトを使ったアクティビティがいくつあろうと、1個のオブジェクトを修正するだけで対応できます。

このように、オブジェクトリポジトリを使うメリットは大きいといえます。一方で、すべてのUI要素をオブジェクトリポジトリに登録して管理するのは面倒という場合もあると思います。それではどの様な場面でオブジェクトリポジトリを使うとより効果的なのでしょうか?後々の管理のしやすさを考えると基本的にUI要素は一通りオブジェクトリポジトリで管理できるのが理想ですが、まずは複数のアクティビティで共通のセレクタを使っていたり、今後変更する可能性があるUI要素を使っていたりする部分だけでもオブジェクトリポジトリで管理すると開発の効率が上がると思います。特に複数人でロボットを共同開発する際には、あらかじめオブジェクトリポジトリで管理するUI要素に目星をつけておいたり、特定のアプリの操作に関わるUI要素は必ずオブジェクトリポジトリで管理するように決めておくなど、チームルールを設けておくと良いでしょう。

また、オブジェクトが増えてくると、ただ雑多に並べているだけではどのオブジェクトがどのUI要素を指しているのか分かりにくくなってしまいます。そうならないために、オブジェクトの階層構造や名前を工夫して分かりやすく並べると良いでしょう。オブジェクトは基本的にアプリケーション、画面、要素の3階層に並んでいますが、要素の配下にさらに要素を追加することも可能です。または既存の要素をドラッグアンドドロップして特定の要素配下に並べることもできます。例えば下記画像のように、階層構造を工夫すれば、同じ「1つ目の記事」というUIオブジェクトでもどの要素を指しているかすぐに判断できます。チーム開発の場合変数やワークフローファイルの命名規則を決めていると思いますが、それと同様に、オブジェクトリポジトリの階層や命名についてチームルールを決めておくと良いでしょう。

UIオブジェクトの構成を工夫する

今回はUiPathの新機能オブジェクトリポジトリをどう使うかについて考えました。オブジェクトリポジトリはハードルが高いと感じていた方にも使ってみたいと思っていただけたら幸いです。積極的に導入して、ロボット開発の効率をさらに上げていきたいですね。