CEPのライブラリー

head img
    Photoshop

CEPのライブラリー

CEPにおいて既存のJSライブラリー以外にもCEPのために用意された Adobeのライブラリーがいくつかあります。VsCodeのCC Extension Builderを使用する事によりバーストなるファイル、ディレクトリーを一瞬で作ってくれるのですがその中にCSInteface.jsが含まれているのでこれに関しては 必須のファイルということもありほとんどの開発者がご存知ではないでしょうか。しかしそれ以外にもいくつか専用のライブラリーが存在しているので 触れていきたいと思います。

CSInterface

ほとんどの方がご存知、といった矢先にいきなりCSInterfaceに触れますがこれ、CC Extension Builderに同封されているバージョンは9.0なので新しいバージョン、もしくは古いバージョンが必要な場合は公式のGitHUbから取ってこないといけません。ただ正直9.0とそれ以降の10,11で何が違うのかよくわかりませんでした。しかし念の為 バージョンに合わせたファイルを用意した方が良いでしょう。

Illustrator AIHostAdapterプラグイン

AobeCEPにはイベントというシステムがブラウザーのjsと同じように存在します。 ただしCEPから生成できるイベントの種類はかなり限られていて例えばドキュメントが保存された後、 アクティブなドキュメントが切り替わった後など数種類程度しかありません。 Photoshopの場合これに加えてアプリケーション側のイベントがいくつもあるのでレイヤーを操作した場合、 ツールを切り替えた場合に発火するイベント等がを沢山使えます。 Illustratorの場合はPhotoshop以外のアプリケーション同様こういったイベントは基本使えないのですがそれを可能にするプラグインが存在するというのが AIHostAdapterプラグインです。

AIHostAdapterプラグインの使用方法

使用前にプラグインとプラグインとJSを繋ぐライブラリーが必要です。まずプラグインですが公式のGitHubに置いてあります。使用するIllustratorのプラグインフォルダーに入れてください。そして入れたのはいいですが肝心のコードがわかりません。 リファレンスも探した限りどこにもありません。そこでプラグインにアクセスするためのコンストラクターが記述されたjsファイル があります。以下、アップしておくのでお使いください。(多分公式のライブラリーだと思います。)cs_host_adapter-2.0.js コメント文を読むと具体的な使用方法およびイベントの種類が記述されているので使用に困らなそうです。でもここで少しだけ 使い方を載せます。

開発するExtensionフォルダー内のindex.htmlで読み込んだら実際使ってみましょう。 やり方はブラウザーのEventTargetとほとんど同じです。 例えばイベントを追加する場合は以下のようにaddEventListenerで登録します。

もしくはAIEventオブジェクトのプロパティーに各イベントが既に格納されているのでそれを渡してもいいでしょう。

コンストラクター内部のインスタンスを間接的に呼び出してそこからaddEventListenerでイベントを呼び出します。 イベントの中身ですが上のサンプルでは何かしらアイテムがペーストされた時のイベントですがその他にもレイヤーの操作、 ドキュメント操作等かなりの種類のイベントがあります。

Vulcan.js

異なるAdobeのアプリケーション同士で通信を行う場合ExtendScriptにはBridgeTalkがあります。 それではCEPにはそれに該当するようなものがないのかというと実はあります。あまり知られていませんが Vulcan.jsというライブラリーを使うことによりできますので例によってこれも公式GitHubに置いてあるので ここからコピーしてHTMLに読み込ませましょう。

Vulcan.jsの使い方

あるアプリケーションから別のアプリケーションにメッセージを送る際に送信側のパネル自身のIDが必要なのでcsInterfaceから取得します。

VulcanMessageオブジェクトにパネルIDとメッセージを渡して送信します。

IDでメッセージの発信元を判別するので後ほど受け取るパネル側でもIDを指定して指定したID側からのメッセージを待ち受けします。 ちなみにメッセージを送信する前に送信側のソフトが立ち上がっているか確認する事もできます。 isAppRunnningメソッドに対象のソフト名を渡します

ちなみにIllustratorの場合は全て小文字で”illustrator”でした。 次に待ち受け側のパネルですが送信側のIDからのメッセージをEventListenerでイベントの登録をします。

これで簡単な送受信ができるようになります。多分Nodeでやるよりも簡単ではないかと。 ソフトウェアの立ち上がりやインストールも確認できるらしいので送信前のエラーを避ける事も簡単です。

JSON2

ECMA3のExtendScript側からオブジェクトをパネル側に返すときに必要なJSONのPolyfillです。 パネル側とExtendScript側でデータのやり取りを行うときに必要です。現状ほぼ必須の PolyfillですがVsCodeのCC Extension Builderに自動でついてこないので都度引っ張ってくる必要があります。json2コピーしたらincludeで読み込みます。