RPAにおけるインテグレーションのためのライブラリ開発
はじめに
本連載も、いよいよ最終回となります。今回は、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のポータブル版を以下のサイトよりダウンロードします。
Filesの一覧中から「Windows x86-64 embeddable zip file」をダウンロードし、プロジェクト内に「portable_python」というフォルダを作り、この中に解凍したファイルを配置します。
ライブラリとして作成するカスタムアクティビティの仕様としては、Pythonのカスタムアクティビティ内のPythonの実行ファイルがあるフォルダのパスを出力引数として渡すだけのものです。これにより、このカスタムアクティビティを取り込んだ自動化プロジェクトでは、カスタムアクティビティ内のPythonの実行環境のパスが取得でき、その環境にてPythonスクリプトが実行可能となります。開発するカスタムアクティビティのワークフローの実装はこのようになります。
Pythonの実行ファイルがあるフォルダについては、このようにPath.Combineという.Netのメソッドを用いて絶対パスで指定をしています。
Path.Combine(Environment.CurrentDirectory, "portable_python\python-3.6.8-embed-amd64")
あっという間でしたが、以上で実装は完了です。「パブリッシュ」ボタンより、ライブラリを生成します。パブリッシュ先はカスタムを選択して、適当なフォルダを指定しておきます。ライブラリ設定のアクティビティルートカテゴリは「Misc」としておきます。こちらはアクティビティの分類にて使用されます。
UiPath Studioでの検証
それでは次に検証をしていきます。適当なプロジェクトをUiPath Studioで作成し、パッケージ管理より、作成したNuGetパッケージを追加します。パッケージ管理の「設定」より、パッケージを保存した場所を「ユーザが定義したパッケージソース」として、そのフォルダパスを登録しておきます。登録したパッケージソースを選択し、「PythonRuntime」を選択し、インストールします。
PythonRuntimeが依存関係に追加されます。
アクティビティでも選択可能となっています。
検証用のワークフローは、カスタムアクティビティより、PythonRuntimeのフォルダパスを受け取り、Pythonスコープで使用します。Pythonアクティビティについても事前にパッケージ管理よりインストールしておきます。
Pythonスコープ内で、Pythonの検証用スクリプトをロードし、スクリプト内のメソッドhelloを実行します。
スクリプトは、Pythonにてポップアップを表示するものです。
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