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

投稿:  著者:  読了時間:9分(本文:約4,200文字)


OS X YosemiteのJavaScriptがどこまで使えるのか、いろいろ研究中なのですが現時点では以下のようなところまでまとめました。

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

いろいろなアプリケーションと、同じ階層で処理ができるのは素晴らしいことです。プログラムにおいて変なことをせず、多種多様なアプリケーション間で同じ変数をそのまま共用できる、というのは便利なことです。

もっとも、AppleScript自体がアプリケーション間の連携を重要視して作られているという理由もあるでしょう(主な要望の出所はDTP業界だったと思います。Quark XPress、Illustrator、Photoshopなど各アプリケーションと連携したい、ということです)。

ただ、いかんせんWebブラウザで使われるJavaScript、Adobe社の各アプリケーションで使われているJavaScriptと比べて癖があり、慣れるまで時間がかかります。というよりも資料が少ない上に、どう変換したらいいのかが分からず試行錯誤中です。

とにかく資料がないので、検索するとこのような力尽きたような感じのページも出てきます。

・手抜きLab@DTPの現場
< http://chuwa.iobb.net/tech/archive/2014/10/javascriptforautomation2.html >




Adobe製品をJXAで制御したい人はいるのでしょうけど、非常に少ない人数のようです。JXA自体がマイナーなので、検索しても情報少ないままで、試行錯誤するしかなさそうです。

とりあえず検索して出てきたJXA関係のページをリストアップ。

・JavaScript for Automation(JXA)
< http://tonbi.jp/AppleScript/JavaScript/ >

・JavaScript for Automation(JXA)でファイルパスからFinderオブジェクト
を取得してみる
< http://gijutsubu.backstage.jp/?eid=70 >

・JXA-Cookbook
< https://github.com/dtinth/JXA-Cookbook/wiki >

・本家Appleのページ

< https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/ >

実際に作っていると、スクリプトエディタ自体が落ちてしまうことが結構あります(簡単にクラッシュする。呼び出し先のアプリケーションが落ちると同時に、スクリプトエディタも落ちる)まだ、不安定なのか、そもそもそういう仕様なのかわかりませんが、あまり気持ちの良いものではありません。

さて、ようやく思考錯誤しつつ作ってみたのが、Illsutratorの最初の階層にあるレイヤー名をテキストエディットに書き出すスクリプトです。実際のプログラムは以下のようになります。

// Illustrator側の処理
var AI = Application("Adobe Illustrator CC 2014");
var doc = AI.documents[0]; // ドキュメントを取得する
var text = "";
for(var i=0; i<doc.layers.length; i++){
var name = doc.layers[i].name(); // レイヤー名を読み出す
text = text + name + "\n";
}
// TextEdit側の処理
var TextEdit = Application("TextEdit");
var teDoc = TextEdit.Document(); // 新規にドキュメントを作成する
TextEdit.documents.push(teDoc); // 画面に表示する
teDoc.text = text; // Illustratorのレイヤー名を出力

ちなみに、一度作ってしまえば、同じようなコードでPhotoshopもレイヤー名
(&グループ名)を取得しテキストエディットに書き出すことができます。

// Photoshop側の処理
var PS = Application("Adobe Photoshop CC 2014");
var doc = PS.documents[0]; // ドキュメントを取得する
var text = "";
for(var i=0; i<doc.layers.length; i++){
var name = doc.layers[i].name(); // レイヤー名を読み出す
text = text + name + "\n";
}
// TextEdit側の処理
var TextEdit = Application("TextEdit");
var teDoc = TextEdit.Document(); // 新規にドキュメントを作成する
TextEdit.documents.push(teDoc); // 画面に表示する
teDoc.text = text; // Photoshopのレイヤー名を出力

共通の処理がある場合は関数を作っておいて~/Library/Script Libraries/フ
ォルダにスクリプトファイルを保存します。拡張子はscptでOKです。
上記サンプルの場合は、以下のように関数を作成しmylib.scptという名前で
~/Library/Script Libraries/フォルダに保存します。

// TextEditで出力する
function outputText(text){
var TextEdit = Application("TextEdit");
var teDoc = TextEdit.Document(); // 新規にドキュメントを作成する
TextEdit.documents.push(teDoc); // 画面に表示する
teDoc.text = text; // 文字を出力
}

使う場合は lib = Library("mylib") として読み込ませます。このライブラリファイルの関数(メソッド)を利用する場合は以下のようにlib.outputText() のように指定します。ライブラリが複数あり同名の関数があっても、lib = Library("mylib")のlib =をlib2 = など他の名前にすればよいのでまったく問題ありません。

// ライブラリの読み込み
var lib = Library("mylib");
// Illustrator側の処理
var AI = Application("Adobe Illustrator CC 2014");
var doc = AI.documents[0]; // ドキュメントを取得する
var text = "";
for(var i=0; i<doc.layers.length; i++){
var name = doc.layers[i].name(); // レイヤー名を読み出す
text = text + name + "\n";
}
lib.outputText(text); // TextEditで処理


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

朝起きれば雪景色。来年も大雪が降ると困るけど、とりあえず融雪剤は準備しました。雪かきや除雪ではとても無理だというのが分かったので。まあ、融雪剤をまくだけの方が楽ですし(やや、お金かかるのが難点ですが)。

・融雪剤(雪消し一番)
< http://product.rakuten.co.jp/product/-/5329ea8323a145fe1d069b01954d2448/ >

Nexus 9を買ったので例の使い方のページをを作り始めました。

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

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

・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 >
吉田印刷所の「印刷の泉」でも購入できるようになりました。