RPAでの大量データ自動化処理の実践開発

2019年7月17日(水)
井上 秀和

RPAとは

昨今、我が国では、少子高齢化に伴う生産年齢人口の減少や、育児や介護との両立など、働き方に対する大きな課題を抱えています。政府においては、働き方改革を重要政策のひとつと位置付け、多様な働き方を可能にする社会を目指しています。

企業内においても、現在、業務の見直し、業務改善、BPR(Business Process Re-Engineering)に取り組まれている方々も多いのではないかと思います。そして、業務改革やBPRの実現において、既にRPA(Robotic Process Automation)に取り組まれている方もいらっしゃるかもしれません。

RPAとは、日常のオフィス業務でのPCを使用したデータ登録などの繰り返し処理、ルーティンワーク、単純作業を、ソフトウェアのロボットにより、自動化することを意味します。

プログラマーの筆者は、かねてより自身の業務において、ルーティンワークや単純作業を、プログラミング言語やスクリプト言語を利用し、趣味も兼ねて自動化しておりました。一度自動化の仕組みを作成してしまうと、数時間かかっていた作業は、以降、自動化により数分で終わるなど嬉しい恩恵が得られます。ただし、自動化のプログラム作成自体に、長い時間を費やすケースも結構ありました。

テクノロジーの発達により、最近のRPA製品はプログラミングの知識がなくとも、直感的かつ手軽に業務を自動化することが可能となりました。そのため、IT技術者でなくとも業務を自動化するロボット開発が可能になるなど、その敷居はとても低いものとなっております。

現在、働き方改革の気運もあいまって、RPA製品の市場は急激な成長を見せています。私が所属するUiPath社のRPA製品におきましても、多くの企業、お客様にご活用いただいています。

RPAを進めていくと、簡単な作業の自動化はある程度すぐに達成できますが、作業ボリュームが大きくRPAによる自動化が困難と思われるもの、単純ではないが自動化できると嬉しいものなどといった業務が出現、可視化されていきます。

今回の連載は、既にRPAを利用して業務自動化を推進している方に対して、さらなるRPAの活路を見出していただくことを目的とし、そのための方法論や具体的な実装方法をご紹介できればと思い、執筆させていただくこととなりました。ぜひ、お付き合いください。

現在から遡ること約100年前の1908年、フォードはベルトコンベアを用いた自動車の大量生産にて、名車と呼ばれる「フォードT型」を製造することに成功し、工場における自動化を確立しました。その後、日本のものづくり産業においては生産現場でのさらなる自動化、効率化、産業用ロボットの導入により、極めて高い生産性を実現し世界を驚かせました。

一方で国内においてのホワイトカラーの働き方、生産性については諸外国と比較して、かねてより長時間労働や生産性の低さが問題視されております。我々がオフィスで日々行っている日常的な業務には、まだまだ効率化・自動化可能なシーンが存在します。RPAにより、オフィスにおける日々の単純な作業や繰り返しの作業を削減、効率化し、真の働き方改革を実現しましょう。

RPAにおける大量トランザクションの扱い

RPAを実践利用されている方の中には、取り扱うデータ件数の多い処理において、インプットデータ自体の問題や自動化対象システムの安定性により、必ずしも全てのデータが正常に処理されないケースに遭遇している方々も多いかと思います。

エラーが発生した際には、RPAのログデータより問題の箇所を抽出し、その部分だけ手動で処理を行い問題を解決している方もいるかもしれません。また、ログデータが不十分であった場合、自動化対象システムにアクセスし、インプットとRPAでの登録結果の差分を抽出し、問題部分の手当をしている方もいるかもしれません。

大量のデータを効率良く、かつ、個々の処理結果を後から追跡可能な形で自動化することは、RPAの運用において重要な課題となります。これはRPAのみに関わらずシステム構築における課題でもあります。

