RPAにおけるインテグレーションのためのライブラリ開発

2020年3月5日(木)
井上 秀和

はじめに

本連載も、いよいよ最終回となります。今回は、UiPathでのライブラリ開発をトピックスとしており、UiPathにおける高度なライブラリ開発の手法を2つ紹介します。「一歩先行くRPAインテグレーション実践講座」として、2つのライブラリ開発手法に関しても、開発するものとしては、それぞれRPAとその他テクノロジーとのインテグレーションを題材としています。

ライブラリの種類

UiPathにおいて、ライブラリは共通部品やリユーサブルコンポーネントとも呼ばれています。現状いくつかの開発、管理方法がありますので、以下にまとめました。いずれについても、再利用可能な共通処理を一元管理するもので、再発明をしないためのものです。

ライブラリの種類

No.種類開発方法説明
1 共通コンポーネント・パッケージワークフロー(Xamlファイル一式)でリユーサブルコンポーネントを作成し、使用するたび、そのワークフロー(Xamlファイル一式)を使用先のプロジェクトへコピーするバージョン管理に難あり。コピーしたタイミングのものが使用されるため、リユーサブルコンポーネントに問題があった場合、使用しているプロジェクトの再パッケージが必要
2ファイル・ストレージ共有フォルダでリユーサブルコンポーネントであるワークフロー(Xamlファイル一式)を管理し、使用するプロジェクトからはそのパスを参照するリユーサブルコンポーネントの処理の修正や更新時、再パッケージの必要はないものの利用元でプロジェクトにおいて、予期しない影響が発生する可能性あり
3カスタム・パッケージング・メソッド(UiPath Studio)UiPath Studioの機能でカスタムアクティビティとして、リユーサブルコンポーネントを開発するUiPathのアクティビティ・パッケージと同等に管理が可能
4カスタム・パッケージング・メソッド(Visual Studio)Visual Studioの機能でカスタムアクティビティとして、リユーサブルコンポーネントを開発するUiPathのアクティビティ・パッケージと同等に管理が可能。Visual StudioのライセンスやC#の開発スキルが必要となる

No.1は最もプリミティブな方法で、多くのRPA開発プロジェクトで用いられているかと思います。しかし、今回の記事では、UiPath StudioおよびVisual Studioを使用したカスタム・パッケージング・メソッド(No.3、No.4)について、ご紹介するものとなります。UiPath上で一般的に使用するアクティビティと同様の運用管理や依存性の管理が可能な、カスタムアクティビティとしてライブラリを開発する方法となります。

今回やること

1つ目は、前述のNo.3「カスタム・パッケージング・メソッド(UiPath Studio)」のUiPath Studioの機能を使ったライブラリ開発です。開発するライブラリは、Pythonの実行環境自体をカスタムアクティビティとしてパッケージ化してしまうものです。当連載第3回目の記事において、PythonとRPAのインテグレーションのご紹介をしましたが、企業のビジネスサイドのITガバナンスにおいては、単純に端末へPythonをインストールするのは少々ハードルが高くなります。そのため一つのソリューションとして、Python埋め込み版をNuGetパッケージとすることで、UiPathのカスタムアクティビティとして、Pythonの実行環境を配布することに挑戦します。

2つ目は、前述のNo.4「カスタム・パッケージング・メソッド(Visual Studio)」のVisual Studioのプログラミング言語C#を使用したライブラリ開発です。本連載ではクラウドとRPAのインテグレーションを何度か題材として、さまざまな事例を紹介しました。クラウドの進化は凄まじく、コンピューティングの性能向上や利用コストの低下は益々利用側にとってメリットがあるものとなっています。筆者もお客様先でRPAとクラウドを連携させた自動化の支援を行ってきた中で、あれば良かったという共通部品をここで開発していきます。

UiPath Studioのライブラリ開発

ここからは「カスタム・パッケージング・メソッド(UiPath Studio)」のUiPath Studioのライブラリ開発機能を使ったライブラリ開発をご紹介します。開発内容は、「Pythonの実行環境自体をカスタムアクティビティとしてパッケージ化」するものです。

今回作成するライブラリの構成

今回作成するライブラリの構成

想定される用途として、Pythonを用いて以下のような処理が必要となるケースが考えられます。

  • テキスト解析
  • CSV/Excel解析や生成
  • 画像解析や生成
  • 数値解析やチャート作成
  • 機械学習のモデル稼働

なお、Python埋め込み版として、プロジェクト自身に埋め込むことも可能ではありますが、わざわざカスタムアクティビティとするメリットとして、複数のプロジェクトで使い回すケース、レイヤーを分けるという観点で、今回紹介する方法が有益となります。

UiPath Studioでの開発

それでは、UiPath Studioを新規で開き、新規プロジェクトで「ライブラリ」を選択します。通常、「プロセス」を選択して、自動化処理のワークフローを開発しますが、ライブラリを作成する場合は、新規プロジェクトでは「ライブラリ」を選択します。なお、今回は「PythonRuntime」という名称でライブラリ開発のプロジェクトを作成していきます。

新規プロジェクトで「ライブラリ」を選択

新規プロジェクトで「ライブラリ」を選択

それでは、UiPathでサポートされているPython 3.6のポータブル版を以下のサイトよりダウンロードします。

Python Release Python 3.6.8

Windows用のZIPファイルを選択

Windows用のZIPファイルを選択

Filesの一覧中から「Windows x86-64 embeddable zip file」をダウンロードし、プロジェクト内に「portable_python」というフォルダを作り、この中に解凍したファイルを配置します。

