はじめに
[2019/05/29追記] SikuliXの動作確認についての最新の記事はこちらをご参照ください。
もともとSikuliX 1.1.0を使っていたので、実際には入れ換えたということになりますが、Java 8の最近のアップデート(Update 162)を行ったところ、実行中にExceptionが頻発するようになりました。
ちょうど、SikuliX 1.1.1が先月(2018年1月)登場したようなので、インストールしてみることにしました。
ところで、SikuliXって何ですか?
開発者のサイトの記述によると、Sikulixを使うと、コンピュータの画面に表示されているものすべてを自動化することができるそうです。具体的にはGUIの操作を自動化するための開発環境(IDE)や開発言語が含まれています。
それで、そのIDEなんですが、GUIの操作を記述する方法がなかなか斬新で、「画面のスクリーンショットの一部を切り取ってきて、それを開発ツール上に貼り付けてGUIの操作手順を記述する。」のが(かなりざっくりとした言い方ですが)、基本的な操作手順の記述のスタイルです。なお、画面のスクリーンショットと表示されている画面との間のマッチングはOSの内部の機能を利用せずにOpenCVを使って行うことと、その他の実装についてもOSに依存しない実装になっているので、WindowsでもLinuxでも使用することができます。
IDEで操作手順を記述するとJythonのスクリプトが作成されるので、そのスクリプトをゴリゴリ手で編集することで、画像ファイル名を変更したりすることも不可能ではないですが、スクリーンショットの一部を取得する機能が開発ツールに組み込まれていますので、画像のファイル名を意識することは通常あまりないと思いますし、深いプログラミングの知識がなくてもスクリプトの開発を行うことができます。したがって、2018年現在かなり流行っているRPA(Robotic Process Automation)のためのツールとしても利用できます。
インストール
インストールは以下の手順で行います。
- Javaをインストールしていない場合には、SikuliXのインストールの前にインストールしておきます。1.1.0のときにはJDKを使ってIDEを起動していましたが、JREでも動かせるようです。
- インストール先のディレクトリを作っておきます。
- SikuliXのサイトにアクセスし、インストーラのJARファイル(sikulixsetup-1.1.1.jar)をダウンロード(ページ中ほどの「Download files for this release」にリンクがあります。)して、手順2で作ったディレクトリの下に保存します。
- コマンドプロンプトから以下のコマンド(Javaのバージョンは変わる場合がありますので、適宜読み替えてください。)を実行します。するとインストールが開始されます。
> “c:\Program Files\Java\jre1.8.0_161\bin\java.exe” -jar sikulixsetup.jar
- インストールを行う機能の選択画面が表示されますので、必要そうなものを選択します。
- インストールが始まると、手順5で選択した機能に対応したJARファイルがダウンロードされて、簡単な動作確認テストが行われます。
- 手順2で作成したディレクトリにSikuliX 1.1.1がインストールされます。
使用例
ショートカットを作る。
WindowsのPCにSikuliXをインストールすると、runsikulix.batという名前のファイルがインストール先のディレクトリの下に作成されます。
しかしながら、このまま使うとなるとコマンドプロンプトから起動することとなってしまいます。それでは、イマドキのGUIのツールにしてはおしゃれじゃないので、デスクトップにショートカットを作っておきます。
おしゃれなショートカットが作成されました!! (`・ω・´)
とりあえず、なんか書いてみる。
とりあえず、GIMPを使って全画面のスクリーンショットを取得するスクリプトを書いてみます。
スポンサーリンク
こんな感じになります↓
スクリプト及び貼り付けたイメージはスクリプトに対応したフォルダ(ディレクトリ)に保存されますので、保存先の指定や保存したスクリプトの呼び出しはフォルダ単位になります。
「なぜGIMPの自動操作なのか?」と思われる方もいらっしゃるかもしれませんが、インストール先のPCは画面が狭いので、GIMPのようにウィンドウがたくさん表示されるアプリケーションを使う場合には、よく使う機能に関連した操作を自動化しておくと、「あのウィンドウはどこに行ったっけ?」と思いつつ目的のウィンドウを探すを繰り返すことによる精神的なダメージを減らすことができます。
スクリプトの書き方のコツのようなもの。
スクリーンショットから切り出した画面と現在表示されている画面との間のマッチングにはOpenCVを使用しています(よって、処理は画像処理をするわりには高速ですが、マッチング率の設定によってはうまく認識できないこともあります)。
しかし、以下のようなケースではポップアップメニューを認識できずにそこでエラーが発生して処理が終了してしまうことがあります。
「メニューからある項目を選択後に表示されるポップアップメニューから別の項目を選択する。」
これは、ポップアップメニューが表示されるのに時間がかかる場合があり、表示の前にOpenCVによるマッチング処理が実行されてしまう場合があるためです。このようなときには、ポップアップメニューが表示されていないとみなされて処理が終了してしまうことがありますので、以下のようにwait文を挿入するとポップアップメニューの表示を認識させやすくすることができます。
動画作りました。
ということで、インストールと動作例を収録した動画を作ってみました。御用とお急ぎでない方はご覧いただけると幸いです↓
まとめ
仕事でも何かとGUIの開発及びテストを行う機会が多いですが、大量のテストを正確にこなす必要があるので、SikuliXが使用できる場面はかなりあります。
したがって、SikuliXには公私において大変お世話になっております。OSに依存せず、かつ正確にGUIの操作が再現できるのは何かとおっちょこちょいな管理人にとっては非常に心強いです。
この記事は以上です。
References / 参考文献
おまけ
SikuliX-1.1.2の記事を書こうかな… と思っているうちにいつの間にか1.1.4が登場していました。
1.1.4は2019年5月現在nightly buildのみが公開されていますが、一応動作はするようですので、インストールの方法や使用感についての記事を書いてみました。
御用とお急ぎでない方はご覧いただけると幸いです。🐼
リンクはこちらです。
この記事は以上です。