WinActorシナリオ開発のセブンルール(RPAエンジニアすずの場合)
WinActorに限らず、RPAのロボット開発というのは同じ業務の自動化に対しても、作るシナリオはまさに十人十色。自動化手段に対するアプローチも違えば、シナリオの構成も違う、作り方も人それぞれで正解はないというのはユーザーにとってはあるあるだと思います。
そして経験を積んでいくと自分の中でのシナリオ開発におけるマイルールというのができてきたりします。他の人のやり方を見たり聞いたりすると、意外と自分には思い付かないことをしていたりと面白い気づきがあるのですが、なかなかそんな機会がないという方もいらっしゃると思いますので、今回は私の2022年秋のマイルール7つ【セブンルール】をご紹介したいと思います。
それではいってみましょう!
RULE1:
シナリオファイルの保存場所と名前を最初に決めて保存する
シナリオを新しく作成するとき、まず「シナリオファイルの保存場所」と「シナリオファイルの名前」を決めて保存をしてから作成に入ります。
私はお客様先でのシナリオ開発の際、業務の手順を聞いていざ作成!となる前にまずシナリオファイルの保存場所と名前をどうするかをお客様に確認・相談をします。
そうして指定の場所に指定の名前でシナリオファイルを保存してから作成に着手します。
目的は「作成中に保存を細めにおこなえるようにするため」です。シナリオ作成中にPCが突然固まったりWinActorが落ちるということもあり得るのでファイルの上書き保存はこまめにおこなう、というのは多くの方がされていると思います。(WinActorでなくても突然固まってタスクの強制終了することってたまにありますよね💦)
私は上書き保存するショートカットキー(Ctrl+S)が癖づいていて、頻繁におこないます。ですので最初にお客様に手順などを確認していく中で併せてシナリオファイルの保存場所や名前についても確認しておき、最初にファイルを作成してから作成に入ることで、あとはひたすら上書き保存だけすればいい状態にするためにおこなっています。
RULE2:
手順を箇条書きにして構成を考えてから作成する
いきなりシナリオを作り始めるのではなく、ざっくり全体の構成を考えてから作成に入るようにしています。
私の場合は自動化したい業務の手順をお客様からヒアリングするときはその内容を箇条書きでPCのメモ帳を使ってメモを取ります。一通り手順を確認し、自動化にあたっての不明点などを聞いたらシナリオ作成に入りますが、いきなりノードを置き始めるのではなくメモ帳上で構成を考えます。
手作業で実行しているときとRPAで自動化するときで順序を変えた方がいい箇所がないか、自動化にあたって追加で必要になる操作、逆に不要になる操作がないか、繰り返し処理がある場合は手順のどこからどこまでが繰り返す内容に該当するのか、分岐処理が入りそうな箇所には「○○なら××、そうでない場合は処理をスキップする」といった条件を書き加えていきます。
その時点で思い描けるざっくりとした構成なので、もちろんシナリオを作りながら変わっていくこともあります。手順が複雑で長くなればなるほど頭の中だけでの整理が難しいので書き出して整理しておく、ということをおこなっています。
RULE3:
使いそうな変数を変数一覧から登録する
大体の構成ができたらいよいよWinActorの操作に入りますが、私はまだノードを置きません。先に変数一覧で思い付く限り使いそうな変数を登録するところから始まります。
サイトのURL、システムのログインID・PWや、Excelなどのファイルを使うならファイルパスや、転記作業なら"商品名"や"数量"のような転記項目を変数として登録します。初期値が分かっているものは初期値も設定します。
理由としてはノードのプロパティ画面で新たに変数を作る回数を減らしたいからです。これは私の性格もあると思いますが、特にサイトのURLやファイルパスや行番号といった初期値の入力が必要になる変数は、ノードのプロパティで変数を登録した後、初期値を入力するために結局変数一覧も開くことになりますし、すると初期値の入力を忘れてしまうかもしれないので最初から変数一覧で作りたいということがあります。また、変数一覧で作成すれば他の変数を一覧で確認できますので【変数の命名ルール】を意識して登録しやすいというメリットもあります。
もちろん、ノードのプロパティを設定する段階で変数が必要なことに気づくものも多いので最初にまとめて作るのはあくまでその時点で思い付くもののみであって、そこに時間はかけていませんよ!
RULE4:
ノードやグル-プの名前を必ず変更する
シナリオの中に配置したノードやグル-プの名前を、元の名前から「どんな操作をおこなうノードなのか」を説明する名前に変更します。
これは既に実践している方も多いと思いますし、お客様先での研修でも必ずおススメしている作業ですね。
お客様先へ訪問してシナリオ開発の支援を行うという仕事柄、たとえ自分が作成したシナリオだとしても、次に見ることができるのは数日後だったり長いときは数か月後ということもあります。すると作成したときから時間が経って詳しい内容は忘れていることがほとんどです。
その際にノードの名前がきちんと変更されていて「どんな操作をしているのか」が分かるようになっていれば、思い出す時間を大幅に短縮できます。そうすればエラー改修をするときや追加工程の作成をおこなうときも、作業箇所の特定を素早くできますし確実に把握できます。
私の例で言えば元のノード名が「クリック」のように何をしているかがは元の名前からで充分わかる場合でも、必ず「○○ボタンをクリック」と変更するくらい徹底しています。またノードだけでなく、グループ化したらグループの名前、繰り返しや分岐の名前も変えています。
これはまだノード名変更が習慣づいていない方に特に強くおススメしたいのですが、後からまとめて修正しようとすると忘れますので一つ一つノードを設定していく段階で名前も一緒に変えてしまってください。「クリック」ノードまで変更するかはお任せしますが、初心者の方ほどやっていただきたいです。このひと手間が後日のメンテナンスのハードルを下げることになります。
RULE5:
Excelの機能を大いに活用する
自動化したい業務としてよくあるのがExcelやCSVを使う業務です。売上データの集計や、注文データの加工、別のエクセルへの転記など様々な業務でよく使われるツールですが、Excelの機能でできることはExcelにさせるようにしています。
WinActorに慣れてくると、すべての操作をWinActorのノードだけで行おうとしてしまいがちですが、Excel自体の機能が豊富なのでExcelの機能を使った方が簡単で早い、ということも多々あります。
例えば、Excel関数です。SUM関数、IF関数、VLOOKUP関数など普段から使われている方もいらっしゃるのではないでしょうか。この他にもExcelには多くの関数が存在しています。文字列の加工や変換にはWinActorで変数に取得してノードでおこなう手段もありますが、ある1列をすべて変換させたいときなどは空いている列に関数を設定して一気に変換させると簡単です。
また従来からマクロが設定されているExcelファイルの操作を自動化するときはそのマクロを活かします。マクロが実行している内容をWinActorでの操作に置き換えることもできますが、マクロの内容を読み解きWinActorで設定してく必要がある分時間も手間もかかりますので、完成しているマクロがあるならそこは活かして「マクロ実行」自体をWinActorにさせるようにします。
他にも「A列の値が○○だったらセルの色を赤色にする」といった作業が必要な場合、「条件付き書式」を使って元のフォーマットに設定しておくということもあります。フォーマットに設定を仕込んでおくことによってWinActorでの操作も少なくできるので開発・実行ともに時間を短縮できることがあります。
私はExcelファイルの操作をおこなうとき、まずExcelの機能でできないかを考えて、ノードでもExcelの機能でもどちらでもできるならどちらの方がより簡単・分かりやすい・メンテナンスしやすい・安定して動作するか等から総合的に判断して手段を選んでいます。
RULE6:
シナリオごとに実行ログを出力し保存する
エラー対策として特に動作が安定するまでの初期段階には必ずと言っていいほどおこなっているのが、実行ログを出力し保存しておくことです。
WinActorの「ログ出力」画面は表示できる行数が決まっている上、WinActorを終了するとクリアされてしまい後から確認できなくなってしまいますのでノードの「ログ出力」を配置してすべて残すようにしています。
エラーが起きた時や、正常終了できたけれど結果が想定しているものでなかったときには、その原因となる箇所を特定して改修をおこなう必要がありますが、その際に実行ログが大きな手掛かりとなります。
実行ログにはノード一つ一つに対して実行した結果(成功したかエラーになった)やエラーを起こしたときはその情報も記録されますので、その内容から不具合を起こしている箇所や正しく実行されているかを確認します。
更に、エラーの頻度や内容によってはエラー時の画面スクリーンショットの画像やエラー発生時の変数の現在地を出力して保存させる工程を組み込むこともあります。
こういった工程を組み込んでおくことで、エラー改修作業やメンテナンスをおこなうときに作業がしやすくなりますますので、動作が安定していない検証中は特にですがログ出力の配置は必須としておこなっています。
RULE7:
待機をこまめに配置する
動作を確実に実行するため、また操作対象のウィンドウの状態が完全に完了できるように「待機」をさせます。
具体的には「指定時間待機」「ウィンドウ状態待機」「読込完了待ち」などの待機系ノードを使ったり、エミュレーションノードではキー操作一つに対し前後に待機を加えています。
シナリオの作成中は待機なしでも成功したとしても、本番環境で実行すると失敗するということはよくあることです。部分実行では成功するのに通して実行すると失敗するという場合に、待機時間が足りなくて次の操作を失敗することもありますし、実行する日や時間帯によってサイトの接続状況が悪く画面の読み込みに時間がかかることもあります。
新しいバージョンだとノード自体に待機する機能が含まれているものもありますが、わざわざ「待機」を配置しておかないとさっさと次へ進んでしまうノードも多いです。すると、実際の操作対象の画面上はまだ次のページが表示できていないのに次の操作をWinActorがしようとしてエラー発生、ということが起きてしまいます。
お客様のご要望にもよりますが、実行するのに少しくらい時間がかかってもいいから確実に動くようにしたい(もしくはエラーの要因を少しでも減らしておきたい)ということで可能性がありそうな箇所で気持ち多め・長めに設定しておきます。もちろん、必要ない箇所で無駄に待ち時間は作らないように、多すぎず短すぎないラインを探って配置していきます。
エミュレーションにおいては特に、動きを安定させるために待機なしで連続キー操作をおこなうと画面にうまく反映しないことがありますので確実にキー操作を反映させるためにゆっくり操作させる必要があります。とはいえ、キー操作一つごとに待機を加えるといっても0.3秒あれば問題ないことも多いのでそれくらいであれば「動きが遅い」という印象にもなりません。
おわりに
今回、この記事を書くにあたって自分なりにやっていることを挙げてみたときにWinActorユーザーになったばかりの頃からやっていることもあれば割と最近始めたこともありました。また、他のエンジニアが実践していることを耳にして真似してみたというものもありました。逆に、以前はやっていたがやめた、ということもありました。今後も日々アップデートしてよりよいシナリオ開発を目指していきたいと思っています。
皆様も周りのWinActorユーザーの方と共有してみてください。きっと新しいアイデアが思い浮かんだり、やり方を真似してみて便利になったということが起こると思います。
本日も最後までお読みいただきありがとうございました。
また次回お楽しみに!
ワークスアイディ キャンスタ編集部 RPAエンジニアのすずでした。