HomeRPAブログページ活動ブログはじめてのConnector開発

BizRobo!ブログ

こんにちは!

RPA新人開発者ブログ担当の戸波です。

今回は、BizRobo! Ver11からの新機能であるConnector(コネクター)の開発についてお話しします。
初めて本格的にConnectorの開発をしたため、とても時間がかかりましたが、その分学びが多かったです。
皆様のお役に立つことがあれば、とてもうれしく思います!

 

Connectorとは?


 Connectorとは、Node.jsやPythonといったプログラミング言語でユーザーが自由に開発したプログラムを、BizRobo!のロボットが認識しやすい形式に加工したものです。
「カスタムアクションステップ」とは、BizRobo! ver11より追加されたConnectorを呼び出す機能です。
詳しくは、RPAテクノロジーズ株式会社の以下の紹介動画をご覧ください。
https://youtu.be/5U8RLC4sIdM
カスタムアクションステップを使うと、従来のアクションステップのように一つのアクションだけではなく複数のアクションが一度にできるようになります。
Connectorをユーザーが自由に開発して使うことによって、既存のアクションステップだけでは難しかったことを実現していくことができるようになったといえます。

カスタムアクションステップ

 

今回作ったConnectorについて


 今回は、複数のCSVファイルを1つのExcelシートに転記するConnectorを作成しました。
一から自分で作成するのは大変だと思ったため、以前RPAテクノロジーズ株式会社のセミナーで配布されていた1つのCSVファイルをExcelシートに転記するConnectorをお手本にして、必要に応じて作り替えたり処理を追加したりしてカスタムしながら作成していくことにしました。
 
 転記するCSVファイルを複数用意します。
今回は、下の画像のような形式のファイルを6つ用意しました。
最上段にヘッダー、2行目にアルファベット、3行目に数字が書かれたファイルになっています。
転記用CSV一覧
 CSVファイルを一つのフォルダにまとめると、下の画像のような状態になります。
これらのCSVファイルの中身をConnectorの機能を使ってすべて読み込み、Excelファイルに転記するという業務を行います。2022 03 22 17h29 07
下の画像のようにDSロボットで変数としてフォルダのパスや転記先のExcelファイルのシート名(任意名)を指定し、Desktop Automationロボットの入力値として扱います。
2022-03-24_09h44_24.png
2022 03 24 10h37 53
今回は、用途に応じてConnectorで2つのアクションを実現できるように設定しています。

  • 新規作成の場合
  • 追記する場合

新規作成の場合
 CSVファイルからExcelファイルを新規作成するときに選択します。
フォルダ内のCSVファイルをループして、ExcelファイルにCSVファイルの中身を転記します。
Connectorを動かした後は、下の画像のように転記されるイメージです。
複数のCSVファイルを転記する場合は、2ファイル目以降のヘッダーは省略されるように処理しているため、ヘッダーは最上部に一度だけ転記されます。
2022 03 23 10h17 19

追記する場合
 すでに転記先のExcelファイルがあり、その続きにデータを追記したいときに選択します。
フォルダ内のCSVファイルをループして、ExcelファイルにCSVファイルの中身を追記します。
例えば、下の画像のようなデータに追記します。
2022-03-23_10h06_37.png
下の画像にあるCSVファイル(左からtestCsv5、testCsv6)の内容を追記します。
2022 03 23 10h36 21
追記時の追記CSV
 この時、今まで書かれていたセルの続きから転記されるように作成します。
先ほどのExcelシートの画像の例であれば、左上のセルA1から上書きするのではなく、A10から続きで転記されるようにする必要があります。
Connectorを動かした後は、下の画像のように転記されます。
2022 03 23 10h17 19

 

Connector開発でつまづいたところ


 今回Connectorを開発している中で、私が躓いた点の中でも印象的だったものを3点ご紹介します。

 1. 入力漏れ等のエラーチェック
 ConnectorのプログラムでCSVフォルダパスの末尾の区切り文字の入力漏れがないかをチェックする時に、区切り文字が/(スラッシュ)でも\(バックスラッシュ)でも、どちらを入力されても対応できるようにしました。
パスの区切り文字を\ではなく、UNIXにならって/で区切って記述したとしてもエラーにならないようにするなど、自分が作ったConnectorを誰もが使いやすくなるようにConnectorの処理を合わせていく必要があるという考え方は、私には足りていなかったためとても新鮮な学びでした。
Connector内のプログラムを書くときに、下の画像に示した処理でパスの区切り文字に何が使われているかを判定し、パスの最後に\や/が書かれていないときには使われている区切り文字に合わせて追記する、という処理を入れることによって、入力漏れに対応できるようにしました。
スラッシュ付与処理

 

 2. 文字コードの特定作業
 フォルダ内にあるCSVファイルの文字コードを特定するために、jschardetパッケージを使用しました。
しかしCSVファイルの文字コードがShift-JISの時、うまく文字コードが特定されず検出されないという現象が起きていました。
原因は、検出される信頼度の下限値よりも「Shift-JIS」の信頼度が低かったことでした。
そのため、CSVファイルにShift-JISの文字コードが使われていたとしても信頼度が低かったためにうまく特定されず、検出されていませんでした。
 jschardet.detectの「minimumThreshold」というオプションを使用することで、検出される信頼度の下限値を自分で決めた値まで下げることができます。
