Sikuli (SikuliX) + RubyでRPAことはじめ（何度もつまづいたけどちゃんとできたよ）

#Rubyでもできると聞きまして
SikuliXというフリーのRPAツールがあります。（[公式](http://www.sikulix.com/)、[ドキュメント](http://doc.sikuli.org/index.html)）
Sikuliの後継にあたるものらしいのですが、上記公式に

>SikuliX supports as scripting languages
>Python language level 2.7 (supported by Jython)
>running RobotFramework text-scripts is supported (see docs)
>Ruby language level 1.9 and 2.0 (supported by JRuby)
>JavaScript (supported by the Java Scripting Engine)

と、「Rubyでもコマンドが書けるぜ！」的なことが書いてあり、じゃあちょっとこれで遊んでみようかな、と思いました。[^1]

しかし、Ruby+SikuliXの導入記事って少ないこともあり、やってみると結構最初の設定段階ではまりました。そこでこの記事では同じようなことをやってみたい方のために、この方法でできたよ！というご報告をさせていただきます。

（特に日本語の記事が少ないですね。この界隈、Pythonに比べて多勢に無勢と言った感じなので、もっと増えてー！）

なお、筆者の環境はWindows 10です。

#まずはSikuliXのダウンロード
https://raiman.github.io/SikuliX1/downloads.html
にアクセスし、以下赤囲みにしてあるリンクから2つの.jarファイルをダウンロードします。[^2]
SikuliX用の好きなフォルダを作って、2つを同じところに保存しましょう。

![downloadsikulix.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617561/e0b75113-e546-8752-7eaf-6d6328ab4b36.jpeg)

#SikuliXが動くバージョンのJava (Open JDK)をダウンロード
Javaを既にインストールしている人はsikulixide-2.0.4.jarを動かしたくなるところですが、__一旦我慢__してください。2020年10月現在、最新のJavaではエラーになり、JRuby Interpreterだけ別の場所に移動するだけされてしまうようです（多分、移動すること自体は問題なく、以下の作業を続ければいいだけだとは思いますが、不安ならJRuby Interpreterをもう一度ダウンロードしてください）。

ここで、少し古いJavaをダウンロードしてきましょう。
https://jdk.java.net/archive/
SikuliXにはバージョン11.0.2がおすすめのようですので、探してダウンロードします。

![download_openjdk.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617561/1bab6054-d96b-9b8b-c643-99cedf0aeedd.jpeg)
zipは展開し、できたフォルダは自分のわかるところに置いておきます。私はCドライブ直下にしました。

#とりあえず起動してみる
コマンドプロンプトで__SikuliXをダウンロードしたフォルダ__に移動し、以下のコマンドを入力します。※但し、これは私のようにCドライブ直下にOpenJDKフォルダを配置した場合です。別の場所に置いた方は、それに従ってjavaのパスを指定してください。

```
C:\openjdk-11.0.2_windows-x64_bin\jdk-11.0.2\bin\java -jar sikulixide-2.0.4.jar
```

こうすると、先ほどのようにJRuby Interpreterがどこかに移動するのは同じ事ですが、今度はエラーが出ずにIDEが立ち上がってくれます。
![sikulixide1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617561/0d0a6b78-1638-73e3-6f78-59f0b8382078.jpeg)

しかし、__これではまだRubyスクリプトは動きません。__正確に言えばputs "Hello"ぐらいは動いてくれるのですが、肝心のSikulix用gemがJRubyにインストールできていないため、RPAらしいことはこのままではできないのです。

#gem "sikuli"をJRubyにインストール
そこで、JRubyインタプリタにgemをインストールしたくなるわけですが、そもそも、先ほどダウンロードしたJRubyインタプリタはどこに行ってしまったのでしょう？探してみたところ、以下に移動されていました。

C:\Users\（ユーザー名）\AppData\Roaming\Sikulix\Extensions

jruby-complete-9.2.0.0.jarが発見できると思います（バージョン番号は多少違うかもしれません。）

あとはこれにgemをインストールすればいいことになります。私はJRubyのgemというのがよくわかっていないのですが、[こちらのQ&A](https://stackoverflow.com/questions/8219563/installing-gems-on-jruby)を参考に、以下のようにしました。

- まず、JRubyのjarと同じ場所に適当なフォルダを作ります（私は上記参考と同じbiojrubyという名前にしましたが、どんな名でも構わないと思います）。
- そして、コマンドプロンプトでjrubyのjarと同じフォルダに入り、以下を実行ください。※jarのバージョンと作成したフォルダ名は適宜読み替えてください。

```
java -jar jruby-complete-9.2.0.0.jar -S gem install -i ./biojruby sikuli
jar uf jruby-complete-9.2.0.0.jar -C biojruby .
```
gem installで警告がいくつか出ますが、気にしなくてOKです。

確認してみましょう。

```
$ java -jar jruby-complete-9.2.9.9.jar -S gem list sikuli
```

これもいくつか警告が出ますが、バージョン番号とともにsikuliが表示されればOKです。

#環境変数にSIKULI_HOME
最後の仕上げです！
Windowsの環境変数の設定で、SIKULI_HOMEを加えてあげます。
（どうやらgem sikuli側がSIKULIの.jarを認識するのに必要らしい？これもStack Overflowの受け売りです…ごめんなさい）

![sikulihome.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617561/9027b032-b516-5e4d-a2c2-0dfbd397a027.jpeg)

#RPA実行
お待たせしました！いよいよ実行です。
コマンドプロンプトは開き直し、再度SikuliX側の.jarをOpenJDKで開きましょう。

```
C:\openjdk-11.0.2_windows-x64_bin\jdk-11.0.2\bin\java -jar sikulixide-2.0.4.jar
```

以下、画像で恐縮ですがスクリプト例を示します。この場合、

- デスクトップ上のEdgeブラウザのアイコンをダブルクリック
- 「新しいタブ」と同じ画像が表示された場合に、「abc」とキー入力する

という命令になっています。
 
![sikuliide.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617561/c596bd5e-f6c5-c883-102b-5a83447f78f0.jpeg)

アイコンなどはメニューの「スクリーンショットを撮る」などで簡単に挿入することができます。お好きなアイコンでお試しください。

完成したら、任意の場所に保存した後（.sikuliと付記されたフォルダが作られます）、実行ボタンをクリックすると…、

どうでしょう？ちゃんと動いたという方、おめでとうございます！

#あとは
https://sikulix-2014.readthedocs.io/en/latest/toc.html
あたりを参考にしながら、適宜Rubyに読み替えをどうするか調べていくことになると思う…のですが、やっぱり情報が少ない…。
というわけで、役に立ちそうなトピックがあったら、私自身これからもQiitaで取り上げていこうと思います。

#感想
今回、フリーのRPAとしてSikuliXを取り上げてみました。Rubyでできるというのがきっかけでしたが、結構環境構築だけで手間取ってしまいました。

参考にできる記事が少ないというのは置いておくとしても、仕事効率化のためのRPAにおいてこれはネックになるかもなあ、というのが正直のところです。今回は自宅で遊んでただけなのでいいですが、数十のPCに導入するだけでも結構手間になりそう。Jythonだとそんなこともないんでしょうか。

RubyでできるRPAなら、有償ですが[Roboware](https://roboware.jp/)といったものがあるらしく（いや、回し者じゃないですよ）、しっかり安定した動作を期待するならサポート面とか考えてもこういうところを検討したほうがいいってことになるかもですね。

むしろ、小さなチームでできることを考える場合はSikuliXが有効になってくるかもしれません。そこでJRubyが選択肢とする人が増えて、公式もドキュメントなどに力を入れてくれるようになるといいなあ、と、結局そこに行きつくのでした、


[^1]: 正確にはJRubyという、RubyスクリプトをJavaに変換して動作する環境を利用しています。SikuliXそのものはJavaで動いていますので。

[^2]: Jython interpreterと両方ダウンロードしてもいいというようなことが書いてありますが、これをやるとJythonのほうが優先されてJRubyが動かせませんでした。この際は結局一度アンインストールしてやり直すしかありませんでした。なお、アンインストールについては https://auto-worker.com/blog/?p=473 を参照下さい。