Sikuliで学ぶRPA超入門の第2回です。今回はロボにテキストファイルを名前を付けて保存させます。1回目は成功します。2回目も同じ動作をさせると、すでに前回保存したファイルが存在するので上書き保存するかどうか聞かれてしまいますね。このときの対応をプログラムすることで、「条件分岐」を学んでいきます。

【Point】プログラムの基本構造

この連載ではRPAの基本を解説すると同時にプログラミングの基礎も解説しています。どちらも同じ原理だからです。今回は2番目の条件分岐を解説しながら、RPAでよくあるパターンもマスターします。

【RPA超入門】は無料のオープンソースRPA「SikuliX」を使ってRPAの基礎を学ぶコーナーです。プログラミングもできるようになりますので、プログラミング未経験者にもおすすめの連載です。

 

まず準備をしましょう

簡単なロボを作ってRPAの威力を実感しよう」で使ったプログラムを使いますが、区別するために別名で保存します。SikuliX開発画面のメニュー「ファイル」をクリックし(図1➊)、「名前を付けて保存」をクリックします(図1❷)。


図1 名前を付けて保存

【Hint】前回の続きではない場合
前ページのプログラム作成のあと、SikuliX開発画面を終了した方は、「簡単なロボを作ってRPAの威力を実感しよう」のおまけ3(ページの一番下の方)にプログラムの開き方を載せていますので、参考にして「JB100101.sikuli」を開いてから、この処理を行ってください。

 

図2のポップアップが出るはずです。


図2 保存ダイアログ(1)

 

フォルダ名に「JB100102」と書き加えて(図3➊)、「Save」をクリックしてください(図3➋)。


図3 保存ダイアログ(2)

 

ロボの開発を始めます

実行してください

今保存した「JB100102.sikuli」を一度実行してください。リボンにある「実行」をクリックでしたね。実行後は図4のようにHello.txtに「Hello」と入力された状態で終了します。


図4 実行後のHello.txt

 

名前を付けて保存します

メニュー「ファイル」→「名前を付けて保存」→ファイル名を「Hello2.txt」としてデスクトップ上に保存する、という手順をロボにやらせます。

まず、12行目にコメントを記述しておきましょう(図5❶)。Enterキーを押して改行することを忘れずに。次にコマンドリストの「click()」をクリックします(図5❷)。


図5 開発画面

 

クリックすると、Hello.txtをダブルクリックするプログラムを作成したときと同様、画面が暗くなって範囲選択できるモード(キャプチャーモードに移行)になります。

メモ帳の「ファイル(F)」の部分を選択してください(図6❶)。選択が完了すると、ソースコードウィンドウに「click(キャプチャした画像)」というプログラムが生成されます(図6❷)。


図6 メモ帳の選択とソースコードウィンドウ

 

次は「名前を付けて保存」のクリックです。少しテクニックが必要ですよ。「名前を付けて保存」は「ファイル」をクリックすると出てくるメニューですから、普通には見えていませんので、キャプチャーできません。どうすればいいでしょうか?

 

答えはキャプチャーモードになる前に、メモ帳の「ファイル」を素早くクリックする、です。やってみましょう!

コマンドリストの「click()」をクリックします(図5❷と同じです)。画面がキャプチャーモードになる前に素早く、メモ帳の「ファイル」をクリックします(図7)。


図7 メモ帳のメニュー「ファイル」をクリック

 

画面が暗くなったら、「名前を付けて保存」を範囲選択します(図8)。完了するとソースコードウィンドウにプログラムが生成されます。これは、もうおなじみのパターンになったと思います。


図8 「名前を付けて保存」をキャプチャする

 

【Memo】環境設定の変更

もっと階層が深いところにあるメニューをキャプチャーすることになったら、どうすればいいでしょうか?実はキャプチャモードになるまでの時間は変更することができます。

SikuliXのメニュー「ファイル」をクリック(図9❶)、「環境設定」をクリックします(図9❷)。「環境設定」画面が表示されるので、キャプチャーを実行するまでの時間を3秒に変更します(図9❸)。もっと、ゆっくりしたいなら5秒くらいにしてもいいですね。

「OK」をクリックします(図9❹)。「References have been saved」画面が表示されるので、「OK」をクリックします(図9❺)。


図9 環境設定の変更

 

一度、ここでプログラムを振り返っておきます。リスト1のようになっていますか?なっていなければ、戻ってやりなおしてくださいね。

プログラムはメモ帳と同じようにバックスペースキーやデリートキーで消すことができますよ。


リスト 現在のプログラム

 

続けていきます。メモ帳を選択して、メニュー「ファイル」→「名前を付けて保存」をクリックしてください。図10のように「名前を付けて保存」ダイアログが表示されます。


