それマグで!

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

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

Javascrript for OSX Automation アドベントカレンダー

JavaScript for OSX Automation が出来るようになりました。

WindowにCOMがあってJScrptからアクセスできたようにOSXも遂にJavaScriptでアクセスできるようになりました。

AppleScriptで出来たことは殆ど、JavaScriptで出来るようになってテンションが上ります。

ちょうど、一年前の今頃、AppleScriptアドベントカレンダーを書こうとして挫折したので、今回はJavaScriptアドベントカレンダーを書こうと思います。

メニュー:アドベントカレンダー一覧

12 /1:Hello World (JavaScript for Application )

12 /2:メッセージ.app でメッセージの送信

12 /3:Safariの自動操縦

12 /4:Safariのページロードを待つ

12 /5:SafariのDOMにアクセスする

まだです

12 /6:[シェルスクリプトを実行する

12 /7:インタラクティブシェル

12 /8:リマインダにアクセスする

12 /9:キーボードイベントの送信(Safariでプライベートタブを開く

12 /10:itunesで再生・停止

iTunesで再生・停止 ( JavaScript for OSX ) - それマグで!

12 /11:itunesで☆をつける

iTunesのお気に入りに☆をつける - それマグで!

12 /12:Scriptの再利用(Scripti Libraries) - それマグで!

takuya-1st.hatenablog.jp

12 /13:iPhoto で写真を扱う - GPS

iPhoto で写真を扱う - GPS情報を取り出す - それマグで!

12 /14:iPhotoで写真を扱う - 顔

iPhotoで写真を扱う - 顔検出された写真を扱う→出来ない→出来る - それマグで!

12 /15:Evernoteにアクセスする- アカウント

Evernote を自動化する 1 - アカウント - それマグで!

12 /16:Evernoteにアクセス - ノート一覧

Evernoteの自動化2 - ノート一覧 - それマグで!

12 /17:Evernoteにアクセス - ノート作成

Evernoteにアクセス - ノート作成 JavaScript for OSX Automation - それマグで!

12 /18:メール(Mail.app)

http://takuya-1st.hatenablog.jp/まだです

12 /19:連絡先(Contacts.app)

連絡先(Contacts.app)-- JS for OSX Automation - それマグで!

12 /20:イベントで実行

http://takuya-1st.hatenablog.jp/まだです

12 /21:UIElementsをたどる

http://takuya-1st.hatenablog.jp/まだです

12 /22:C言語のstdlibを使う

takuya-1st.hatenablog.jp

12 /23:Twitter.app

http://takuya-1st.hatenablog.jp/まだです

12 /24:エラー処理

http://takuya-1st.hatenablog.jp/まだです

12 /25:その他の実行方法(app/services/automator)

http://takuya-1st.hatenablog.jp/まだです

以上のメニューで書いていこうと思います。

調べながらとかもあるので、投稿が送れるかもしれないです。

動くと思ってたものが動かなかったりすることもあるので、その時は投稿メニューを変えると思うので、ごめんなさい。

前提知識

JavaScriptを知っている!。JSは常識なので大丈夫ですね

必要なもの OSX 10.10.1 Yosemite

yosemite

使うもの Script Editor.app

スクリプトの実行環境はおもにスクリプトエディタを想定します。

01

あと、シェルも使います。

自動化するアプリは、OSXに標準バンドルされているもの、無償で入手可能なのもに限ろうとおもいます。

AppleScript知らなくても大丈夫。

だってJSだもの。

JavaScriptOSXを自動化するとMacと仲良く慣れる(気がする

Macを使っていて、もうすこし、こうだったら、、、もう少しデータを簡単にアプリ間で受け渡せないかな。

こういうかゆいところに手が届くのがautomationです。

私は、Automationを使うとMacと仲良く慣れた気がします。

なので、みなさんがもっとMac OSXと仲良く慣れるように頑張って書いてこうと思います。

Qiitaにもアドベントカレンダーの一覧があります。

ブログだとまとめるのが面倒なので、Qiitaにもカレンダー形式で作っておきました。

JavaScript for OSX Automation AppleScriptの代替をJavaScriptでやるサンプル Advent Calendar 2014 - Qiita

参考資料

WWDC2014のセッションのPDF資料が分かりやすいです。

https://developer.apple.com/videos/wwdc/2014/

スクリーンショット 2014-12-09 2.37.57

PDFがかなり分かりやすいです。

スクリーンショット 2014-12-09 2.42.33

Github にもサンプルがあって分かりやすいです

Home · dtinth/JXA-Cookbook Wiki · GitHub

ちなみにWindowsではJScriptかな

WindowsJScript 関連はコレ

Amazon.co.jp: WSHクイックリファレンス 第2版: 羽山 博: 本

http://takuya-1st.hatenablog.jp/entry/20110306/1299392486

http://takuya-1st.hatenablog.jp/entry/20071014/1192291647

JScriptでレジストリを操作する方法まとめ。 - それマグで!

http://takuya-1st.hatenablog.jp/entry/20090413/1239596361

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() //何かコマンドを実行させる

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

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

今回はここまで。