MacBookのGUI操作をAutomatorで記録して自動化する
OSX Leopardになり、Automatorには記録ボタンが装備された。このボタンを押すことによって、デスクトップ上での出来事が、マウスやキーの操作として記録できるようになったのだ。マウスやキーのイベントをそのまま記録するので(GUIスクリプティング方式)、そのアプリケーションがAutomatorに対応しているかどうかに関わらず、理想的にはすべての操作が忠実に記録される!
ということのようだが...理想と現実には常にギャップがあるものだ。自分のMacBook環境で試した限り、Automatorも例外ではなく、記録ボタンはまだ理想的に機能しているとは言えない。しかしながら今後、理想的に機能するようになった場合、自分スペシャルな素晴らしい操作環境を、コーディングなしで、誰もが簡単に作ることができる素晴らしい技術だと思う。
現実を知る実験
メニューバー左側の文字メニュー操作
- アップルメニュー >> システム環境設定... を記録して、再生してみる。
- 記録直後の保存前のワークフローで1回目の実行は、正常に再生されるが、
- 保存したワークフローや2回目以降の実行は、うまく再生されない。
- 何故か、1行ずれたり、1列となりのメニュー操作として再生されてしまう...。
メニューバー右側のアイコンアイテムの操作
ショートカットキーの操作
- 正常に記録できるものと、できないものがあった。
-
- 正常に記録できるショートカットキー
- 例:command-C・V(コピー・ペースト)
- 例:control-command-,(システム環境設定...)(自分で設定したショートカット)
- 正常に記録できるショートカットキー
-
- 記録できないショートカットキー
- 例:option-command-D(Dockの表示/非表示を切替)
- 例:shift-command-3(スクリーンショット)
- 記録できないショートカットキー
Dockの操作
- Dockに表示されているアイコンをクリックしてみる。
- 操作はちゃんと記録された。
- しかし、再生した時にDockが見えない状態だと、記録した時点のDockアイコンの位置をクリックする操作が再生されるだけなので、目的の操作にならない。
- Dockアイコンの位置が起動中のアプリケーションの増減でズレてしまっても、目的の操作にならない。
ウィンドウの操作
-
- アクティブな(最前面の)ウィンドウに対しては、マウスで自由に操作できた。
- しかし、目的のウィンドウの移動は記録できなかった。
- 再生した時に目的のウィンドウの位置が動いてしまうと、マウスクリックの位置もズレてしまうので正常に機能しなくなる。
- 再生した時に見えているウィンドウに対してのマウス操作になるので、ウィンドウの重なり順序が違っても、正常に機能しなくなる可能性がある。
このように、ちょっとした条件の違いで思い通りに動かない事態に陥ってしまう。
理解と予想
以上の結果から...
- 多くの場合、Automatorはクリックした位置を単純にデスクトップ上の座標として記録するようだ。
- ドラッグやドロップは、クリックしただけの選択操作になってしまう。
- Spacesの何番目のスペースかなども無視される。
- 記録したスペースと実行するスペースが違っても、正常に機能しなくなってしまう。
- Dockが非表示でも、以前Dockが表示されていた位置をクリックする操作だけが再生されてしまい、正常に機能しない。
- つまり、操作を再生した時に、そこに見えているオブジェクトに対しての操作になるのだ。
- ショートカットキーが実行される環境によっては、Automatorにそのキー入力が届く前に処理されてしまうのかも。
- その結果、記録できないショートカットキーになってしまうのかもしれない。
- メニューバーがまともに操作できないのは何故だろう?謎だ...。
便利に利用するための作戦
正常に動作する条件というのは限定されるけど、以下のことに注意すれば、現状でもそれなりに役立つワークフローになるかもしれない。
- 操作するウィンドウを事前にアクティブにする。
- 操作するウィンドウをアクティブにした状態で実行する。
- AppleScriptでアクティブにする。
- Dockやウィンドウをクリックする操作でアクティブにする。
- 操作するウィンドウが常に同じ位置に存在するように設定する。
- 常にウィンドウを最大化した状態で実行する。(最大化しておけば位置が動くことはないので)
- AppleScriptでウィンドウの位置やサイズを設定する。
- Dockを利用する時は、常に表示する設定にする。
- AppleScriptでDockを表示する。(option-command-Dは記録されないので)
- 常に同じ(Spacesの)操作スペースで実行する。
- ショートカットキー中心の操作をする。
- ショートカットキーの操作がちゃんと記録されれば、そのキー操作は環境に左右されずに、かなり確実に再生されることに気付いた。
- マウス操作ではNGだった以下の状況でも問題なく再生された。
- 対象のアプリケーションがアクティブでなくてもOK。
- 操作対象のウィンドウと異なる(Spacesの)スペースで再生してもOK。(複数のウィンドウが開いている場合は、重なり具合が問題になりそうだが...。)
利用例
以上のことを踏まえて、記録ボタンを利用したワークフローを実際に作ってみた。
ゲストアカウントのトラックパッドのシステム環境を設定する
- ちょっとしたコツ
- スライダーの設定は、つまみをドラッグせずに、目標のメモリをクリックして設定することで、正しく操作が再生された。
- システム環境設定については、操作を再生する時にウィンドウの位置が動いても、スライダーやチェックボックスを正しく設定できた。
- 再生速度を10倍速にすると、素早い操作で気持ち良く処理してくれる。
- 上記では、Dockをクリックして、さらに目的のシステム環境設定アイコンをクリックしてトラックパッドの設定を開いているが、
- その方法ではDockアイコンの状態や、既にシステム環境設定が開いている場合には正常に動作してくれない...。(ゲストアカウントのログイン直後は常に同じ環境なので、これでも問題ない。)
- 以下のようにAppleScriptを利用してトラックパッドの設定を開くようにすると、環境に左右されず正常に動作するようになった。
on run {input, parameters} (* Your script goes here *) tell application "System Preferences" activate set current pane to pane "com.apple.preference.trackpad" end tell return input end run
-
-
- ベストな解決策は、システムデフォルトのトラックパッド設定を変更できれば良いのだが、その方法がわからないので。
-
webページで繰り返す手順をワンクリックで実行する
- Firefoxにはアドオンで、iMacrosというwebページ上の操作を自動化する素晴らしい環境があるが、
- Automatorを利用すれば、同じようにSafariでもwebページ上の操作を自動化できそう。
- 簡単な例として、銀行のwebサービスに自動ログインする手順を記録してみた。
- 銀行のwebサービスって、ブラウザのパスワード自動入力に対応していなかったり、余計な入力(パスワードを変更してくださいとか)を要求してきて毎回面倒なのだ。
- ちょっとしたコツ
- テキストボックスはタブで移動せずに、マウスでクリックして移動する。
-
- パスワードの入力は記録されないので、後でその部分だけ通常のテキストボックスへの入力として記録する。
- そのキー入力操作だけを、パスワードの入力位置にマウスでドラッグすると、パスワードとして再生される。
- 記録された操作のひとつ一つは、マウスでドラッグして、操作記録のアクション間、異なるワークフロー間で自由に移動することができるのだ。
- 一連の操作を記録すると、上記のような連続した操作手順となるが、以下のようにwebページの切り替わり部分で手順を分けた方がうまくいく。
- webページの読み込みが完了するまである程度の時間が必要なので、ページの切り替わりで必要な待機時間を設けた方が失敗が少なくなるのだ。
- さらに、操作環境による失敗を極力無くすために、指定されたURLを取得するアクションと、AppleScriptを実行するアクションを利用してみた。
- その他にも、以前のiMacrosの日記でも書いたが、自動化することで明るい未来が想像できる。
- 上記自動ログインした後、預金口座の照会やデータのダウンロード。(多くの会社は毎日照会していると思う。)
- webサービスの繰り返し入力する項目を記録しておき、雛形として利用する。(消耗品の発注などは毎月繰り返しそう。)
自分のキー入力を記録して、操作を客観的に見つめ直す
- あまり役に立たないかもしれないが、やってみたら意外と面白かったので...
現状は、この記録ボタンを使いこなすには、かなりの注意力が必要だが、面白い!今まで諦めていたことも自動化できるかも。