クリエイター手抜きプロジェクト[279]Adobe Bridge CS3/CS4/CS5編 アプリケーション間でやりとりする(1)
── 古籏一浩 ──

投稿:  著者:


Bridge最後のネタはBridgeTalk(ブリッジトーク)です。これは、Adobeアプリケーション間でやりとりするための機能です。

BridgeTalkを使えば、Photoshopで作成した画像をIllustratorで貼り付けて文字などを追加した後、InDesignに配置する、といったことが一応可能になります。一応と書いたのは、場合によってはうまく動かないパターンもあるということです。

また、一度実行中にしくじってしまうと、そのファイル名からの処理を受け付けなくなることがあります。ファイル名を変更すれば対処できますが、どこに不具合があるか分からないというのも正直なところです。

BridgeTalkは便利そうですが、いざやってみると大変そうだと感じるかもしれません。特に指示を出した後は非同期で処理が行われるため、3つ以上のアプリケーションをまたぐ処理は面倒です。

まず、簡単なところでPhotoshop CS3を呼び出してみましょう。以下のスクリプトを実行すると、ぱっと見ではアラートダイアログには「1」「2」「3」と表示されそうですが実際には「3」「1」「2」または「1」「3」「2」の順番で数字が表示されます。



var btObj = new BridgeTalk;
btObj.body = "alert(1)";
btObj.target = "photoshop-10"; // Photoshop CS3
btObj.onResult = function(resObj){
alert(2);
}
btObj.send();
alert(3);


Photoshop → Bridge→Illustratorを呼び出したりすると、面倒になっていきます。


var btObj = new BridgeTalk;
btObj.body = "alert(1)";
btObj.target = "photoshop-10"; // Photoshop CS3
btObj.onResult = function(resObj){
alert(2);
var btObj2 = new BridgeTalk;
btObj2.body = "alert(4)";
btObj2.target = "illustrator-13"; // Illustrator CS3
btObj2.onResult = function(resObj){
alert(5);
}
btObj2.send();
alert(6);
}
btObj.send();
alert(3);


連携させようとすればするほど、泥沼のように面倒になってしまいます。これでは、アプリケーション間でやりとりする前に気力が萎えてしまいます。そこで一工夫して、以下のようにすると指定した順番でスクリプトが実行されるようになります。


(function(){
var PSCS3 = "photoshop-10";
var AICS3 = "illustrator-13";
var AECS3 = "aftereffects-8";
var IDCS3 = "indesign-5";
var BRCS3 = "bridge-2";
var DWCS3 = "dreamweaver-9";
var funcList = [];
funcList[0] = { target : PSCS3, func : "alert(0)" };
funcList[1] = { target : AICS3, func : "alert(1)" };
funcList[2] = { target : AECS3, func : "alert(2)" };
funcList[3] = { target : BRCS3, func : "alert(3)" };
funcList[4] = { target : IDCS3, func : "alert(4)" };
funcList[5] = { target : DWCS3, func : "alert(5)" };
funcList[6] = { target : PSCS3, func : "alert(6)" };
var count = 0;
myBTalk();

function myBTalk(){
var btObj = new BridgeTalk;
btObj.body = funcList[count].func;
btObj.target = funcList[count].target;
btObj.onResult = function(resObj){
if (count++ < funcList.length) myBTalk();
}
btObj.send();
}
})();


funcList配列に、順番に実行したいアプリケーション名とスクリプトを指定します。targetがアプリケーション名、funcがアプリケーションで実行したいスクリプトになります。アプリケーション間で値を受け渡す場合には、もう少し工夫が必要になります。それは、次回説明します。


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

節電のためサーバーを海外へ移転させる方がいいのかも。でも、こうなると国内には何も残らず、すっからかん。とりあえず自前サーバーだけど停電したらUPS数十分くらいしか持たないなあ。

・毎度おなじみASCII.jpの連載。HTML5+NimbleKitでiPhoneアプリ作り第4回
「MapKit×JavaScriptでiPhone用GPSアプリ」
< http://ascii.jp/elem/000/000/611/611499/
>

・Google API Expertが解説する HTML5逆引きリファレンス(6/23発売)
< http://www.amazon.co.jp/dp/4844330349
>

・iPhone/iPad × HTML5アプリ制作
< http://www.amazon.co.jp/dp/4797362618
>

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

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/
>