またエラーだ!ロボットのデバッグをするための工夫

RPAエンジニア 小林

「ロボットを作って実行してみたものの、エラーが出て止まってしまった!」という経験は、ロボット開発をする上で誰にも起こりえることだと思います。エラーが起きても原因を突き止めてロボットを修正すればよいのですが、ロボット開発に慣れていないと、原因を見つけるのに苦労するというのはよくあることです。 今回は、UiPathでロボット開発を始めてみたものの、まだエラーへの対処に慣れていないという人に向けて、ロボットのデバッグがしやすくなる方法を紹介します。

見通しのよいロボットを作る

エラーへの直接の対処ではありませんが、ロボットの見通しをよくすることでエラーが生じたとしても対処がしやすくなります。各アクティビディをそのまま並べる形でロボット開発を行っても機能としては問題ないのですが、ロボットの規模が大きくなると見通しが悪くなってしまいます。見通しをよくするために、処理の目的ごとにグループ化して考え、適切な名前をつけたSequenceアクティビティやFlowchartアクティビティをつなぐ形でロボットを作るとよいでしょう。こうすることで、各アクティビティの関係性や全体構造が見やすくなりデバッグもしやすくなります。

全体像を見通しやすい構造にすることで、デバッグもしやすくなる

実行ログを書き出す

エラーの原因を見つけるには、ロボットが何を実行したのかを、人の目で見てわかるように書き出すことが有効です。UiPathの場合、ロボットが停止した際にエラーが生じたアクティビティとエラー内容は示されますが、必ずしもそのアクティビティ内にエラーの原因があるわけではありません。それより前の段階で読み込んだExcelの内容に誤りがあった、変数の型が誤っていたためアクティビティに値を渡せなかったなど様々な原因が考えられます。このような原因を特定するために、ファイルの読み込み、変数の値が変わるところなど、ロボットが動いている画面を見るだけでは気づけない部分はログが出力されるようにしておくと、バグが見つけやすくなります。

ログを残す方法としては、Log Messageアクティビティがあります。Log Messageアクティビティを使うと設定したテキストをログファイルに書き出すことができます。Write Lineアクティビティとよく似ていますが、Log Messageアクティビティではメッセージの重要度(InfoやErrorなど)が選択できます。例えば、変数がある値になったときはErrorとしてログメッセージを書き出すといった使い方ができます。 あるいは上記ログファイルとは別に出力したい場合や特定の変数だけに絞ったログを残したい場合は、任意のテキストファイルやExcelファイルに書き出すという方法もあります。例えば、Append Lineアクティビティを使ってテキストファイルにログを追記したり、Write Cellアクティビティを使ってExcelに記入していくという方法です。ログを出力するときは、現状あるログが消えてしまわないように、追記するか別ファイルとして出力するという形を取るとよいでしょう。

Log Messageアクティビティを使うと、ログファイルにメッセージを書き出すことができる

エラーに対処する

「ログをもとにエラーの原因を突き止め、対処し、解決する」というのが一番よいのですが、時折エラーを避けようがないという場面も出てきます。このようなとき、エラーに対処するためによく使われるものとしてTry Catchアクティビティがあります。エラー内容に応じたExceptionをこのTry Catchアクティビティに設定すると、そのエラーが生じた際に特定の動作をさせることができます。例えば、「商品URLが書かれたリストをもとに複数の商品ページを訪問して価格情報を取得しリストに書き込む」という作業を考えます。このうちいくつかは表示形式がイレギュラーなためにエラーが出る商品ページがあるとします。エラーが出るたびに人が対応してロボットを再度実行してもよいのですが、頻繁にロボットを気にしなければいけなくなってしまいます。このような場合、例えばTryCatchアクティビティを使って、エラーが生じたときはログファイルにその旨を記述するようにします。そうすることで、ロボットの処理が全部終わった上でログファイルを参照し、例外的な部分だけ最後に人手で対応すればよくなります。

Try Catchアクティビティを使うと特定のエラーに対して行う処理を設定できる

実際にエラーを出してみる

エラーの対処が終わったら、実際にエラーが生じていた状況で動作するか試したくなりませんか。上記のようなシンプルな例ならまだよいのですが、場合によっては「エラーAなら処理1をし、エラーBなら処理2をする」といった複雑な例外処理も考えられ、動作テストが必要になります。しかし、エラーによってはすぐ再現するのが難しい場合もあります。そこで使うのがThrowアクティビティです。このThrowアクティビティでは、あらかじめ設定したExceptionを出力できるので、エラー発生時に意図したとおりに動作するかを確認することができます。

Throwアクティビティを使うと特定のExceptionを出力できる

今回は、RPAのロボット開発においてデバッグがしやすくなる方法を紹介しました。いざエラーが生じたときにもあわてないために、「見通しがよく、明確な動作ログが残るロボットを作る」ということを心がけていきたいですね。