Mac標準のAutomatorでRPAに入門してみる

# はじめに
あちこちで「RPA」という言葉を聞くのですが、まだやったこないので試してみたい、というのがきっかけです。
どの RPA ツールにしようかと調べ始めたところ、Mac には標準で Automator というツールが入っていて、これで RPA のようなことができるとのことなので、触ってみました。
OSは、macOS Monterey 12.0.1 となります。（Windows の方ごめんなさい）

# Automator 起動
標準で Mac にインストール済みなので、アプリケーション → Automator から起動します。
種類は「アプリケーション」を選択します。（アプリケーションとして実行可能となる）
以下の画面が表示されるので、アクションの一覧からやりたいことを選択して、ワークフローに追加していく流れとなります。
できるアクションが一覧で表示されているので、わかりやすいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530064/0a870d85-3fae-1cc9-67f6-4861c0138065.png)

# アクティビティモニタを起動してスクリーンショットを撮る
色々なアクションがあるのですが、今回はアクティビティモニタという Mac 標準のアプリケーションを起動し、画面のスクリーンショットを撮ってアプリケーションを終了する、という処理を自動化してみます。

## スクリーンショットのワークフロー作成
* 「アプリケーションを起動」を追加
 * その他 → ユーティリティ → アクティビティモニタ を選択
* 「スクリーンショットを撮る」を追加
 * 保存先のファイル名を設定
* 「アプリケーションを終了」を追加
 * その他 → ユーティリティ → アクティビティモニタ を選択

ワークフローを作成したら、アプリケーションとして保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530064/804d85f6-b094-f25d-98e8-8dc1a446c9c2.png)

## Automator でスクリーンショットを撮るための環境設定
Automator でスクリーンショットを撮るには、セキュリティ設定が必要です。
システム環境設定 → セキュリティとプライバシー → プライバシー → 画面収録 で、「Automator」を追加してチェックします。（カギも解除）
さらに、先ほど作成したアプリケーション「アクティビティモニタ_スクリーンショット」も追加してチェックします。
Automator からスクリーンショットを実行する場合は、一旦再起動すると設定が有効になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530064/c2f1e66e-bd11-0c52-6186-a6c739cd552d.png)

## スクリーンショットのワークフロー実行
Automator の右上にある実行ボタンを押下することで、Automator 内からワークフローを実行することができます。
作成したアプリケーション（ファイル）を実行してもOKです。（アプリケーションとして実行）
実行すると、以下の画像のように、指定した場所にスクリーンショットが保存されます。
（CPU の履歴グラフなどが表示されているのは、アクティビティモニタを前回起動した時に表示していたためです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530064/cfcc15a5-3c55-8171-7779-c07fca4a9735.png)

# AppleScript でブラウザ操作を自動化する
もう1つの RPA の用途として、ブラウザ操作をしてみたいと思います。
Automator には「指定された URL を取得」と「Webページを表示」というアクションがあり、これらを使うことでブラウザで Web ページを開くことができます。また、ページの内容を取得するようなアクションなども用意されています。
今回はそれらの用意されたアクションを使うのではなく、AppleScript（および JavaScript）を使ってブラウザ操作をしてみます。

## ブラウザ操作のワークフロー作成
Automator のアクションから「AppleScript を実行」をワークフローに追加すると、AppleScriptを記述できます。
今回のスクリプトでは、以下のことを自動的に行います。

* Safariを起動
* 某I社のホームページのニュースで、一番上のリンクをクリックして表示（新しいタブ）
* 某天気のホームページで、指定した郵便番号で検索した市区町村のピンポイント天気のページを表示（新しいタブ）

※以下のスクリプトでは、本来の URL は伏せておきます。

```AppleScript:
tell application "Safari"
	activate
	open location "https://www.iiii.co.jp/news/"
	delay 5
	do JavaScript "document.querySelector('ul.list-news-01 a').click();" in document 1
	delay 5
	open location "https://weather.yyyy.co.jp/weather/"
	delay 5
	tell application "System Events"
		keystroke tab
		keystroke tab
		keystroke "160-0023"
		key code 76 -- Enter
	end tell
	delay 5
	do JavaScript "document.querySelector('div.serch-table a').click();" in document 1
end tell
```

記述したら名前を付けて保存します。

なお、AppleScript のアクションは他のアクションともちろん併用できますので、できることの幅が広まります。

## Safari の JavaScript 許可設定
Automator から Safari 上で JavaScript を実行するために、以下の設定を行います。
* Safari の環境設定 → 詳細 → 「メニューバーに"開発"メニューを表示」にチェックして、開発者ツールを表示できるようにします。
* Safari の「開発」メニューから、「AppleEvent からの JavaScript を許可」にチェックします。

## ブラウザ操作のアプリケーションのセキュリティ確認
作成したアプリケーション（ファイル）を実行すると、以下のようなダイアログが表示されるので、「OK」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530064/c99cb30c-c129-f8a7-75f0-765a99372d8b.png)

さらに、「System Events」についても同様のダイアログが表示されるので「OK」を押下します。
（Automator から実行した場合も、同様のダイアログが出たかもしれません。その場合も「OK」を押下します）

## キー入力するための環境設定
Automator でキー入力できるようにするには、セキュリティ設定が必要です。
システム環境設定 → セキュリティとプライバシー → プライバシー → アクセシビリティ で、「Automator」を追加してチェックします。（カギも解除）
さらに、先ほど作成したアプリケーションも追加してチェックします。

## ブラウザ操作のワークフロー実行
ここまでの設定をした上で、Automator の右上にある実行ボタンを押下、もしくは作成したアプリケーション（ファイル）を実行すると、Safari が想定通りに操作されるはずです。

# おわりに
今までに BeautifulSoup や Selenium を使った Web スクレイピングはやったことはあったのですが、そこまでのプログラミングが必要ないブラウザ操作や、それ以外の Mac の操作もできる Automator は、無償で気軽に使える自動化ツールですね。
カレンダーと組み合わせてスケジュール実行することもできるみたいですし、今回はお試しでしたが、もっと実用的なものも作ってみることができそうです。