ライブラリとして作成するカスタムアクティビティの仕様としては、Pythonのカスタムアクティビティ内のPythonの実行ファイルがあるフォルダのパスを出力引数として渡すだけのものです。これにより、このカスタムアクティビティを取り込んだ自動化プロジェクトでは、カスタムアクティビティ内のPythonの実行環境のパスが取得でき、その環境にてPythonスクリプトが実行可能となります。開発するカスタムアクティビティのワークフローの実装はこのようになります。

PythonRuntime

PythonRuntime

Pythonの実行ファイルがあるフォルダについては、このようにPath.Combineという.Netのメソッドを用いて絶対パスで指定をしています。

リスト1:Pythonの実行ファイルの場所を指定

Path.Combine(Environment.CurrentDirectory, "portable_python\python-3.6.8-embed-amd64")

あっという間でしたが、以上で実装は完了です。「パブリッシュ」ボタンより、ライブラリを生成します。パブリッシュ先はカスタムを選択して、適当なフォルダを指定しておきます。ライブラリ設定のアクティビティルートカテゴリは「Misc」としておきます。こちらはアクティビティの分類にて使用されます。

パブリッシュ先の指定

パブリッシュ先の指定

UiPath Studioでの検証

それでは次に検証をしていきます。適当なプロジェクトをUiPath Studioで作成し、パッケージ管理より、作成したNuGetパッケージを追加します。パッケージ管理の「設定」より、パッケージを保存した場所を「ユーザが定義したパッケージソース」として、そのフォルダパスを登録しておきます。登録したパッケージソースを選択し、「PythonRuntime」を選択し、インストールします。

PythonRuntimeを選択しインストール

PythonRuntimeを選択しインストール

PythonRuntimeが依存関係に追加されます。

依存関係に追加されていることを確認

依存関係に追加されていることを確認

アクティビティでも選択可能となっています。

アクティビティから選択可能になっている

アクティビティから選択可能になっている

検証用のワークフローは、カスタムアクティビティより、PythonRuntimeのフォルダパスを受け取り、Pythonスコープで使用します。Pythonアクティビティについても事前にパッケージ管理よりインストールしておきます。

Pythonアクティビティもインストールしておく

Pythonアクティビティもインストールしておく

Pythonスコープ内で、Pythonの検証用スクリプトをロードし、スクリプト内のメソッドhelloを実行します。

検証用スクリプト内のメソッドを実行

検証用スクリプト内のメソッドを実行

スクリプトは、Pythonにてポップアップを表示するものです。

リスト2:検証用スクリプト

from ctypes import *

def hello():
    user32=windll.user32
    user32.MessageBoxW(0, "Hello UiPath!", "PythonRuntime", 0x00000040)

ワークフローを実行し、画面に以下のポップアップが出現すれば成功です。PythonRuntimeのカスタムアクティビティ内のPythonで稼働していることが確認できます。

このポップアップが表示されれば成功

このポップアップが表示されれば成功

Pythonの埋め込み版を使用することで、端末へのPythonのインストールを行わず、かつNuGetパッケージとして、Pythonの実行環境が管理、配信できることが確認できました。Pythonの埋め込み版については、最低限の機能だけとなっておりますので、必要に応じてpipを使ってライブラリを追加します。

筆者は、このライブラリを視覚障がい者の方を支援する業務でのテキスト解析や建物の設計書図面の画像からの特定のアイコン検出にこの仕組みを使用致しました。ぜひ、読者のみなさまにおいても、実践でご利用いただけますと幸いです。

Microsoft Visual Studioを使用したライブラリ開発

次に「Microsoft Visual Studioを使用したライブラリ開発」の紹介となります。具体的には、.NET FrameworkのC#を利用したライブラリ開発です。UiPath Studioの他に2つのツールが必要となります。

  • Microsoft Visual Studio
  • NuGet Package Explorer

「Microsoft Visual Studio」については、ライセンスが必要となります。「NuGet Package Explorer」は、無償で利用可能なツールです。

AWS S3アップロードライブラリ

開発するライブラリは、AWSのS3バケットへファイルをアップロードするものです。AWS S3は、第4回目のインテグレーションの事例でも紹介しましたが、AWSが提供するスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを備えたオブジェクトストレージサービスです。

AWS上でアプリケーション開発を行った方においては、S3をアプリケーションのログ、バックアップデータ、静的コンテンツ、プログラム本体、AIモデルなど多岐にわたるデータ保存に利用されてきたと思います。RPAにおいても、生成したデータやログ情報などアプリケーション開発と同様に保存したいデータはさまざまなものがあります。

企業においては、ストレージ容量の問題は特に切実です。共有フォルダのストレージはどこも逼迫しております。ローカルのストレージへの保存は、長期間の保存には適していません。S3のような、クラウド上に安全に安価で制限なく保存できるストレージというのはRPAにも当然向いています。

デスクトップからは、AWSのコンソールやAWS CLIなどを使用して、S3へファイルアップロードは可能ですが、RPAからも簡易にアップロードできるよう、専用のアクティビティを作成することとします。加えて、AWSが提供しているNuGetパッケージを使用することで、AWS CLIなどをデスクトップへ別途インストールする必要なく、稼働するカスタムアクティビティとします。

作成するカスタムアクティビティの動作

作成するカスタムアクティビティの動作

なお、AWS S3へのファイルアップロードのクライアントプログラム作成にあたっては、こちらのドキュメントを参考としました。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/HLuploadFileDotNet.html

UiPath株式会社
コーダーやプロジェクトマネージャーとして、金融、流通、飲食業界向けのシステム・ソフトウェア開発に従事し、2018年よりUiPath社に入社。RPAに関しては、過去にWeb画面、モバイル画面のUIテスト自動化、趣味では株式やFXのアービトラージにて活用していた経験あり。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています