2018年5月21日 06:00
こちらの記事で、AIによるメールの自動分析にまでこぎ着けた請求書処理自動化計画。今度は「ロボット」の力によって、これを最後まで完成させようというのが今回の趣旨だ。
無料で使える「UiPath Community Edition」を活用し、Excelから請求書作成に必要な情報を読み取り、その情報をウェブブラウザーで稼働する請求書作成システムに自動入力して、PDF出力するまでを完全自動化してみた。
「ロボットを使える人と使えない人」
PCを使える人と使えない人――。
スマホを使える人と使えない人――。
Officeを使える人と使えない人――。
「デジタルデバイド」なんて言葉で表現される格差にもさまざまなものがあるが、もしかすると、次の数年でこんな格差が生まれるかもしれない。
「ロボットを使える人と使えない人」。
もちろん、ロボットと言っても、“メカメカしい”方のそれではない。ソフトウェアのロボットのことだ。
電通や三井住友銀行などの大手企業では、今まで手動で行ってきた業務の一部をソフトウェアによるロボットに置き換えることで、すでに実績を上げつつある。こうした大規模導入の事例だけでなく、中小企業の現場、さらに言えば個人の環境でも、気軽にロボットを使える環境は整いつつある。
2017年に日本法人が設立され、先の企業事例でも採用されている「RPA(Robotic Process Automation)」プラットフォームの「UiPath」には、「UiPath Community Edition」と呼ばれる無償版が提供されており、個人、オープンソースプロジェクト、研究機関、小規模事業者(※注)が、ロボットの作成と実行ができる環境を無料で構築できるようになっている。
- UiPath Community Editionダウンロード
https://www.uipath.com/ja/community-edition-download
UiPathには、エンタープライズに相当する企業向けとなる体験版(60日利用可能)も提供されているので、ダウンロードの際は間違えないように注意しよう。Community Editionは上記のURLからダウンロードできる
※注 個人の場合、UiPath Studioは2台のPCで利用可能。250台未満のマシン(物理または仮想)またはユーザー、もしくは年間売上高が100万ドルを超えない法人の場合は、最大5人のユーザーがそれぞれ2台のマシンでUiPath Studioを利用できる。いずれの場合も、「Orchestrator」は評価とトレーニング目的でのみ利用可能。詳しくはこちら(https://www.uipath.com/community-license-agreement)を参照。
画面記録でキーボードやマウス操作を自動化する「RPA」
RPAは、一言で言えば、画面レコーディングによるキーボードやマウス処理の自動化だ。さらに分かりやすく言ってしまえば、人間のオペレーションを再現するものだ。実は画面レコーディングはRPAの一要素に過ぎないのだが、作り込み次第ではかなり複雑なコードも使える。
画面操作の自動化は決して新しい分野ではないのだが、「働き方改革」の波によって、急速に注目を集めるようになってきた。
その理由は、とにかく効果が測定しやすい点にある。人間がやっていた数時間の作業が、ロボットによって数秒や数分に短縮されることで、「時間」もしくは「時間×単価」の金額として目に見えるかたちで示される。その効果は、誰もが体験できるものだ。
さらに、従来の全社レベル、もしくは部門単位での大規模なシステム開発と異なり、企業内の個人レベルで導入できる手軽さがある。
従来の手法では、いくらそれに時間が掛かっていたとしても、1部署の1職員のExcel業務がシステム開発の対象となることは難しかった。だが、RPAであれば、こうした末端の、些細な、しかも個別案件の作業こそ、自動化の対象にしやすい。
もちろん、先の大企業の例のように、ロボットを管理する社内の部門を立ち上げ、プロジェクトとして実行するのが理想ではあるが、従来のマクロのように、個人レベルで自分の作業を効率化するためにRPAを活用することもできる。
このため、ロボットを活用できる人と、そうでない人では、同じような作業でも、その時間に大きな差(特定分野の作業ではまさに圧倒的な大差)が付くことになる。
これは、RPAの凄さでもあり、恐ろしさでもある。
請求書処理の前準備、Microsoft Flowでの処理
だいぶ前置きが長くなってしまったが、というわけで、今回は、このUiPath Community Editionを筆者の仕事環境にも導入してみた。
ターゲットとなる作業は、以前に本コラムで紹介した請求書処理だ。そのときの記事では、AIを利用して、メールの本文から請求書作成に必要な情報を自動的に抽出するまでを紹介したが、その後、この情報(json)をOneDrive for Businessに保存したExcelファイルに保存するまでをMicrosoft Flowを使って作り込んだ。
詳細を説明するとそれだけでコラムが終わってしまうので概要だけとするが、「Apply to each」処理を使ってjsonのデータを読み込み、entityの値によって処理を条件分岐させ、項目名や金額などの実際の値を変数に格納し、それを整形(空白などを削除)した後、「Add a row into a table」でExcelに書き込んでいるだけである。
作成したExcelのファイルは、OneDrive for Business上に存在するため、Microsoft Flowによって更新されると、PCの同期処理によって自動的にローカル側にも行が追加された最新のものが保存されるというイメージだ。
まとめると、下の部分をMicrosoft Flowを使ったクラウド上で処理していることになる。
Flowを使ったクラウド上での処理
メールの受信
↓
解析部分の抽出
↓
AIでの分析
↓
変数への格納
↓
データの整形
↓
Excelファイル出力
今回、UiPathで自動化するのは、この先の処理だ。簡単に説明すると下のようになる。
UiPathで自動化する処理
1.ウェブブラウザーの起動
↓
請求書アプリの表示(NAS上で稼働するオープンソースの「抹茶請求書」)
↓
請求書作成ページへの移動
↓
2.請求書情報が記載されたExcelを開く
↓
テーブル情報を一括読み込み
↓
3.読み込んだデータに変数を定義
↓
請求書アプリで作成ページを表示
↓
日付情報を解析してカレンダーから日付をクリック
↓
項目と金額を入力
↓
作成した請求書を保存してPDFをダウンロード
↓
4.ログアウト
↓
5.ウェブブラウザーの終了
要するに、従来はメール内の文字列を視認して、金額などを請求書アプリに転記していた操作を、全て自動化したことになる。
このシステムは、筆者による毎月の請求書処理において実際に運用を始めているが、ロボットを実行する前にExcelを開くことで、必ず金額を確認するという人間の操作を入れることにした(自動化しようとすれば、UiPathでフォルダーを監視することで可能)。
RPAでは、データの確認や例外対策などのために、完全自動化ではなく、人間の確認(多くはクリック程度だが)を必ず入れるようにシステム化するのがセオリーのようなので、今回もExcelの部分で、必ず人間の操作を1回入れるようにしているわけだ。
UiPathのキホン
UiPathのインストールは、苦労する部分は特にない。単にダウンロードしたインストーラーを実行するだけでOKだ。
ただ、使い方となると、ちょっと難しい。慣れてしまえば何てことはないのだが、UIは英語だし(2018年夏に日本語化の予定)、「Flowchart」や「Activities」などという独特な用語が飛び交う世界となっている。
できれば、同社が提供するオンライントレーニングのコース「UiPathアカデミー」で基本を学ぶことを推奨したいが、受講完了までかなり時間が掛かるので、動画などで基本的な使い方を見ながら、実戦で学んでいくことをお勧めする。
UiPathでは、処理をフロー形式で記述していくスタイルとなっており、直線的なSequenceか、分岐を伴うFlowchartかを選んで、Actibitiyと呼ばれる処理を追加していくことになる。
Activitiyには、アプリを開くとか、変数に値を割り当てるとか、Excelのテーブルを操作するとか、いろいろな処理が用意されている。各処理にはプロパティがあり、そこに処理に必要なパラメーターを指定していくかたちとなる。VBやAccessなどを使ったことがある人なら、使っているうちに作法を理解できるはずだ。
目玉となるのは、やはり画面のレコーディングだ。この記事でも基本的に、実際の画面操作をレコーディングしながら処理を作り上げていくことにする。
まずは、UiPathのパッケージをインストールしておく。標準ではExcelのデータを扱うためのActivityがインストールされないので、Activityのツールバーかパッケージボタンをクリックして、「UiPath.Excel.Activities」をインストールした。
続いて、SETUPタブからExtentionとしてGoogle Chrome拡張機能をChrome側にインストールした。UiPathでは、当初はInternet Explorerを使って請求書アプリの操作をしていたのだが、最後にPDFをダウンロードする段階で、画面下に表示される「保存」ボタンをレコーディングでうまく処理することができなかったためだ(後にフォーラムで解決方法を知ったが……)。
普段、使っているウェブブラウザーがChromeでもあり、今回はChrome拡張機能を使って操作を自動化している。
UiPathの処理を5つに分割して記述
今回は、処理を5つのステップに分割して記述することにした。
1.ウェブブラウザーで請求書アプリを開く
まずは、ウェブブラウザーで請求書アプリを起動し、請求書作成画面を開く処理だ。ここでは、基本的にレコーディングを使って実際の画面操作を記録させたが、いくつか注意点があった。
まず躓いたのは、どこから始めるか? を意識しなかった点だ。抹茶請求書のアプリでは、起動時にアカウントを入力してログインするのだが、それが一定時間維持されるようになっている。
初回にログイン処理を入れてレコーディングしたのだが、これを記録してロボットを走らせても、ログインした直後にはログイン画面が表示されないため、ここで処理が止まってしまった。
このため、請求書アプリを終了するときに、必ずログアウトさせる処理をセットで記述する必要があった。処理をレコーディングするときは、このようにどこからどの状態で始めるのかを意識しておかないと、思い通りに実行されないことがある。
なお、パスワードは、記録時にPasswordであることを指定することで、暗号化された状態でUiPathに保存することができるため、平文で保存される心配はない。
2.Excelを開いてテーブルを読み込む
Excelを扱うためのActivityはいくつか用意されているが、データを広く扱うなら「Read Excel to Table」で指定したシートのテーブルを全て読み込んでしまうのが簡単だ。
データテーブル形の変数を用意しておいて、そこにテーブルのデータをまるごと読み込んでしまえばいい。
3.行ごとに請求書アプリに入力する
今回の処理で、いちばん記述が長くなったのはこの部分だ。
Excelから読み込んだデータに変数を定義
まずは、Excelから読み込んだデータはテーブルに格納されているので、For each rowアクティビティを使って、データを1行ずつ処理させることにした。読み込んだ行の「date」列を「invdate」という変数を定義して入れるといった処理を、各列ごとに記述した。
請求書の作成に必要な3つの情報(日付、項目名、金額)を変数にセットした後、今度は処理をウェブブラウザーに移して、請求書作成ページへと移動する。最初のログイン処理の部分で請求書作成ページまで移動しなかったのには、理由がある。
Excelに複数の行がある(複数の請求書を作成しなければならない)場合、For each rowの中で、毎回、請求書作成ページへの移動を指定しないと、処理を繰り返せないからだ。
請求書アプリの作成ボタンイメージのクリック
ただ、今回使った抹茶請求書は、請求書作成ページに移動するためのボタンが特殊で、クリックするとボタンの色が変わって、メニューがドロップダウンするという凝った作りになっていた。
このようなメニューは、レコーディングでそのまま記録しようとすると、うまくいかないケースも多い。このため、ボタンのコントロールを指定するのではなく、画像認識でイメージを指定してクリックさせ、さらにメニューをクリックするときにも、レコーディングを一時的に中断し、メニューを表示させてからクリックするようにした。
こうしたメニュー系のレコーディングの基本は、先に紹介したUiPathアカデミーの最初の方で学ぶことができるので、ぜひ参考にして欲しい。
解析した日付情報からカレンダーをクリック
続いて、Excelから読み込んだ日付の情報を月と日付に分割し、その値をベースに画面上のカレンダーをクリックさせた。
今回使った抹茶請求書の場合、日付をテキストボックスへと直に入力することはできず、カレンダーコントロールを使って指定するかたちとなる。
このクリックがなかなか難敵で、日付によってクリックする場所を変えなければならないため、単純な画面操作のレコーディングだけでは対処できない。
しかしながら、UiPathでは、クリックした場所のコントロール情報を詳細に取得できるようになっているため、この情報を書き換えることで対応可能だ。具体的には、適当に日付をクリックしてレコーディングさせた後、クリックしたターゲットのプロパティを確認する。
すると、「webctrl id='_calid_td_2018-04-07'」のようになっていたので、この部分をExcelから取得した日付から生成して変数化し、カレンダーをクリックするときのプロパティに割り当てることにした。
このほか、月の情報から、作成日が前月の場合に前の月へカレンダーを移動するなどの処理も追加してある。
項目と金額の入力
項目や金額の入力は、レコーディングで一発だ。該当する部分にダミーの値を入力する操作をレコーディングで記録し、編集画面でExcelから取り出した値を格納した変数に置き換えるだけでいい。
請求書の保存とPDFダウンロード
ここまでで、請求書の基本情報を入力できたので、後は保存してPDFとしてダウンロードすればいい。
ただし、保存はレコーディングで一発だったが、ダウンロードは若干苦労した。というのは、今回使った請求書アプリでは、画面上部と下部の両方に同じ「ダウンロード」ボタンが配置されており、通常のレコーディングではこれを認識できなかったためだ。幸い、どちらをクリックしても問題ないので、ダウンロードボタンを画像として認識させ、これをクリックする方法で回避できた。
最後に、「ホーム」ボタンをクリックさせ、For each rowの処理が繰り返されるための対策をして、請求書作成パートは完了だ。
4.ログアウト
前述したように、きちんとログアウトしておかないと、続けてロボットに処理を実行させたときにログイン画面が表示されず、エラーになってしまう。このため、ログアウトボタンを押して、ログアウトさせる処理を記述しておいた。
5.ウェブブラウザーを閉じる
最後に、ウェブブラウザーを閉じて処理を完了させる。「×」ボタンをクリックする方法もあるが、レコーディング時に「Open Browser」を指定すると、ウェブブラウザーを閉じる処理である「Close Browser」を選択できるので、ここから終了した。
最後のログアウトとウェブブラウザーを閉じる処理は、一覧の流れでまとめてしまっても構わないが、分けて記述しておくとテストもしやすいし、変更もやりやすい。このため今回は、全体的に細かく分割させながら処理を作成した。
各処理は、ドラッグやコピー&ペーストで場所を移動することが簡単にできるので、まとめたり順番を入れ替えることも簡単だ。ただし、アプリケーションのどの部分が操作対象になっているか(Attach)を意識する必要がある。分割しながら処理を作る場合、ウェブブラウザーのURLの違いなどで、うまく処理がつながらなくなるこもあるので注意が必要だ。
このほか全体的な注意としては、基本中の基本だが、変数の範囲や変数の型などを意識する必要もある。エラーが発生したときは、変数に格納するデータの型を変換してみるといいだろう。
今までのやり方がバカバカしくなる
以上、今回はUiPathを使った請求書処理の自動化を紹介した。RPAツールは今注目の製品で、さまざまなベンダーから提供されているが、個人や中小企業でも無料で使えるため、ぜひ試してみることをお勧めする。
UiPathの操作や考え方、機能に慣れるまでに、少し苦労するかもしれないが、慣れてしまえば、「今まで時間を掛けてやっていった仕事が何だったのか?」と本当にバカバカしく思えるほど、一瞬で済むようになる。
一度使い始めると、もっと自動化できる部分はないか? と自分の仕事のやり方を見直すようにもなるので、自然に働き方を改革しようという気分にもなる。
前回、本コラムで紹介したAIによる自動分析も、筆者には十分に衝撃的だったが、UiPathによるロボットもかなり衝撃的だ。「あぁ、めんどくせぇ」と思う仕事に時間を使っているなら、今すぐ試してみるべきだ。
そして、もし今、この記事を読んでいるあなたが、企業のマネジメント層であるならば、ロボットの導入検討と同時に、社員のロボットスキルを正当に評価する仕組みの導入を検討すべきだ。中小企業の現場では、従来のマクロと同様に、個人が自分のためにロボットを使うようになる可能性が高い。しかしながら、それを正しく評価し、個人に還元する仕組みが企業側になければ、優秀な人材を失うばかりか、業務効率化の機会も失うことになる。
間違っても、ロボットで仕事を効率化した人物に、追加で仕事を押しつけるようなことはすべきでない。楽をするための努力が報われないばかりか、むしろ苦労する結果になっては、元も子もない。
中小の現場へのロボットの普及を阻むもの。おそらく、それは経営層の無理解と周囲の嫉妬だろう。