それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

AppleScript のJavaScriptでハローワールド

AppleScript の記述言語にJavaScriptが加わりました

AppleScriptはMac OSXを自動化するために作られた方式なんですけど。

AppleScriptってとっても読みやすい言語なんだけど。

やっぱりJavaScriptが一番だ。

JavaScript でアプリを操作出来る

JavaScriptさえ知ってれば、事足りるようになって嬉しい。

今回はJavaScriptでアプリを自動操作を出来るようになりたいなと思っています。

  • Safari を作ったり
  • Messages.app でメッセージの送受信したり
  • Evernote触ったり

そんなことが出来るようになればきっと便利になると思うんです。

必要なもの

JSの知識はなくても大丈夫なほどに簡単ですけど。

それでは、ハローワールドを通してJavaScriptによる自動化を見て行きたいと思います。

最初に、スクリプトエディタを起動

AppleScript を使うためにスクリプトエディタを起動します。

01

次に、スクリプトエディタの言語をJavaScriptに切り替えます。

デフォルトはAppleScriptになっているので、JavaScriptにしていします。

02

これで、いよいよ、JavaScriptで自動化が出来るようになります。ワクワクします。

JavaScriptの第一弾、Safariを起動してみます。

スクリプトエディタで新規ファイルを作って、Safariを起動するように記述して、

03

実行ボタン(または、Cmd+R)を押します。

Safari が起動します。

これでSafariが起動します。

04

JavaScript for Automation ってとっても簡単ですね。

自動化のためのJSと言っても普通のJSなので

特に新しいこともなく、通常通りにJavaScriptのオブジェクトも存在します。

Date

05

Dateオブジェクトも通常通りに使えます

Math

06

乱数もこの通り、いつもどおりです。

基本オブジェクトはいつもどおり

JavaScript Core の Global オブジェクトはいつもどおり使えます。

  • Object
  • Array
  • Date
  • String
  • Math
  • RegExp
  • Function
  • など

これらはいつもどおりです。

また

{ foo : "bar" }
[ "a", "b", "c" ]

もいつもどおり使えます。

メニューからログを表示(⌘3)するとconsole.logも使えます。

上のメニューからログを表示をすれば、実行ログを見ることが出来ます。

07

メニューはスクリプトエディタの右下の[三]のマークでもONにすることが出来ます。

ログを表示しておくとconsole.log()を使って、プログラムの実行を追うことが出来ます。

08

使い方がわかったら Hello Worldをやってみます。

次のように、プログラムを書いて。実行ボタンを押します(または cmd+R)

09

するとSafariが起動して、Hello worldを表示してくれます

10

この、記述は、StandardAddtionというAppleScriptオブジェクトの共通拡張をJavaScript側から使えるようにONするための、おまじないです。いずれ詳しく書きたいと思います。

app.includeStandardAdditions = true

別のHello World(Say)

Script Editor アプリを使って、OSXにおしゃべりをさせたいと思います

次のように、Safariの代わりに、ScriptEditor 指定してSayを実行させます。

11

実行すると

A privilege violation occurred.

11.1

このようになると思います。これは、自動化がなんでもできるので、明示的に許可したアプリ以外の自動化スクリプトを制限しているのです。

今回はScript Editor に実行許可をだして、コマンドの実行を許可します。

システム環境設定から、プライバシーを開いて

アクセシビリティで、自動化したいアプリに自由を明示的に権限を付与します。

Safariに権限付与するといろいろ面倒そうなので、今回はScriptEditorに権限付与しました。

12

これで、ScriptEditorが Hello world と喋ってくれます。

まとめ

これで基本的なOSXJavaScript 自動化の使い方がわかりました。

var app = Application("Safari") // 自動化したいアプリを取得する
app.activate() // 必要であれば最前面に持ってくる
app.XXXXXX() //何かコマンドを実行させる

この繰り返しになります。

あとは、この基本構文に色々と加えていくことでアプリを自動化するのですが、マニュアルや理屈を言うよりたくさんのサンプルを書いたほうがいいと思うので、いくつかのアプリでサンプルを引き続き書いていこうと思います。

今回はここまで。