今回、このようなケースにおいて、RPAではどのように自動化処理を実装するべきか、また、それをいかに簡単に実現するにはどのように開発を進めれば良いのかという点について、具体的な自動化例を交えてご紹介します。

結論を申しますと、RPAにおいてはロボットを管理するためのサーバ側のキュー機能と合わせて利用することで自動化を実現できます。加えて、既製のフレームワークと合わせて開発することで、より簡単かつスピーディに開発できます。

具体的には、処理対象となる個々のデータをトランザクションとしてサーバ側のキュー(Queue)機能で管理させます。ロボットはサーバと連携し、トランザクション単位でトランザクションの取得や自動化処理を行い、その後トランザクションのステータス更新を行うという流れを実現できます。

UiPathには「Orchestrator」というサーバ製品があり、これにはトランザクションを管理するキュー機能があります。キューは、スタックとキューの概念のもので、先入先出しでキューアイテムを取り扱います。ロボットにはOrchestratorのキュー機能と連携するための部品が既にあり、こちらを利用することで、簡単にトランザクションを管理できます。

キュー機能を利用したトランザクションの管理は、提供側(Provider)と消費側(Consumer)の2者に分けて考えると理解が容易です。

提供側は、キュー機能に対して自動化処理されるための情報をキューアイテムとして登録します。キューアイテムの登録にはロボットも使えますし、トランザクション生成元のシステムからOrchestratorのAPIを使用して直接登録することも可能です。

消費側では、キューアイテムを取得するアクティビティを使用して、ロボットで必要な自動化処理を行い、キューアイテムを消化していきます。この場合、ロボットはキューアイテム単位で自動化処理を実行するため、トランザクションの量によっては図のようにロボットの台数を複数台のロボットファームとして実行させる、すなわちスケールアウトさせることも容易に実現できます。

なお消費側での処理には、UiPathで提供するフレームワークを利用します。キューアイテムの取得やステータスの更新は、全てフレームワークの機能で提供されます。そのため、開発者はキューアイテムを使用したトランザクション処理の自動化に専念できます。

また、これらのOrchestratorのやり取りは、技術上ではOrchestratorが提供するRest APIを利用したものとなります。UiPath StudioにはこれらのAPIを呼び出すためのアクティビティが提供されており、これらの技術の深い理解がなくてもキュー機能を実装できます。Rest APIの実装の知見がすでにある方は、Rest API経由Orchestratorのキュー機能との連携を直接実装できます。

今回の目標

今回は、RPAのデモ用に作成された経費登録用のWebアプリケーションに大量のデータを入力するというシナリオで、Orchestratorのキュー機能を利用し、フレームワークを用いてロボットでの登録作業の自動化を目指します。

下記の3点がポイントとなります。

  • 既存のフレームワークを利用することで、短期間での開発が可能となる
  • フレームワークにより、自身でのトランザクションの取得や管理は不要となる
  • トランザクションはサーバ側で管理され、その実行結果は正確な記録が可能となる

今回作成するワークフローとデータは、こちらからダウンロードいただけます。

UiPath Community Cloudの利用

UiPathは2019年の6月、OrchestratorのCloud環境のプラットフォームを公開しました。これはコミュニティ向け「UiPath Community Cloud」とエンタープライズ向け「UiPath Enterprise Cloud Platform」の双方に、SaaSとしてOrchestratorを提供するものです。今回は、このコミュニティ向けのOrchestratorを利用して、キューの管理と実装をしていきます。

Orchestrator Cloudのサイトへアクセスし、アカウントを登録します。

GoogleやMicrosoftのアカウントをお持ちであれば、そちらにアカウントを紐付けることができます。これらを使用しない場合、「Sign Up」のリンクからアカウントを作成できます。なお、コミュニティ版の利用条件に関してはこちらのリンクを参照してください。

下図はGoogle Accountと連携する場合です。次の項目に必要な情報を登録し、「Sign Up」にて登録を行います。

