前回に引き続き、フリー、オープンソースの RPA ツールのPulover’s Macro Creator を使ってウィンドウ操作、そして新しいこととして条件分岐について学んでいきます。
今回のウィンドウ関係のコマンドは、ウィンドウ操作というより、「ウィンドウがどんな状態か?」「アクティブなウィンドウは何か?」という情報を元に、 RPA のシナリオの流れを制御していきます。これをプログラミングの用語では、条件分岐(条件判断と処理分岐)と言います。
前回までに作成した RPA シナリオを使っていくので、条件分岐だけ知りたいんだ! という方も元となる RPA シナリオを作成してきてくださいね。
RPA における条件分岐
RPA における条件分岐とはどういうものかについて、簡単に説明します。基本的に、RPA シナリオというのは、ひとつのシナリオの中にいくつもの大きな機能を持つものではありません。プログラミングで作られるアプリケーションであれば、逆に単一の機能しか持たないものは、今は少なくなっています。
ではどういう時に用いるかというと、
- アプリケーションによる細かな分岐の処理(確認ダイアログなど)
- エラーの判断
- ユーザーの確認が必要かどうかの判断
- 処理する対象かどうかの判断
といったものが挙げられます。リストの下の方に行くほど、 RPA での実装の難易度が高く必要としない場合が多いと思って問題ないと思います。そういった複雑度の高い業務は RPA に向かないので、まずは複雑度を下げるように業務の「棚卸」を行うといいと思います。
今回は、1番上について取り上げます。
今回の記事が役に立つ人
- RPA を基礎からじっくり学んでいる人
- Pulover’s Macro Creator で条件分岐を使いたい人
- RPA 全般で、確認ダイアログなどにどう対応するか、考え方を知りたい人
関連記事
本連載の目次や、Pulover’s Macro Creator の関連情報は以下のページにまとめています。
RPA で上書き確認に対応する
以下では、前回までに作成した、メモ帳で名前を付けて保存し、メモ帳のウィンドウをドラッグする RPA シナリオを改造していくので、開いておいてください。
前回の RPA シナリオの問題点
前回作った RPA シナリオの問題点を覚えているでしょうか。「名前を付けて保存」をしたときに、同名のファイルがある場合、上書きしてもいいかどうかの確認ダイアログが表示されてしまい、期待通りの動作をしないことでしたね。
今回はこれに対していくつかのアプローチで対策を行います。
対策の下準備として、「名前を付けて保存ダイアログが非アクティブになる」のを待つ
前回は、メモ帳のウィンドウがアクティブになるのを待つコマンドを使いましたが、今回はその逆で非アクティブになるのを待ちます。なぜかというと(通常の操作では)、名前を付けて保存するまで、確認ダイアログがでるかどうか、分からないからです。
ではコマンドを入力していきましょう。
- RPA シナリオが表示されたパネルから、WinWaitアクションで「名前を付けて保存」ダイアログを待つ行をダブルクリックして、編集ダイアログを表示します。
- 編集ダイアログを表示したら、「…」ボタン下のテキストボックスから、ウィンドウを特定する文字列(名前を付けて保存 ahk_class #32770 ahk_exe notepad.exe)をコピーします。
- このダイアログはこのまま閉じます。
- F6(ウィンドウボタン)キーを押して、ウィンドウコマンドの新規追加ダイアログを表示します。
- コマンドはWinWaitNotActive
- タイムアウトは10(秒)
- ウィンドウを特定する文字列は、先ほどコピーしてきたものを貼り付けます。
-
このように設定できたら、OKボタンでダイアログを閉じます。 - 追加された「WinWaitNotActive」アクションを、test{Enter}と入力するアクションの下、メモ帳ウィンドウがアクティブになるのを待つWinWaitActiveの上に配置します。
- 追加したアクションの下にあるメモ帳ウィンドウがアクティブになるのを待つWinWaitActiveアクションを削除します。
- test.txtファイルを削除してから、試しにこの RPA シナリオを動作させてみます。
- 前回同様に素早く保存からドラッグまで実行されることを確認します。今回は、上書き確認ダイアログを利用したいので、test.txtファイルは消さずに残します。
解説
WinWaitNotActive アクションは指定したウィンドウやダイアログが非アクティブになるのを待ちます。名前を付けて保存ダイアログが非アクティブになる、ということは、通常はメモ帳のウィンドウがアクティブに戻ることを意味します。
そのため、「名前を付けて保存の確認」ダイアログが表示される場合以外は、「メモ帳がウィンドウがアクティブになるのを待つ」のとほぼ同じ意味を持ちます。
またこのアクションをtest.txtを削除しないで実行した場合、Move アクションの位置がウィンドウの左側に近ければ、「名前を付けて保存の確認」ダイアログがメモ帳同様に素早く移動されることが分かります。もし同様の動作を前回のWinWaitActiveで行うためには10秒待つ必要がありました。
RPA で上書き確認ダイアログに「OK」の指示を出す
それでは今回の本題その1に入って行きましょう。
- 上書き確認ダイアログが出たら「OK」をクリックして、メモ帳のウィンドウをドラッグ。
- 上書き確認ダイアログが出なかったら、そのままメモ帳のウィンドウをドラッグ。
という RPA シナリオを作っていきます。プログラミング未経験の方にはイメージが掴みづらいところですが、マスターすれば自作できる RPA シナリオの幅がぐっと広がるので、頑張っていきましょう。
if文の挿入
ここまで作成した RPA シナリオをもう1度実行して、メモ帳で「名前を付けて保存の確認」ダイアログを表示し、そのままにしておきます。
Pulover’s Macro Creator のメインウィンドウに戻り、RPA シナリオのパネル上で、Move アクションを選択した状態で、if文ボタン(ショートカットはF10)を押します。
if文を編集するダイアログが表示されます。配置や文言が変わっていますが、今のところは「ウィンドウ」編集ダイアログとほとんど同じと思っていただいて大丈夫です。
- コマンドの種類を決めます。この場合は、「どんなコマンドの結果で条件判断をするか」を意味します。
- WinTitleボタンはウィンドウダイアログと一緒で、「…」ボタンでウィンドウを特定する文字列の、どれを取得するかを決めます。
- ウィンドウや座標などを選択する、選択モードにします。
- ウィンドウを特定する文字列を入力します。
今回は、ウィンドウがアクティブな場合を条件にしたいので、①はそのまま。②については、「名前を付けて保存ダイアログ」と同様、共通パーツが使われているのでTitle, Class, Processにチェックをいれます。
ここまでできたら、③のボタンで、メモ帳の出しっぱなしにしてある「名前を付けて保存の確認」ダイアログを右クリックしましょう。
上図のようになっていたら成功です。ウィンドウを特定するための文字列「名前を付けて保存の確認 ahk_class #32770 ahk_exe notepad.exe」をコピーしてから、OKボタンを押して「if文」ダイアログを閉じましょう。また、ahk_class 以降が「名前を付けて保存」ダイアログと全く同じことにも気をつけてください。Title は不安定ですが、Titleでしか判断が付かない場合もある例です。
以上の操作を完了すると、 RPA シナリオが表示されているパネルは上記のような状態になります。
IfWindow Acrive アクションと [EndIf]アクションの間のアクション/コマンドが、「if文」ダイアログで設定した条件を満たしているとき(条件が真であるとき)に実行されるアクションです。視覚的に分かりやすいように、青い字になって他と区別されていますね。
今は、Move アクションが間に挟まれてしまっていますね。これは、本当はif文の後に来て欲しいので、後で並び替えて対応します。
「名前を付けて保存の確認」ダイアログに「はい」と答える
「まだ名前を付けて保存の確認」ダイアログは出ていますか? 次の手順はこのダイアログに「はい」と応答することです。それでは、どう操作するのが、もっともミスが少なく、簡単でしょうか?
マウスで「はい」をクリックすることでしょうか?
それとも、カーソルキーで左を押してからEnterキーを押すことでしょうか?
答えはもっとシンプルで、単に「y」とキー入力するだけです。余り知られていないことですが、ダイアログのボタンの右には、括弧で囲まれて(Y)や(N)と文字が書かれています。これはこのキーがショートカットとして使えるという意味です。
日常的な操作ではあまり出番がないですが、こと、 RPA のシナリオづくりとなると重宝するので覚えておきましょう。動作が安定しやすい上に入力も楽ですからね。
では、Move を選択した状態でテキストボタン(F3キー)を押して、「テキスト」ダイアログを出して、入力欄にyと入れて閉じます。今回は、コマンド文字すらないので、「テキスト形式(RAW)」のままで問題ないです。楽ですね。
さらに続けて、ウィンドウボタン(F6キー)を押して、「ウィンドウ」ダイアログを表示します。
- コマンドは「WinWaitNotActive」
- タイムアウトは、10(秒)(正直、何秒でも大丈夫ですが、2, 3秒はとっておくといいでしょう)
- ウィンドウを特定する文字列は、先ほどコピーしておいたものを貼り付けます。消えてしまっている場合は、Win + vで探せるかもしれません。
上図のような状態になっていれば、OKを押してダイアログを閉じます。
さらに、 RPA シナリオが記載されたパネルは、以下のようになっているはずです。
ここで、Move アクションをドラッグして、[EndIf]アクションの下に移動します。すると、以下のような順番になります。
アクションを記載した文字の色も、青と黒で色分けされていることを確認します。
ここまでできたら、今起動しているメモ帳は終了して、今作った RPA を実行してみましょう。test.txtファイルを削除したり、そのままにしたりして、確認ダイアログが出ても出なくても、それぞれ人間よりもずっと早く、安定して動作していることが分かると思います。
if文のポイントの復習
「test.txt」ファイルの有無で「名前を付けて保存の確認」ダイアログが出るか出ないかが決まります。事前に出るか出ないか確認するというアプローチもあります。
ただ、問題の本質は、「RPA を実行するまでは、名前を付けて保存の確認が出るか出ないか分からない」というところにあります。言い換えると、「RPA シナリオを作っているときには、決められない」ということですね。
そこで、 RPA シナリオを作っている時点では分からない、「名前を付けて保存の確認」ダイアログが出るパターンになったかどうか、について、if文を使って「調べて」「判断」しています。
さらに、if文の判断により「名前を付けて保存の確認」ダイアログが出るパターンだと分かったときにだけ、yキーを押して、ダイアログが消えるのを待つという専用の動作を実行するようにしています。ここが、If Window Active アクションと[EndIf]アクションに囲まれた部分です。
おわりに
今回、新しいことについては、WinWaitNotActiveとIf文についてしか取り上げませんでした。なぜかというと、やはりIf文というのはプログラミングに馴染みがない人にとっては頭が混乱するもとだからです。
それと、WinWaitActiveやWinWaitNotActiveと、If文がどことなく似ているな……と感じて欲しいというのもあります。違いとしては、If文はその場の瞬間で、条件を判断するのに対し、WinWait~系は条件を満たすまで待とう(ただし、一定時間までね)というところにあります。
こうした条件を満たす・満たさないという部分は、論理学というよりは、論理回路の基本を知っていると理解しやすくなります(が、なるべく本チュートリアルの中だけである程度分かる様には努めます)。
初めての方はもしかしたら混乱したかもしれませんが、何回か作り直してみたり、読み直してみたりしてください。この後も、条件を変えてIf文はとりあげようと思うので、よく分からなくても心配しなくて大丈夫です。
また、理解できればプログラミングの最初のつまずきポイントを乗り越えたことになるので、 RPA に限らずステップアップしていけると思いますので、あきらめずに頑張りましょう。
2件のフィードバック