クリエイター手抜きプロジェクト[408]Mac編 Mac OS X YosemiteをJavaScriptで制御
── 古籏一浩 ──

投稿:  著者:


MacのOSが新しいバージョンのYosemiteになってから、ある機能が追加されています。まあ、機能というようなものではありませんが、従来Macをスクリプトで制御できるのはAppleScriptのみでした。これが、ようやくOS X YosemiteになってJavaScriptでも制御できるようになりました。

これも昨今のJavaScriptの隆盛によるところが大きいのかと思いますが、最も開発者が慣れているアルゴル言語系でMacが制御できるのは非常に助かります。ちなみに、アルゴルは今に続くC言語やJava言語などのベースとなったプログラミング言語です。

・ALGOL(アルゴル)言語
< http://ja.wikipedia.org/wiki/ALGOL
>

というわけで、OS X YosemiteがJavaScriptで制御できるようになったのですが、IllustratorやPhotoshopを制御しているJavaScriptとは結構違う部分があります。




まず、一番大きいのはアプリケーション間でデータのやりとりをするのが簡単だということです。これは、AppleScriptが各アプリケーション間をつなぐ役割を果たしていたからという理由もあります。

これまでデジクリで書いてきたJavaScriptは、基本的にはIllustratorやPhotoshopのアプリケーション内で完結しているものです。アプリケーション間の連携は、不可能ではありませんでしたが難しい部類に入ります。

Adobeアプリケーションの場合は、CS3以降でAdobe Bridgeを使ってデータのやりとりができます。CS3は不安定でしたが、CS6以降では安定して連携を行うことができます。

とはいえ、連携できるのはAdobeアプリケーション間のみで、Safariで表示したページからデータを持ってきてIllustratorに貼り付けた後に、PDFで保存しAcrobatで100%サイズで表示する、というような芸当はできませんでした。

これが、YosemiteではJavaScriptによって可能になるわけです。また、AppleScriptでできることはJavaScriptでもできます。というか、単純にポート(移植)しただけなので、機能も不具合もAppleScriptに準ずることになり
ます。

また、面白いのはMac OS Xの開発言語であるObjective-Cも呼び出せます。Objective-CもJavaScriptも同じオブジェクト指向言語なので、こちらの方がマッチング度は高いでしょう。

手法としては、JavaScriptのオブジェクトにObjective-C+Mac OS XのAPIを割り当てています。このような方法なら、C言語を使わなくてもJavaScriptでOSを制御することが可能になります(この方法なら低レベルレイヤーのマシン語も書けなくもない気はしますが)。

ということで、早速OS XをJavaScriptで制御してみようとトライしました。が、JavaScriptなのに何かが変。文法はJavaScriptで間違いないのですが、プロパティの読み出しがメソッドでないと駄目だったり、WebやAdobeのJavaScriptとはひと味違った状態に仕上がっています。

方言で喩えると──

・ECMA Script         本当の標準語。教科書的な。
・WebブラウザのJavaScript   関東圏で使われる言葉。
・AdobeのJavaScript      関西弁。方言の中では有名。
・YosemiteのJavaScript    京都弁。古い言葉を無理矢理標準語に。

といった感じでしょうか。

YosemiteのJavaScriptは慣れるまで時間がかかるのと、リファレンスがAppleScriptのものしかないので、脳内変換しないと使えないというのが難点。AppleScriptとJavaScript両方に詳しくないと、ちょっと辛いという部分もあります。

OSがJavaScriptで制御でき、アプリケーション間も全部OKという感じではありますが、実際にはそうそううまくいきません。

まず、Adobeアプリケーションの場合、すべての機能をYosemite+JavaScriptでは制御できません。制御できるのは一部に限られます。つまり、従来のAdobe+JavaScriptを使って処理しなければいけません。

さらに完全自動化するのであれば、UNIXの知識も必要になります。Yosemite+JavaScriptではできないこともあるからです。特に待ち時間が長い(アプリケーションからの応答が遅い)場合は、タイムアウトエラーになってしまうことがあります。

まだ、使い始めなので詳しくは分かりませんが、いろいろなオチがあるのは間違いないはずです。

結局のところ、UNIX+Adobe+Yosemiteの3つを連携させないといけないということで、従来通りと言えば従来通りのパターンになります。とはいっても、レトロ感漂うAppleScriptから、より新しい言語であるJavaScriptでOSが制御できるようになったのは歓迎です。

せっかくなので、Safariで表示されているページの内容(テキスト)をテキストエディットに貼り付けるスクリプトを載せておきます。わずか7行で、アプリケーション間でデータのやりとりが簡単にできます。

var Safari = Application("Safari");
var doc = Safari.documents; // ドキュメントを取得する
var text = doc[0].text(); // ページの内容(テキスト)を取得する

var TextEdit = Application("TextEdit");
var doc = TextEdit.Document(); // 新規にドキュメントを作成
TextEdit.documents.push(doc); // 画面に表示する
doc.text = text; // ブラウザから読み込んだ文字を出力する

ちなみにYosemite+JavaScript制御はJXAと呼ぶみたいです。


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>

ということで、地道にいつものページを作って公開してあります。

・Mac : JavaScript for Automation(JXA)例文辞典
< http://www.openspc2.org/reibun/JXA/Yosemite/
>

また、OS X Yosemiteの使い方のページも用意してあります。初心者の質問に回答するのが面倒な場合にでもお使いください。

・Mac : OS X Yosemite使い方辞典 (OS X ver 10.10)
< http://www.openspc2.org/reibun/MacOSX/Yosemite/
>

柴田編集長から11月22日の長野北部地震についても何か書いて、と言われたので少しだけ。

夜の10時頃に緊急地震速報がたくさんの携帯、スマートフォンから鳴りました。こういう時、たくさんデバイスがあると結構うるさい状態になります。2〜3台なら別にいいのですが。鳴ってから1秒としないうちに横揺れがきました。この横揺れが、簡単に収まらなかったのでこれはでかい地震だ、と。

NHKを見ると長野県北部が震源地だとのこと。ぱっと見だと小谷村付近だったので、小谷村がやられたのかと。で、翌日になったらどうも白馬村が相当にやられたとの情報。

被害の大きかった神城は神城駅、南神城駅あたりの撮影に何度も行った事があります。でも、地震後には行っていないのでテレビで見るだけですが、古い木造家屋が倒れてしまったようです。比較的新しい家屋(最近建築した家)は、被害が少なかったようです。耐震補強は結構重要ではないかと。

今回は断層地震なのですが、私が住んでいるところにもでかい有名な牛伏寺断層があるので生きている間には地震にみまわれそうです。牛伏寺断層よりも遥かにでかい断層っぽいところもあるのですが、住んでいるところは断層だらけ。

それにしても、長野県は「南木曽の土石流災害」「御嶽山噴火」「北部地震」と災害だらけ。天災はいつくるのか分からないので、ある程度備えておかないといけないかなと思います。

・長野「神城断層地震」震度7だった白馬村堀之内地区! 墓石すべて倒壊
< http://www.j-cast.com/tv/2014/11/25221591.html
>

・jQuery+jQuery UI+jQuery Mobile逆引きハンドブック
< http://www.amazon.co.jp/dp/486354149X
>

・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861
>

・D3.js例文辞典
< http://www.openspc2.org/reibun/D3.js/
>

・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/
>

・Egison言語 例文辞典
< http://www.openspc2.org/reibun/Egison/3.3.2/
>

・4K/ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>

・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082
>

・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/4844395955
>

・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/
>

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/
>

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< https://www.ddc.co.jp/estore/cgi/item/start.cgi?m=DetailViewer&record_id=243
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。