UiPathではじめるRPA入門(4)〜 デバッグ編
今回の内容は、おそらく多くの開発者が多くの時間をさくであろうデバッギングについて触れます。
Contents
ロボットの動作が期待と異なる時の対処方法〜デバッグ
動作中のアクティビティを一つ一つ調べる(Debug実行モード、Step Into)
特定の動作の直前で止める(Breakpoint)
変数の中身を表示する(Log Message)
予期せぬ致命的状態が発生した場合の対処法〜例外処理(Error Handling)
エラーを補足する(Try Catch)
こちらの記事では、期待した通りにロボットが動かなかったり、エラーが出て動作しない場合に対処する方法について学習します。RPA入門(3)の記事で作成した「数当てゲーム」を用いてデバッグを学習します。
ロボットが期待通りの動作をしない時
作成したロボットが期待通りの動作をしない場合があります。
特に、自動レコーディングを用いて作ったロボットは値を変更した時などに期待通りの場所をクリックしなかったり、クリックすべき場所を発見できずにストールしてしまうことなどがよくみられます。
ロボットが異常停止してしまう時
期待通りの動作をしないという中には、ロボット自体が異常停止してしまうケースもあります。
例えば、ユーザーが入力するテキストの形式が期待と違う、Webサイトから取得してきたデータの形式が期待と違うなどです。
前回作成した、数当てゲームでは、入力が数字である必要がありますが、「おはよう」などの文字列も入力できてしまいます。この場合ロボットは、異常停止します。
問題は、問題の場所が特定できないこと
上述のように、原因がわかっていて動作しないというのであれば、すぐに修正ができます。しかし、ロボットを普通に実行していると、想定外の事態でどこで何が問題だったのかがわからないようなケースにもたくさん遭遇します。
そこで、ここでは、 問題の場所発見に着目 してUiPath上でどのような機能が提供されているのかを学習してきます。
デバッグ実行モード
どこを実行しているのかがわかる「デバッグ実行モード」
リボン > EXECUTE > Debug でデバッグ実行モードでロボットを起動できます。
デバッグ実行中は、動作中の部分が設定ファイル上でハイライトされわかるようになっています。Slow StepというボタンをONにしておけば、動作もゆっくりになります。
とりあえず、Slow StepをONにして、デバッグ実行してみましょう。
Step into
一つ一つ確認しながら進められる Step into
リボン > EXECUTE > Step into をクリックしてみましょう。このボタンは、何度もクリックすることになるので、(F11)で実行する方法も是非覚えてください。
早速実行してみましょう。先ほどのデバッグ実行モードをクリックの度に一つ一つ進めていく形になっていることがわかると思います。
入れ子になった部分から出て来るステップも詳細に確認できるので丁寧に手順を確認するにはおすすめの方法です。
Breakpoints
特定の部分でロボットの動作を止める Breakpoints
アクティビティを選択した状態で、リボン > EXECUTE > Breakpointsから、”Toggle Breakpoint” を選択してみましょう。
アクティビティに、ブレークポイントのマーク(斜め縞の赤丸)が出ていると思います。同じように “Toggle Breakpoint” を選択すると、今度はマークが消えます。
ブレークポイントを設定した状態でデバッグ実行をしてみましょう。ブレークポイントで処理が一時停止されます。
デバッグの効率のためにブレークポイントまで一気に処理を実行させたり、ブレークポイントの時点で変数の中身を見たいときなどに重宝します。
Log Message
ログに内部状態を出力させる Log Message
アクティビティより、Log Message を追加してみましょう。
数当てゲームの answer を設定したあとに、answer に正しい値が代入されているかをチェックしてみます。
Log の出力先は、テキストファイルか、実行中に登場する Output パネルになります。Log Messageは、デバッグ中じゃないものも記録できるので、実行中の情報を集めておきたいときにも重宝します。ただし、Log Messageの中にセキュリティ上問題になりそうなものを含めいないように注意しておきましょう。アクティビティには、Logに出力させないPrivateというプロパティもあります。
変数の表示
変数の現在の状態を表示する Locals
デバッグ実行すると、Outputパネルの下に、”Locals”というタブが出てきます。
これを表示すると、ローカル変数の現在の値を参照することができます。
ブレークポイントと合わせて活用してください。
変数の値を表示するLocals
例外処理(Error Handling)
例外の発生
ロボットが動作を継続できない状態に陥った時、ロボットは異常終了してしまいます。終了する前に、管理者へ通知を出したり、仕掛かりの仕事を元に戻したりしたい時、どうすればよいでしょうか。
この機能を提供しているのが、Error Handlingに関連するの一連のアクティビティです。
試しに例外を発生させてみましょう
前回作成した「数当てゲーム」の入力として、数字ではなく、「およよう」と文字列を入れてみてください。
エラーメッセージ
期待通りに例外が発生したところと思います。詳細を表示することもできますし、エラーメッセージをコピーすることもできます。理解できないエラーについては、そのままgoogleで検索すると解決策が見つかることもあります。
UiPathでは、VB .NET を採用 していますので、VB .NET系の情報を探すのが良いですね。
「文字列と数値の比較は実装されていない」という趣旨のメッセージが出ました。
例外が発生した場所は、先ほど紹介したデバッグ方法で確認します。
例外処理
先ほどの例外を正しく処理するために、次のような方針で対処してみましょう。
方針
- 正解判定を別アクティビティにする(ここで例外を捕捉)
- エラー発生有無を変数で管理(Try Catch内でFlowchartの遷移を定義できないため)
- Flow Decision で発生していたら入力ダイアログに返す
Try catch の配置の仕方
例外処理は、Try catchアクティビティを使います。他のアクティビティのようにアクティビティパネルからドラッグで登録することもできますが、アクティビティを右クリックして、「Surround with Try Catch」というメニューが用意されているので、そちらを使ってみましょう。
Try catch
概要
Try catch は、Try(例外が発生するかもしれない実行したい処理)、Catch(発生した例外と後処理)、Finally(必ず実行する処理)の3つから構成されています。
プロパティ
Try catchは、表示名くらいしかプロパティがありません。他は、中身にアクティビティを定義して実装していきます。
先ほどの例外の捕捉
先ほど発生したエラーのタイプは、「InvalidOperationException」でした、ここでは、汎用的に例外を捕捉できる「System.Exception」を使い、これをCatchのところに加えます。発生する例外が予測できる場合は、必要に応じて補足する例外クラスを具体的に指定しましょう。より柔軟な対応が可能になります。
Catchの中身は、Message Box で、「数値を入力してください。」とし、必要に応じてエラーの内容を表示する Log Message を使ってください。例外発生の有無を判定するための hasError への値の代入を行います。
Finallyは、特にする処理がないので空白のままとします。
例外処理エクササイズ
数あてゲームに例外処理を追加してみましょう。
完成イメージ
復習
今回は、期待した通りにロボットが動かなかったり、エラーがでて動作しない場合に対処する方法、デバッギングの方法を学習しました。
ロボットの動作が期待と異なる時の対処方法〜デバッグ
- どんなときにデバッグが必要になるかせつめいしてください
- 動作中のアクティビティを確認する方法について説明してください
- 特定の動作の直前で止める方法について説明してください
- 変数の中身を表示する方法について説明してください
予期せぬ致命的状態が発生した場合の対処法〜例外処理(Error Handling)
- どんなときに例外処理が必要になるか説明してください
- 例外が発生した時に、正常系として処理する方法を説明してください
また次回。
次回は、アプリケーションの自動化について説明します。
エクセル書類からのデータの読み取りと書き込み
- 読み込み、書き込み
- 繰り返し
ブラウザを用いた自動化とデータの読み取り
- 自動検索、結果表示
ワード書類の読み取りと書き込み(文字列置換)
- 書類の読み込み、検索、書き込み
PDFからのデータ読み取り
- 請求書データの読み取り
Eメールの送受信
- Eメールの設定
- Eメールの受信
- 正規表現によるEメールの解釈
- Eメールの送信
UiPathではじめるRPA入門 (5) 〜 アプリケーション自動化編