こんにちは Taka です。
以前 UiPath の Webスクレイピング について書きましたが、最近の RPA ブームはすごく、業務で RPA を使ってみようかという話になっちゃいました。(Python はどこいったの、って状態ですが)そこで、RPA を少し深く理解するために、まずは基本的な操作や設定方法をまとめてみます。
what you learn
まず簡単に RPA (Robotic Process Automation)とは何なんでしょうか。Wikipedia 先生に聞いてみるとこういった回答でした。
ロボティック・プロセス・オートメーション(Robotic Process Automation, RPA)とは、認知技術(ルールエンジン・機械学習・人工知能等)を活用した、主にホワイトカラー業務の効率化・自動化の取組みである。人間の補完として業務を遂行できることから、仮想知的労働者(Digital Labor)とも言われている。
また、デスクトップ作業のみに絞ったものをロボティック・デスクトップ・オートメーションと呼び、RPA と区別することもある。
引用元:Wikipedia ロボティック・プロセス・オートメーション
日本では特に人手不足と過度の残業が問題となっている昨今。一定した繰り返し行われ、ヒューマンエラーが起きやすい業務を自動化することで、その業務で時間を割かれていた社員のリソースを確保して、より重要な業務に割り当てることが可能になります。また RPA であれば、夜間も稼働できるので、1日24時間稼働も可能になるわけですね。
今回 RPA を理解しようと思ったのも、500 ほどあるレポート機能を何度も実行する処理が必要になり、「これは人がやる仕事じゃない!」ということで、自動化しようと試みることにしました。
まず UiPath のマニュアルに記載されている内容を読んで、そこでやってみたことを一通りすべて書いておきます。UiPath を使用する上で、さらに必要な設定や構成などがあれば追記していこうと思います。インストールやライセンスについては、すでにインストール済みなので触れません。
キーボードショートカットの箇所は重宝するような内容になっているので、ここは何度も読み返しています。使えそうなショートカットとしては以下でしょうか。
これはログを Debugモードにした際、機密情報などがログに記載されないように設定する箇所です。現状は必要ないのでそのままにしています。
Gmail アカウントを使って、メールを送信するなどの自動化を行う際に設定するようですが、まだそこまで行けてないのでここも未設定です。(笑)
それでは、プロジェクトを作成して、いくつか処理をしてみます。今回は Udemy の以下のコースを参考に進めてみました。(※ 英語です)
この記事では、コースの最初のほうにある、テキストファイルから文字列を読み込んで、resutl.txt に結果を書き込みことをチャレンジします。まずは UiPath について理解するために動かしてみることからスタート!
まず C:\uiPath\process2 配下に、テキストファイルを3つ作成。1つのファイルに “Hello World!” という文字列を保存しています。その他は何も記載していません。
UiPath を起動すると、「プロセス」が一番上にあるのでクリックをします。プロセス名や保存先を設定したらプロジェクトを作成します。
プロジェクトを作成したら、編集画面が開きますので、左パネルから「シーケンス」をボディエリアに移動させてみます。
このシーケンス内に、いくつかのアクティビティを追加して処理してみます。今回は、C:\uiPath\process2 配下にテキストファイルを3つ用意して、その中身を読み取った後、結果を出力するというシンプルな作業を行ってみました。
それでは追加したシーケンスにアクティビティを追加していきます。
を順番に設定していきます。
まずは、左パネルから「代入」と検索をして、「代入」をシーケンス内に挿入します。
代入では、変数に事前準備で作成したパスのテキストファイルを代入してみようと思います。
(左辺値) = (右辺値)
ReadAllFiles = Directory.GetFiles(“C:\uiPath\process2”)
まず「代入」の To の箇所を右クリックから「Create Variable」をクリックします。ここで変数を定義します。
名前の設定で “ReadAllFiles” とすると、画面下の「変数」で変数を定義できるようになります。
「変数の型」で、”Array[T]” を選択して、String を選択したら「OK」をクリックします。これで、文字列の配列を ReadAllFiles という変数に代入できるようになりました。
次は左辺値を設定します。右パネルの「右辺値」で … をクリックして、Directory.GetFiles(“C:\uiPath\process2”) を追加しました。
次に、「繰り返し」を追加します。ここで、パスにある各ファイルを読み込んで、そのファイルの結果を元に、出力する結果を変えるような処理を行います。
まずアクティビティで「繰り返し」を検索したら、「代入」の下に追加します。
「コレクション」のところで、代入で定義した変数を追加します。これでパス配下のファイル数回文処理が繰り返されます。
ここでループの Body に「テキストファイルを読み込む」を追加します。
左パネルの「ファイル名」では、ループの「要素」で定義した item を .ToString でファイル名を文字列として認識させます。「出力」の箇所で右クリックより「Create Variable」で変数を定義します。
今回は “Content” で 型を String としておきます。
これでファイルの内容を読み込んだ後、Content に代入されて次の処理に渡すことができるようになりました。
最後に条件分岐でファイルの中身が空白かそれとも文字列があるかで、出力される結果の内容を変えます。「条件分岐」を追加します。
「Condition」に Content.ToString = “” とします。これは、先ほどの読み込みの出力である Content を 文字列にして、もし Content が 空白(null) ならば」という条件としています。
Then の箇所に「文字列を追加書き込み」を追加します。これは、特定のパスのファイルに対して、結果を追記する処理になります。
今回は、result.txt ファイルに結果を追記するような処理にします。「ファイル名」には、“C:\uiPath\process2\result.txt” として、出力するテキストは、item.ToString + ” には何もありません” と記載します。もしファイル内が空であれば、このように出力します。
この Then の箇所をそのままコピーして、Else に貼り付けます。
Else はファイル内に文字列があった場合なので、含まれている文字列を出力します。item.ToString + ” は ” + Content.ToString + ” が記載されています” と記載しました。
特に警告が出ていないのでこれで完成です。一度保存をしておきましょう。
作成したシーケンスを実行してみます。結果はどうなるでしょうか..
「実行」ボタンをクリックします。すると一度 UiPath の画面が最小化されて、また開きます。
パスをみると、あった! result.txt ! 早速開いてみます.. はたして!!
ぎゃーー!!文字化けしとるぅ… まぁ、当たり前ですね。(笑)
テキストファイル開いて、追記時に日本語使ってるんだもん。“Shift-JIS” でエンコーディングの設定するのを忘れてました。「文字列の追加書き込み」の 「Encoding」で “Shift-JIS” としておきます。Then と Else の両方設定してくださいね。
一度、result.txt を削除して、再度実行。結果は..きちんとできました!
もしテキストファイルを読み込む時にファイルの文字列が日本語であるなら、読み込み際にもエンコーディングの設定はしておきましょう。
ここまでつくってみて、少しずつ理解できてきました。まだまだやってみる必要はありそうですが、何より触ってみて、何度かエラーを出しながら深堀していく勉強法が自分には合っているみたいです。引き続き、調査すすめていきます。
今回は、ここまで!