
複数のmacやWindowsマシンを持っている場合、それぞれの環境に同じスクリプトを用意しておくのはなかなか難しいことです。一応、Keyboard Maestroマクロをクラウド共有したり、Dropboxにスクリプトファイルを配置して同期したりすることで実現できます。
しかし実際そこまでするかたは少ないでしょう。どれも同じAdobeアカウントでログインしているのだから、そのアカウントにスクリプトをクラウド保存して実行できたらいいですね。
そこで今回は、クラウドドキュメントに保存したスクリプトを実行するIllustrator用ExtendScript、executeCloudScript.jsx を紹介します。あまり実用性はないので、あくまでもお遊びとして見てください。
目次
executeCloudScript.jsxって何?
IllustratorのクラウドドキュメントにExtendScriptのコードを保存し、それを実行するサンプルスクリプトです。クラウドドキュメントに保存するので、複数の環境で同じスクリプトを参照し実行できます。
具体的にはこんなことをします。
- データ保存用のクラウドドキュメント(aic)を開く。なければ作る
- XMPメタデータの[基本 > 説明]の部分にスクリプトの名前とソースコードを書き込む
- クラウドからスクリプトを取得することを明示するため、一旦書類を閉じる
- 改めてクラウドドキュメントを開き、XMPメタデータからスクリプトを取得する
- 取得したスクリプトを実行する
executeCloudScript.jsxはGitHub Gistにあるので、そこから入手してください。
このスクリプトはjson2.jsxをincludeするため、利用可能にする必要があります。douglascrockford/JSON-js | GitHubからjson2.jsをダウンロードして、json2.jsxにリネームしてください。そしてexecuteCloudScript.jsxと同じフォルダにjson2.jsxを入れます。
どのバージョンに対応しているの?
Adobe Illustrator 2020(24) かそれ以降のIllustratorに対応します。app.openCloudDocumentおよびDocument.saveToCloudを使えるようになったのが、このバージョンだからです。
使いかたは?
Illustratorを開いた状態で、普通のスクリプトと同じように実行します。サンプルスクリプトはalert.jsxという、「Message from cloud」というアラートが出るだけのものです。書類がちかちか開いたり閉じたりした後、そのメッセージが出てきたら成功です。

スクリプト開発のポイント
Illustratorのクラウドドキュメントを開くメソッドはapp.openCloudDocument、別名保存するのはDocument.saveToCloudです。どちらもIllustrator JavaScript Scripting Reference.pdfに載っているので参照してみてください。
openはこんな風に使います。
1 |
var doc = app.openCloudDocument('folder/subfolder/filename.aic') ; |
ただし、書類が存在しないときのエラーをスクリプトで取得できません。ひと工夫いるので、詳しくは次のページの回避策を参照してください。
saveはこんな風に使います。フォルダはなければ自動的に作成されるので、どうやって作るかは気にしなくて大丈夫です。
1 2 |
var doc = app.documents[0] ; doc.saveToCloud('folder/subfolder/filename.aic') ; |
メタデータの編集は通常はExternalObjectのAdobeXMPScriptでできますが、今回の場合書類がクラウドドキュメントであり、対象のFileオブジェクトが存在しません。つまり書き込みができないことになります。
調べたところ、IllustratorのDocument.XMPStringがread/write両方に対応しているらしく、無事書き込めました。正しい形式でXMPの文字列を生成する必要があるので、AdobeXMPScriptからXMPMetaを呼び出してserializeで文字列化しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * save the script information in the metadata description of the target Illustrator document * @param {Document} doc target Illustrator document * @param {string} dstText string to write */ function setScripts(doc, dstText) { // get XMPString from Illustrator document var xmpPackets = doc.XMPString ; // create new XMPString using AdobeXMPScript var xmpMetaObj = new XMPMeta(xmpPackets) ; if(xmpMetaObj) { xmpMetaObj.setArrayItem(XMPConst.NS_DC, 'description', 1, dstText) ; } var newXMPString = xmpMetaObj.serialize() ; // set XMPString to Illustrator document doc.XMPString = newXMPString ; } |
この仕組みを利用すれば、もしかしたら世界で1つだけのスクリプトインスタンスを多人数で共有したり、スクリプトにアクセスできるメンバーを絞ったりできるかもしれません。あなたの想像力をもとに改造してみてください。
これでまた少し仕事が速くなりました。今日もさっさと仕事を切り上げて好きなことをしましょう!
作者に感謝を伝えたい!
Buy me a coffeeは、クレジットカード払いなどでクリエイターにコーヒーをおごれるサービスです。ツール・情報が役に立った! 感謝の気持ちを表現したい! というかた、おごっていただけましたら嬉しいです☕️
完全なコードはこちら