Photoshop UXP触ってみた

UXP

CEPの次なるplugin開発システムであるUXP(Unified Extensibility Platform)がPhotoshop2021から搭載されました。CEPとjsxはいつかはUXPに移行することになるらしいですが今すぐ使用できなくなるわけではないらしいです。(実際PhotoshopのUXP APIも開発途上な感じ)ベースがJavascript V8でアプリケーションの操作も同じV8の環境で実行できるのでCEPみたいにパネルとjsxで通信する必要もなくなます。将来的には動作もjsxよりかなり高速になるとは書いてありました。こちらを参照

とりあえず基本的な情報に軽く触れたいと思います。今回公式のドキュメントがわかりやすく整理されているので手っ取り早く始めたいだけならこちらへ(英語)

開発の前にAdobe UXP Developer Toolをダウンロードしてください。その他難しい設定は今回必要ありませんでした。その他主要なリンク

cssはAdobe spectrumがデフォルトで使用可能なのでspectrumのサイトを見てhtmlを打っていけばそのままspectrumのcssが反映されます。
開発に関してはUXPの読み込みから開発まで今回は全てUXP Developer Toolで行います。今回パネルの更新、デバッグ、さらには更新の監視までこのDeveloper Toolでできるの今までのようにアプリケーションを更新の度に閉じたり開いたりする必要もなくなりクロームベースの環境で簡単にデバッグできます。

UXP develop tool

さらに今回デバッグの画面でターミナルのようにコードを打って即時実行させることもできます。簡単なコードをすぐに確認したい場合にとても便利です。

デバッグ画面

それで今回のUXP pluginですがパネルからだけでなくメニューコマンド等から自作関数を実行できるので必ずしもhtmlを構築する必要もないです。menuCommand

その他プラグインパネルからも実行可能です。

プラグインパネル

この辺の設定はmanifest.jsonとuxpもモジュールで設定できますが気が向いたらその内まとめます。

肝心のphotoshop APIですが今回Node.jsのようにrequireでモジュールを呼び出して実行します。ただ今回厄介なことにphotoshopアプリケーションを操作するメソッドはほぼ非同期で実行されるようなので事前にasync関数で囲む必要があるでしょう。

それでここまでわかったら後は慣れるだけかと思ったのですが公式を見る限りどうも2020年12月18日現在モジュールがまだレイヤー、アクション、ドキュメントくらいしかなさそうなのでphotoshopモジュールでできることはかなり限られています。そこで気になるのがbatchPlayですがこれはscriptListenerで拾った情報を元にアプリケーションを操作できるメソッド、ということでscriptListenerとbatchPlayを使用すればおおよそのことはできてしまいます。例えば色域選択をscriptListenerで取得すると以下のようになります。

これをbatchPlayに当て込んでみます。

大体scriptListenerで取得したコードとbatchPlayのどのあたりが対応しているかはなんとなくわかるかもしれませんがこれを実際に当て込むのはかなりきついですね。しかしこのbatchPlayコードを自動的に生成してくれるプラグインがあります。jardicc氏のalchemistです。scriptListenerを使用するようにユーザーのアプリケーションの操作からコードを生成するのでアクションを作る感じでコードを調べることが可能ですが今回詳しいことは省きます。それでこのbatchPlayを使用すればおおよそのことはUXP上で可能なのですがだからといってありとあらゆコードを調べてオブジェクトモデルを築いてゆくのは相当な負担になります。(もっとも時間と共にUXP自体もアップデートするからそっちを待った方がいいとは思いますが。)

触ってみて

開発環境自体はUXPが整っているが如何せんAPIが対応している機能が少ないので慣れている場合はCEPの方が開発しやすいと感じた。実行スピードも現時点ではまだ特別早いとは感じられませんでしたがただこのあたりは開発が進むにつれて改善されてゆくようなのでとりあえずUXPに慣れるようにしたいとは考えてる。でもウインドウを二つ表示したりダイアログを表示することも可能なのでCEPよりも可能性は大きく感じます。何より全てのコードを最新のjsで書けるということでECMAScript3から離れられる日がもうすぐ来るかもしれないと思うと心踊ります。ただ今後非同期処理や分割代入なんかが当たり前になるのでモダンな書き方に慣れないとどんどんきつくなるとは思います。

2021年3月25日 追記

UXP開発入門のためのDeveloper Toolの使い方の記事を書きました。

2021年4月9日 追記

batchPlayで実行するPhotoshopのメソッドについて書きました。PhotoshopUXP batchPlayでPhotoshopの特定の処理を実行する。

Beer 寄付してサイトを応援する。