図10 メモ帳の「名前を付けて保存」ダイアログ

 

ファイル名の所にカーソルが当たっているので、直接キーボードからタイプすることができます。「Hello2.txt」とタイプすることにしましょう。SikuliXの開発画面を開いて、コマンドリスト「type」をクリックし、「Hello2.txt」と入力します(図11)。


図11 コマンドリスト「キーボードの動作」

 

できたら、次は手動でメモ帳のファイル名のボックスに「Hello2.txt」をタイプしてください。「SikuliXに記録して、同じことを手動でも実行してゆく」という手順です。

では、保存するプログラムを作成しましょう。例によって、SikuliX開発画面のコマンドリスト「click」をクリックし、「名前を付けて保存」ダイアログの「保存」を範囲選択します(図12)。範囲選択してプログラムを生成するパターンは、もう慣れてきたと思いますので、画像は省略していきます。


図12 「名前を付けて保存」ダイアログの「保存」をクリックさせるプログラム

 

プログラムが生成できたら、リスト2のようになっているはずです。


リスト2 現在のプログラム

 

このままだと、マウスやキーボード操作が早すぎるので、sleepを入れて、ロボの動きを遅くします(リスト3)。


リスト3 現在のプログラム(sleepを入れた後)

 

では、手動で「名前を付けて保存」ダイアログの「保存」をクリックしましょう。何も聞かれずに「名前を付けて保存」ダイアログが閉じます。

 

メモ帳を終了します

いま、保存した「Hello2.txt」を終了しましょう。メモ帳の右上にある「×」で閉じてもいいのですが(【Memo】方法は一つじゃないよを参照)、確実に動作させるために、メニュー「ファイル」→「メモ帳の終了」をクリックしましょう。

 

【Memo】方法は一つじゃないよ

メモ帳は、「×」をクリックして終了してもいいです。でも、もし図13のような状態になったらどうでしょう?どちらの「×」をクリックすればいいのかわかりませんよね?それは、SikuliXも同じです。なので、なるべく確実に動作する方法を選択します。


図13 画像が混乱した状態

 

もう一つ、やり方があります。ショートカットコマンドを利用するやり方です。メモ帳が画面の一番上にあり選択されている状態(アクティブになっているといいます)でキーボードのAltキーとFキーを同時に押します。するとメニュー「ファイル」をクリックしたのと同様、ファイルのメニューが開きますね。次にXキーを押すと、メモ帳は閉じます。

これを同じ動作をSikuliXにさせればいいのです。この方法が一番確実です。別のページで詳しく説明するので、ここでは紹介だけにしておきます。

このように、同じ操作をするのでも複数の方法があります。いろいろなやり方があるんだ、というのだけ知っておきましょう。正解はないので、楽しく謎解きする気持ちで気楽にいきましょう!

 

18行目にコメントを入力しておきましょう。「#メモ帳を終了する」と入力します。

さて、メモ帳の終了は、「名前を付けて保存」で行った方法とほぼ同じことをやります。SikuliXの開発画面のコマンドリスト「click」をクリックし、キャプチャーモードになったら、メモ帳の「ファイル」を範囲選択します。これで、「ファイル」をクリックするプログラムが自動生成されます。

次に、もう一度、SikuliXの開発画面のコマンドリスト「click」をクリックし、キャプチャーモードに移行する前に素早くメモ帳の「ファイル」をクリックします(図14➊)。

キャプチャーモードになったら、「メモ帳の終了」を範囲選択しましょう(図14➋)。キャプチャーモードへの移行する時間が短すぎて、上手くメニュー操作ができないときは【Memo】環境設定の変更を参照してください。


図14 メモ帳の終了をキャプチャー

 

実行してみましょう

ここまでのプログラムを振り返ってみましょう(リスト4)。そして、SikuliXのプログラムを上書き保存して(Ctlキー+Sキーで保存できます)、実行しましょう。


リスト4 現在のプログラム

 

SikuliXが動いて、結果としてデスクトップ上に「Hello2.txt」が作成されます(図15)。うまく動きましたか?


図15 デスクトップ上にHello2.txtが保存された状態

 

もう一度実行しましょう

では、一息ついたところで、もう一度SikuliXを実行してみてください。今度はすでにHello2.txtがデスクトップ上にあるので、図16のダイアログが出てきて、プログラムはここで失敗しますね?


図16 名前を付けて保存の確認ダイアログ

 