サインアップが完了すると、次のような画面が表示されます。

「Service」のメニューへ遷移するとデフォルトで、「UiPathDefault」というOrchestratorのテナントが存在しています。

「UiPathDefault」をクリックし、Orchestratorを開きます。ここからOrchestratorの画面となります。Orchestratorは日本語に対応しており、画面左下の言語選択メニューで表示言語を日本語に変更可能です。

左側のメニューにある「キュー」が、今回利用するキューの機能となります。

画面右側の「+」(新規作成)ボタンより、「MyQueue」という名称でキューを作成します。

以上で、キューができました。

なお、別途事前に利用中のUiPath Studioを開発端末としてOrchestratorへ接続しておく必要があります。方法は次のサイトを参考にしてください。

キューの登録

Orchestrator側に作成したキューに、キューアイテムとしてトランザクションを登録する処理を作成します。

前述の通りUiPathでは、キューアイテムを作成するための部品がUiPath Studioのアクティビティとして用意されています。このアクティビティを使用してキューアイテムを作成します。

新規に「AddQueue」という名称で、シーケンスのワークフローを用意します。こちらに「キューアイテムを追加」のアクティビティを挿入します。

「キューアイテムを追加」アクティビティのプロパティのキュー名は、先ほどOrchestratorで作成した「MyQueue」を、“MyQueue”と文字列として設定します。キューの各アイテムはサンプルとして、自動化対象のウェブアプリケーションに従い以下の通りに登録します。

早速こちらのワークフローを「実行」ボタンより実行します。ワークフロー単体での実行は、「AddQueue.xaml」が選択された状態で、UiPath Studioの「実行」ボタンを押すことで可能です。

問題なく実行できたことを確認し、OrchestratorのWebコンソールで、キューアイテムが次のように作成されていることを確認します。

キューの詳細を確認すると、ワークフローで実装した値がそれぞれキューアイテムとして登録されていることが確認できます。

ここでエラーなどが発生した場合、キューの名称がOrchestratorと一致しているか、UiPath StudioはOrchestratorと接続中の状態であるかを確認してみてください。

キューの一括登録

大量のデータ登録に関しては、今回CSVファイルよりデータを取得し、キューに登録するワークフローを作成していきます。次のような形式のCSVファイルをロボットで読み取り、1行単位でキューを登録します。

no title type amount desc
1 雑費(2019-05-07) その他 799 Exception
2 書籍費(2019-04-22) その他 -1000 N/A
3 雑費(2019-04-18) 仮払 3740 N/A

実装としては、「CSVを読み込む」アクティビティを配置し、全てのデータを読み込みます。サンプルデータとして、記事末のワークフローの「Data-data.csv」をご利用ください。

読み取った結果はDataTable型の変数dtとして保存し、「繰り返し(各行)」内で、一件ごとに「キューアイテムを追加」アクティビティにてキューアイテムとして登録します。

最新のUiPath Studio Ver2019.4には「キューアイテムを一括追加」というアクティビティが登場し、DataTableを一括でキューに登録できるようになりました。

最後にこのワークフローを実行し、複数のキューアイテムが登録されていることを確認します。サンプルデータは、確認用に10件だけのデータセットです。

トランザクション処理の実装

「InputExpense.xaml」というファイル名で、新規にシーケンスのワークフローを作成します。ここからはトランザクション処理の実装へ進みます。

ここでは、経費デモサイトへの入力操作の自動化を実装していきます。

あらかじめ、入力となるインプットの引数を既定値(デフォルト値)付きで下記の通りに作成しておきます。このワークフロー自体を実行すると、既定値を使用して経費デモサイトの自動化が正しく行われるかどうかをワークフロー単体で確認できます。

「InputExpense.xaml」は一般的なWebサイトの自動化です。不明な点や実装内容の詳細は「できるネット」の下記コラムを参考にして下さい。

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

連載バックナンバー

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

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

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

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