RPAロゴ
ここでは、Windows10に標準で入っている「電卓」アプリの操作を自動化する場合を例にして、操作フローの見える化の説明をします。

■スクリプトコードの関数化
画面の操作をスクリプトにするときは、最初から最後まで続けてだらだらとスクリプトを書くのではなく、独立した操作の単位で関数化する(名前を付ける)ようにします。そうすることで、スクリプトコードが読みやすくなります。読みやすくしておけば、操作手順が変更になったときにスクリプトを修正する際に楽になります。ですから、スクリプトを作成するときは、独立した操作の単位で関数化することを常に気にかけるようにしましょう。
「電卓」を開くスクリプト、閉じるスクリプトは、このように書くことができます。
見える化-2
「電卓」を開くスクリプトにOpen_Calc、閉じるスクリプトClose_Calcという関数名を付けています。Sikuliで使えるスクリプト言語にはPythonやRubyがありますが、ここで使っているのはPythonです。残念ながら関数名に漢字は使えないので、半角英数字を使います。
※ここで示しているコード例は、Pythonのコーディング規約に従っていないところがありますが、ご了承願います。コーディング規約については、Python関係の他のサイトを参照してください。

「電卓」を開いているときに、計算モードを関数電卓に変更する操作のスクリプトも作ってみましょう。計算モードを変更する場合にクリックする位置を赤枠で、操作の流れを⇒で示しています。
見える化-1
見える化-3
スクリプトを関数化しておくと、関数を呼び出すだけで複雑な操作を行うことができます。①「電卓」を開いて、②関数電卓に変更、③「電卓」を閉じる、という一連の操作を関数を使って記述するとこうなります。
見える化-4
関数の右側に記述している「#」以降はコメントです。スクリプトコードを見ただけで何を行っているのか分かるように、コメントを付けるようにしましょう。

スクリプトコードを関数化することで読みやすくし、スクリプトコードにコメントを付けることで理解しやすくする方法について紹介しました。次に、操作シナリオを日本語で記述する方法について紹介します。

■操作シナリオの日本語化
Sikuliには、RobotFrameworkというソフトウェアがバンドルされています。RobotFrameworkを使うと、操作のシナリオを日本語で書いて、次々に操作を実行することができるようになります。
(1)シナリオ例(その1)
見える化-5
「*** Test Cases ***」の「操作シナリオ1」の中に6つの操作が書いてあり、「*** Keywords ***」の下には操作とスクリプトコードとの対応付けが書いてあります。
「操作シナリオ1」を実行すると、その中の「電卓を開く」がまず処理されます。「*** Keywords ***」の中で「電卓を開く」は「Open Calc」と紐づけてあるので、具体的には「Open Calc」が呼び出されます。
「Open Calc」は、Sikuliスクリプトコードをクラスライブラリ化した「OperationCalcLibrary」のメソッドです。前述の「■スクリプトコードの関数化」で紹介したスクリプトを少し手直しするだけで、クラスライブラリ化することができます。クラスライブラリ化したスクリプトコードがこれです。
見える化-6
(2)シナリオ例(その2)
もう少し複雑なシナリオの例です。表示する電卓モードを選択する操作のメソッド「Require_Mode」をSikuliのスクリプトに追加し、キーワードの中で「表示する電卓モードの入力を要求する」と紐づけています。
見える化-7
さらに「*** Settings ***」の中の「Test Setup」に「電卓を開く」を、「Test Teardown」に「電卓を閉じる」を設定しました。「Test Setup」に記述した操作は、すべてのシナリオのはじめに、「Test Teardown」に記述した操作は、すべてのシナリオの終わりに実行されますので、それぞれのシナリオの中にこの2つの操作の記述が不要になります。
(追加したスクリプトはこちら)
見える化-8
(3)シナリオの実行
シナリオの実行をするための数行のコードが必要です。
見える化-9
【まとめ】
操作シナリオを日本語化するには、①Sikuliのスクリプトコードをクラスライブラリとして作成する。②操作シナリオを日本語で記述して、シナリオの中で使うキーワードとSikuliのクラスライブラリとを紐づける。③シナリオを実行するコードを用意する。
【補足】
SikuliにRobotFrameworkがバンドルされたメリットについては、以下のチュートリアルが参考になると思います。(2分秒30あたりからRobotFrameworkの話をしています。)

[8]他のツールとの連携< >[10]処理の分岐