21行目のclick(ファイルの画像)までは動くのですが、22行目のclick(メモ帳の終了の画像)が現れないのでエラーとなってしまうんです。メッセージウィンドウに「[error] FindFailed…」と赤文字で書かれています。FindFailedとは「画像が見つからなかったよ」ということです(図17)。これを回避するようプログラムしましょう。


図17 エラーを確認

 

ダイアログが出たときだけ、上書き保存するようにしましょう

Hello2.txtがすでに存在し、「名前を付けて保存の確認」ダイアログが出たときだけ上書き保存するようにプログラムしましょう。ちょっと難しくなりますので、ゆっくりやっていきましょう。

19行目にカーソルを持っていきEnterキーを押し、一行段落をあけます。20行目に「#名前を付けて保存を確認が出たときは上書きする」とコメントを入れて、Enterキーを押します。今、カーソルは21行目にありますね。

21行目にリスト5の内容を打ち込んで、Enterキーを押してください。 次の22行目はカーソルが右にずれて点滅しています。通常、スペース4つ分右にずれているはずです。これを「インデント」と言います。

if exists():

リスト5

 

【Program】if文

「if」とは「もしも」というプログラムです。「exists」とは「存在する」という意味ですので、つなげると「もしも、存在していれば」ということになります。そのあとの()の中は、後で入れるのですが、何らかのキャプチャー画像が入ります。

つまり、この文は「もし、()の中の画像が存在すれば、これから下に記述する内容を実行しますよ」というプログラムです。同時に「もし、()の中の画像が存在しなければ、下に記述する内容は実行しません」ということにもなります。

【Point】条件分岐

これがプログラムの基礎2つ目の「条件分岐」です。

条件により、実行される処理が変わるときに使います。条件分岐の文法について詳しく知りたい方は以下の記事をご覧ください。

参考SikuliXにおける条件分岐(IF文)の書き方【エンジニア向け] 

 

22行目からプログラムを続けます。インデントしていますね。その状態でコマンドリスト「click」をクリックし、「名前を付けて保存の確認」ダイアログの「はい」を選択します。選択し終わるとリスト6のようになります。


リスト6

 

次に、「名前を付けて保存の確認」ダイアログのヘッダー部分が存在したら「はい」をクリックする、というプログラムを完成させます。21行目の「if exists()」の()の間にカーソルを合わせます(図18❶)。この状態でリボンにある「スクリーンショットを撮る」をクリックします(図18❷)。


図18 スクリーンショットを撮るをクリック

 

画面がキャプチャーモードに移行しますので、「名前を付けて保存の確認」ダイアログのヘッダー部分を選択します(図19)。これで、「名前を付けて保存の確認」ダイアログが見つかったら、「はい」をクリックする、見つからなかったら何もしない、という条件分岐プログラムが完成しました。


図19 スクリーンショットを撮る

 

さらに、もう一度実行してみましょう

プログラムはリスト7のようになっているはずです。できていれば、SikuliXを保存します。


リスト7 現在のプログラム

 

まだ、メモ帳の「名前を付けて保存の確認」ダイアログが出たままですので、「はい」をクリックしてダイアログを閉じ、Hello2.txtを終了させてください。デスクトップ上にHello.txtとHello2.txtが見えている状態で、SikuliXの「実行」をクリックします。

今度はエラーが出ずに完了しましたね!?

 

さらにさらに、もう一度実行してみましょう

今度はHello2.txtを削除して、もう一度実行してください(図20)。この場合は、「名前を付けて保存の確認」ダイアログが出てきませんが、問題なく完了しましたね。しっかりと条件分岐できています。


図20 Hello2.txtを削除する

 

まとめ

このページではプログラムの基本構造の2つ目「条件分岐」について学びました。条件分岐を使う機会は本当にたくさんあります。この条件分岐プログラムのことを「if文」と呼ぶことも多いですよ。覚えておいてください。

これで、「順次処理」と「条件分岐」という2つの基本構造がわかりました。プログラムの基本構造はあと一つだけです!

でも、次回は一回寄り道します。最後の基本構造を学ぶために必要な知識、「変数」について学びますよ!

 

関連ページ

Topトップページ

SikuliXで学ぶRPA超入門【豊富な画像と丁寧な説明です】

 

<<前のページ

【RPA超入門】簡単なロボを作ってRPAの威力を実感しよう

 

>>次のページ

【RPA超入門】ファイル名に毎回変わる日時を入れて保存するには

研修のご依頼
RPAやプログラミングの研修講師をお請けしています。著書「オープンソースで作る!RPAシステム開発入門」をお読みいただいた法人様に対する教育/サポートもお請けできます。

 

質問/お問い合わせ
RPAや自動化全般についての疑問・質問・お仕事の依頼などはお問い合わせフォームよりお気軽にお問い合わせください。