ScriptによるAdobeアプリケーション間の連携、UXP、CEP、BridgeTalk、Vulcan.js
ようこそ2024年です。InDesignにもUXP Pluginの波がやってきてScriptのシステムも変化の波がやってきています。それで今回はAdobeアプリケーション間の連携についての記事になります。
現状使える選択肢
Scriptを使用したアプリケーション間の連携ですがBridgeTalkが一番有名でしょう。ExtendScriptのみで動くのでシンプルです。それで二つ目はExtension間で異なるアプリケーションでも通信が可能なVulcan.jsです。(Vulcan.jsの簡単な概要は過去の記事を、もしくは実際のコードのコメントを参照)通信以外にも他アプリケーションの稼働状況も確認できたり優秀です。三つ目はWebSocket、もしくはサーバーを介した通信でしょうか。
現在の問題
それで直近の一番の問題はApple Silicon 環境下での動作です。まずApple Silicon 環境下だとBridgeTalkが動きません。これで困った方は多いのでないでしょうか。Vulcan.jsは直接は関係ありませんがExtensionはもはやPhotoshopがApple Siliconで対応していません。UXPが代替になっています。ということで全てMac絡みの問題ですが今後CEPもしくはExtendScriptからUXPの移行もどうなるかわからない今だからこそこの辺りの問題を意識すべきではないでしょうか。少なくとも現在PhotoshopやらIllustratorを使っている方々は今後もAdobeのアプリケーションと付き合わなくてはならないのは変わらないでしょうし連携した自動化プログラムも必要になるでしょう。今のところこういったUXP、CEP関係なく柔軟に対応できそうなのはWebSocketなどを使ったローカル間のサーバーを通じた通信でしょうか。まとめると以下のようになりますでしょう。
-
AdobeBridgeのメリット
ExtendScriptだけで動く。シンプル。
デメリット
Apple Silicon 環境下だと動かない。
-
Vulcan.js(CEP)のメリット
Extension同士で通信ができる。またネイティブアプリケーション的なCEP上で動かせる。
デメリット
PhotoshopがもはやExtensionをApple Silicon 環境下でサポートしていない。
-
WebSocket、Node.jsを使った通信のメリット
サーバーさえ起動できれば通信できる。異なるアプリケーションは勿論UXPもクライアントとしてWebSocketなどにアクセスできるのでCEPとUXPの連携、またはElectronなどとの連携も可能。
デメリット
UXPはサーバーを扱えない(Node.jsベースのシステムでないため)。なので必ずCEPか他のアプリケーションからサーバーを起動する必要がある。
ということで現在の選択肢はWinのみ対応できればいいという環境でなければ必然的にVulcan.jsかWebSocketを使った通信に限られそうです。今後の
ことを考えると全てのアプリケーションが同じタイミングでUXPに移行することは現状考えづらく、どちらかというと次はAfterEffectsかPremiereがUXPに移行の準備に入りIllustratorは最後になる可能性が高いです。そうなると場合によっては今後CEPとUXPの環境が混ざった環境下での連携も必要になる可能性があります。そういう意味ではVulcan.jsに頼りすぎるのも少し怖いですね。
WebSocketで通信してみる
前述の通りUXPではサーバーを立ち上げることができないのでCEPかその他のアプリケーションが間に入る必要が必ずあります。なので今回CEPとUXPの通信を前提に行ってみます。環境は以下の通りで。
- CEP11
- UXP7.2
- socket.io 4.7.3
- socket.io-client 4.7.3
尚socket.io、socket.io-clientはCEPで動きましたしUXPはWebSocketをサポートしていてsocket.io-clientも問題なく使えました。
まずCEPの側からサーバーを立てます。
以下はUXPの設定です。
requiredPermissionsの項目で必ずネットワーク接続の許可を設定してください。これを忘れるとエラーを返して接続してくれません。
細かい箇所は省きましたがCEPの方を最初に立ち上げて、サーバーを立ち上げる、その後UXPのプラグインを立ち上げて通信という形でアプリケーション間のやりとりが実現できます。Adobeのフレームワークに依存しない技術なのである程度柔軟に対応できる技術ではないでしょうか