RPAはアプリケーションのひとつですが、業務システムやOAツールなどのアプリケーションを、データや各種処理を通じて横断的につなぐ役割を果たします。
ミドルウェアは垂直方向での共通基盤ですが、RPAでは水平方向に横断的にアプリケーションをつなぎます。
RPAは次の3つの機能があります。
- 定義
ロボットの処理を定義する。 - 実行
定義された処理を実行する。 - 運用管理
ロボットの稼働状態、実行結果の取得、スケジュールやプロセスの管理する。
RPAはアプリケーションのひとつですが、業務システムやOAツールなどのアプリケーションを、データや各種処理を通じて横断的につなぐ役割を果たします。
ミドルウェアは垂直方向での共通基盤ですが、RPAでは水平方向に横断的にアプリケーションをつなぎます。
RPAは次の3つの機能があります。
Appクラスは、アプリケーションの起動やフォーカスの設定、ウィンドウを閉じる操作等の機能を提供します。
コンストラクタは下記の通りです。
コンストラクタ | 説明 |
---|---|
App() | 引数なしのコンストラクタ |
App(name) | アプリケーション名や実行ファイル名を指定したコンストラクタ |
フォーカスを持っているウィンドウの領域は次のメソッドで取得できます。
1 | r = App.focusedWindow() |
指定したアプリが複数ウィンドウある場合、Appオブジェクトを取得しそのオブジェクトのwindow(n)メソッドを使います。
引数のnを省略するか0を指定すると最初のウィンドウを選択できます。
1 | myApp = App("chrome") |
Sikuliでは、一定時間が経過すると自動的に消えるダイアログボックスを作ることができます。
1 | res = Do.popup(u"10秒経過すると自動的に閉じるダイアログ", 10) # 第2引数が待ち時間(秒)です。 |
時間が経過しても操作しなかったときは、戻り値はNoneとなります。
ダイアログの種類は下記の表をご参照ください。
メソッド | ダイアログボックス |
---|---|
Do.popup | ポップアップダイアログ |
Do.popError | エラーダイアログ |
Do.popAsk | [はい]か[いいえ]をたずねるダイアログ |
Do.input | 1行入力ダイアログ |
ユーザの入力待ちで処理を止めたくない場合などに使用できるかと思います。
Sikuliでは、下記のダイアログボックスを表示することができます。
メソッド | ダイアログボックス |
---|---|
popup | ポップアップメッセージを表示します。[OK]ボタンのみです。 |
popError | popupと同様ですが、エラーを示すアイコンが表示されます。 |
popAsk | [はい]と[いいえ]の2つのボタンがあるポップアップメッセージを表示します。 |
input | 1行入力テキストのポップアップが表示されます。[OK]と[取消]のボタンがあります。 |
inputText | 複数行の入力テキストを持つポップアップを表示します。[OK]と[取消]のボタンがあります。 |
select | 複数の選択肢の中から1つを選ぶポップアップが表示されます。[OK]と[取消]のボタンがあります。 |
popFile | ファイル選択画面が表示されます。[OK]と[取消]のボタンがあります。 |
※[取消]ボタンをおした場合にはNoneが返されます。
プログラム側で領域を指定するのではなく、ユーザに範囲を選択してもらって領域を選択したいときがあります。例えば、OCR処理でテキスト化したい画面の範囲をユーザに選択させたいような場合です。
このようなときには、selectRegionメソッドを使います。
1 | r = selectRegion("ユーザに表示する文字列") |
selectRegionメソッドを使うと、SikuliX IDEで「Region」ボタンをクリックしたときのように画面全体がグレーアウトし、ユーザが範囲を選択できる状態になります。
ユーザが領域を選択したときは、その領域がRegionオブジェクトして返されます。
[ESC]キーを押してキャンセルしたときはNoneが返ります。
RPAは人間の目や手の動きを覚えて実行するものですが、どうやってRPAに手順を教えればいいでしょうか。大きく分けて教え方は次の3種類があります。
RPAを動かしておいて人間がパソコン上で教えたい手順を実行し、その手順をRPAに記録させ再生します。
プログラミングが不要なので最も手軽な方法です。しかし操作手順はいつも同じとは限らず、操作をかえることがよくあります。
記録した手順に判断をする処理を追加するなどしないと、実用に耐える操作手順が完成しないケースが多くあるのが実情です。
あらかじめ手順の全体像を、判断や分岐を含めて図示するのでレコーディング機能を使うよりは手間がかかります。しかしきちんと手順を教えることができます。
スクリプトの文法を覚える必要がないので比較的簡単ですが、大規模なフローチャートになると画面いっぱいに広がり入りきらなくことがよくあり、印刷する場合や手順を確認する場合に不便な面もあります。
スクリプトで1行ずつ手順を書いていく方法です。
スクリプトの文法を覚える必要があり、書く量が多くなる傾向にあり難易度は高めです。
細かく手順を設定することができるので、プログラミング経験者であればこれが一番おすすめです。
Sikuliでは、画像を指定してその画像と合致する箇所を見つけますがあまりに厳格だと、少しの違いで画像が見つからなくなります。
逆に寛容だと、似ているけれど違う部分がマッチしてしまう可能性があります。
そこでSikuliではどの程度のあいまいさまでを許すかを、類似度として設定できます。
類似度は、パターン設定ウィンドウの[マッチングプレビュー]から設定することができます。
0から1の範囲の設定値で、0に近づくほどあいまいさが増し、1に近づくほど厳格になります。デフォルトは0.7です。
Sikuliでは、場所を特定するオブジェクトが5種類あります。
頭文字をとって「PSRML」と表示されます。
clickメソッドやtypeメソッドなど、クリックやキー入力する機能の引数には、上記5種類のPSRMLオブジェクトのいずれでも指定できます。
しかし最終的に、クリックしたりキー入力するときは「座標」として扱われます。
この座標は、Locationオブジェクトとして管理されるのでLocationオブジェクト以外のオブジェクトが指定された場合は、Locationオブジェクトに変換されます。
次の処理では、①で存在するかどうかをチェックし②でその場所をクリックするという2つの処理で同じ画像のマッチングをしています。
1 | if exists("a.png"): # ① |
画像マッチングは時間がかかる複雑な処理のため、Sikuliでは同じ画像マッチングを避けるための工夫があります。それはgetLastMatchメソッドです。
getLastMatchメソッドは最後に画像マッチングしたときの結果を返します。
このメソッドを使うと先ほどの処理は以下のように記述することができます。
1 | if exists("a.png"): |
変更後のソースでは同じ画像が2つ登場することがないのでプログラムが見やすくなり、さらに処理速度も向上します。