Mautic ContactsのCSV Importを自動化する

これは、[Mautic Advent Calendar 2017](https://adventar.org/calendars/2303) 18日目です。

# Sikuli
[Sikuli](http://www.sikuli.org/)は、オープンソースのUI操作自動化ツールで、OpenCVによる画像認識技術をベースにできています。2017年に流行った言い方では、RPAのうちのRDA(Robotic Desktop Automation)に相当するツールです。

画面操作を定義し、バッチ処理で定期的あるいは手動で実行することで、設定した作業が自動処理され、定型業務におけるコスト削減を促進します。

![sikuli-screenshot.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/e9e8bd4b-136c-cd19-efe9-38aaa9ef50b9.png)

システム開発でありがちな、とりあえずCSVで出力して別システムの受け渡しは「運用でカバー(SIerがユーザー企業を説得する魔法の言葉)」という手動処理を自動化することに最も役立ちます。

# CSVインポートサンプルの実行
今回は、タイトルの通り、MauticにおけるコンタクトのCSVインポートを自動化します。殆どの方は手動で実施されていると思いますし、外部システムのデータ連携で、ここだけ手動になり、自動化の壁になっています。

[こちら](https://app.box.com/s/pjlaouqp0gywe74gey6k1uycw19lotsp)からサンプルをダウンロードすることができます。
サンプルは、Windows 10 を前提に作成しました。Sikuli自体はJavaなのでどこでも動きます。

<前提>

- 実行環境：Windows10
- 使用アプリ：Firefox
- Mautic 2.12を使用
- Sikuli 1.1.1 を使用
- Sikuliは、Cドライブ直下に、sikuliフォルダを作成し、その中にインストール
- Cドライブ直下に、mautic フォルダを作成し、mauticフォルダ内に、contacts_import.csvを用意すること
 - contacts_import.csv は、サンプルとともにダウンロードすることができます。

サンプルのファイル名は、「mautic-csv-import.skl」で、Sikuli IDE → 「ファイル」 → 「開く」 で読み込んでください。読み込み後、Sikuli IDEの画面で、お使いのMautic URLやMauticにログインするためのユーザー名、パスワードを適宜入力してください。

動作確認するには、Sikuli IDE内の「実行」をクリックします。
バッチ処理するには、Sikuli IDEで、「ファイル」 → 「実行ファイルをエクスポート」を選び、.skl形式で出力します。出力した.sklファイルをコマンドプロンプトで実行します。
実行には、「runsikulix.cmd」のパス -r .sklファイルのパス を入力し実行します。

```
例 C:\sikuli\runsikulix.cmd -r C:\Users\PCユーザー名\Desktop\mautic-csv-import.skl
```

サンプルを実行するとお使いのMauticに、contacts_import.csv のデータが登録されたと思います。
定期的に実行したい場合は、Windows環境の方は「タスクスケジューラ」を使用します。

# Sikuliのインストール

インストール前に、Java環境を導入しておきます。
http://www.sikuli.org/ にアクセスし、「SikuliX - Learn More and Get it」をクリックします。
画面右側の「Get Version」をクリックします。
画面内の「sikulixsetup-x.x.x.jar」をクリックし、ダウンロードします。2017年12月18日現在は、sikulixsetup-1.1.1.jar でした。
Cドライブ直下に、sikuliフォルダを作成し、ダウンロードした「sikulixsetup-x.x.x.jar」を移動、移動後、「sikulixsetup-x.x.x.jar」をダブルクリックしてインストーラーを起動します。

(1) この画面では「はい」をクリック。
![sikuli_install_1.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/7127508b-bf8e-4de0-0aaf-72fdaede6ffe.png)

(2) Pack1を選択。言語選択はPython。前述のサンプルで使用した環境は、Pythonを入れています。Pack1にチェックを入れ、「Setup Now」をクリック。
![sikuli_install_2.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/fb287ba4-6091-f2cd-8330-51140ed54f28.png)

(3)「はい」をクリック。
![sikuli_install_3.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/3a08db8d-f278-ed1e-e164-5d893f9f21c4.png)

(4)インストールが始まります。途中、Jythonのインストール確認画面が表示された場合は、「はい」をクリック。
![sikuli_install_4.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/378a45fb-d0ee-c9c7-394c-e90382d0d420.png)

(5)「Have fun!」のメッセージが出れば終了です。
![sikuli_install_5.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/5d1062da-733f-0465-f280-d97ed7f68adf.png)

# Sikuliの起動とスクリプトの作り方

Cドライブ直下のsikuliフォルダにインストールしましたので、sikuliフォルダにアクセスし、「runsikulix.cmd」をダブルクリックしてSikuli IDEを起動します。Sikuli IDE上で、自動化のためのスクリプトを作成します。

画面左側から各処理を選択し、スクリプトを作成します。
サンプルでは、最初にFirefoxを起動し、Mautic環境にアクセスするようにしたいので、最初に「ファイル名を指定して実行」画面を呼び出す処理を記述しています。
![1_sikuli_script.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/8489099f-390f-8e50-e39c-e12ec44fd6dd.png)

次に、「ファイル名を指定して実行」画面で、firefox.exe URL と入力するために、exsitsをクリックして対象領域をキャプチャします。
![2_sikuli_script.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/d541fa3a-6a4a-62e6-6f51-5a26ce32fe26.png)

キャプチャし、キャプチャ領域に、firefox.exe URLを入力するために、pasteを使用します。ついでにpasteの処理後に、Enterキーを押す処理を加えます。
![3_sikuli_script.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/1c39cb1b-c5dc-28e2-0041-d26a7e1c342c.png)

ここまでを実行しますと、Firefoxが起動し、Mauticログイン画面が表示されるまでを自動化することができます。
以後、先ほどのexsits処理と同じ要領で、スクリプト定義を続けます。サンプルでは、キャプチャした範囲が表示されるまで最大◯秒待つ、「wait」やキャプチャ領域を見つける「find」、キャプチャ領域をクリックする「click」「doubleClick」を用いて作成しています。

# まとめ

MauticのCSVインポートは、手動処理なので面倒になり、以前から自動化したかったので試してみましたところ、割りと上手く行ったように思えます。
自動化はWebブラウザだけなく、様々なアプリケーションに適用できますので、日々の定型業務に応用してみると良いでしょう。多くの業務を抱えている人は特に。


サンプルが動かない等はコメントか、メール希望であればプロフィール(@kolinz)に掲載しているFacebookあるいは、Twitter経由で連絡先を教えていただければ対応します。