jschardetではある一定以上の信頼度の文字コードしか検出されないため、検出されなかった場合はnull(該当なし)となります。
複数のCSVファイルを読み込んでも、文字コードが特定されなかった時点から先は特定処理が行われません。
下の画像の場合、一つ目のファイルの文字コードが検出されず特定できないため、他のCSVファイルの文字コードの特定処理は行われませんでした。
信頼度デフォルト
 先ほどの信頼度の下限値では、一つ目のファイルの文字コードが特定されなかったためnullになっていました。
オプションの「minimumThreshold」で検出される文字コードの信頼度の下限値を下げることで、より低い信頼度の文字コードも検出されます。
信頼度の下限値を下げることで文字コードが検出されない状態は解消され、フォルダ内のすべてのCSVファイルの文字コードが取得できました。
信頼度低

 Shift-JISを文字コードとして検出するために、検出の際の信頼度の下限値を下げる「minimumThreshold」をオプションとして使用してすればよいということはなんとなく見当がついていました。
しかし、使うことで文字コードがより多く検出されるということになかなか気づけず、解決するのに時間がかかってしまいました。

 

 3. Excelへの書き込み位置をCSVファイルの行数に応じて変化させる
 転記するCSVファイルは必ずしもすべて同じ行数であるとは限りません。
それでもCSVファイルを毎回セルA1から転記していたら、どうなるでしょうか。
最終的に出来上がったExcelファイルは、最後に読み込まれたCSVファイルで上書きされて思い通りの結果になりません。
以下の手順で、現在Excelファイルに書き込まれているデータの範囲と次のCSVファイルを書き始める行を求め、データを書き込みます。

  1. 書き込まれている範囲の行数を求める
  2. (追記する場合)データがある範囲を求め、書き込み始める行を求める
  3. データを書き込むための処理を作成する

それでは、一つずつ順を追ってみていきましょう。

1. 書き込まれている範囲の行数を求める
 今回であれば、Excelファイルの何行目までデータが入っているかを求めるために「count」という変数を設定します。
変数とは、ざっくりお話しすると処理によって値を入れたり出したりできる箱のようなものです。
新規作成の場合はもちろん、Excelファイルの1行目から書き込みます。
この場合Excelシートには1行もデータが入っていないため、countには0を設定しておきます。
2022 03 25 10h52 39
2. (追記する場合)データがある範囲を求め、書き込み始める行を求める
 データを追記する場合は現在Excelシート上でデータがある範囲の次の行から書き込むため、1. で決めたcountの値を正しく上書きする必要があります。
そのために、現在Excelシート上でデータがある範囲を求めます。
上から2行目(オレンジ色の枠)で、Excelシート上でデータがある範囲をセル番地で取得しています。
しかし、データがある範囲がテキストデータ形式で表されていて処理をするうえでは扱いにくいため、3行目(緑枠)でデータの形式を変換して数値で取得します。
現在データがある行の一つ下の行からデータを書き込むために、上から4行目の処理で(青枠)現在データがある範囲の行数だけを取得します。
それに+1した数字を、次にファイルを書き込み始める行番号としてcountに設定します。
下の画像では、その部分の処理を紹介しています。
躓いたところ3
3. データを書き込むための処理を作成する
 CSVファイルの行数に合わせてExcelファイルに書き込むために、下の画像のようなxlsxパッケージの処理を書きます。
1行目で、ExcelシートにCSVファイルを書き込む処理を行います。
ここで、書き込むシート・書き込むデータ・データを書き込み始める行・データを書き込む列を設定します。
2行目で、次のCSVファイルを書き込み始める行を決める処理を行います。
1行目の処理で書き込んだCSVファイルのデータの行数をcountに設定されている値に加算することで、次のCSVファイルを書き込み始める行を決めています。
この2行の処理をCSVファイルの数だけ繰り返し、すべてのCSVファイルを転記します。
躓いたところ 2

 毎回データを書き込む位置が変わる可能性があるということで、その規則性を見つけ出すのに苦労しました。
特に追記をする場合は、必ずExcelシートのセルA1から追記するのではなくExcelシート内で追記する場所を決めてからCSVファイルを読み込むため、書き込む位置をどう定めればよいか迷いました。

 

感想


 何に対しても当てはまることであると思いますが、「何かの作業を効率化する」という目的のために新たにものを作ったり開発することはとても大変でした。
Connectorはプログラミングの知識があればあるほどスムーズに作成できるのですが、ほとんど初心者の私はかなり手こずり多くの時間を使い、たくさん質問をして疑問を解決してはまた壁にぶつかりました。
 しかし、開発をせずにいることでこれからかかり続ける時間や手間を考えれば、今開発のために消費する時間や手間はずっと少ないはずです。
たとえ小さな作業でもConnectorを作って効率化を図ることで、これからがぐっと楽になるだろうなと思います。
 またアクションステップをたくさん組み合わせなくても、Connectorが一つあれば一つのステップで複雑な動きをしてくれることが良いところだと思いました。
さらに、一つのConnectorに複数のアクションを設定しておけば場合によって切り替えることができるのも便利ですね。
 プログラミングの知識を身につけて、次に開発するときは少しでもスムーズに作成できるように頑張りたいと思います。

 

 今回のブログはここまでとなります。
 みなさまもぜひ、Connectorを開発・活用してみてくださいね!
 次回のブログもぜひお読みいただけますととてもうれしく思います。
 今回も、お読みいただきありがとうございました!

大阪本社
〒541-0056
大阪市中央区久太郎町2-2-7 山口興産堺筋ビル3階  アクセスマップ
TEL:06-6266-0440   FAX:06-6266-0450