Photoshop UXP Action Recordingでアクションが記録されたか調べる

UXP

今回の記事はPhotoshop UXPの機能Action Recordingに関する記事です。Action Recording自体全くわからない方は過去の記事をご覧ください。

Photoshop UXP Action Recording、便利な機能だとは思いますがイマイチ知られていません。私は自作のPluginに既に実装したりしているのですがこのシステム、いまいち未完成な部分もあります。

アクションに項目が追加できたどうか値が返ってこない

ドキュメントに書かれている通りrecordActionメソッドの実行後の返ってくる値がPromiseとなっているので成功したからtrueが返ってくるというわけでもありません。必須に渡さないといけないパラメーター類で誤った値を渡すとエラーを返すみたいですがそうでなければ、例えばアクションレコードボタンを押してないままユーザーがアクションレコードの関数の実装されたボタンを押してアクションにレコードが記録されなかったとしてもエラーとして扱ってくれません。通常のAPIでどうにもならないなら仕方ないとしたいですがやはり実際に記録されたどうかユーザーに知らせたいです。

アクションの中身を調べて結果を調べる

というわけで無理やりでも調べてでも通知したいです。方法としてはbatchPlayでアクションの中身を確認することができます。

alchemistを使うと上のようなコードで取得できるのがわかりました。alchemistによるとここから以下のような値が取得できるみたいです。

アクション詳細の中身

取得したのは初期設定アクションのカスタム RGB からグレースケールへです。
IDはアクション自体のidでcountがよくわからないですがitemIndexはアクションセットから見てアクションのindex番号でしょう。nameがアクション自体の名前となるのですが一番重要なのはnumberOfChildrenです。これはアクション内にさらに記録された処理のステップ、commandが格納されます。この処理されたcommandの数がnumberOfChildrenになります。RGB からグレースケールへはスナップショットの作成、チャンネルミキサー、モード変換の三つのcommandで成り立っています。ではそのアクションの作業内容を取得します。

先ほどのコードにさらにcommandの項目が追加されました。commandには何番めのcommandを取得するかindexが必要です。これで以下のような値が取得できます。

アクションクマンどの中身

ここでチャンネルミキサーという名前が取得できています。これが初期設定アクションのカスタム RGB からグレースケールへ内のチャンネルミキサーの項目ですね。具体的には以下の画像の内容を取得しました。

チャンネルミキサーアクション

ただ残念ながらこのcommandはArray形式でまとめて取得という便利なやり方はないので上記のindexを使って一つずつ取得するしかありません。commandの数は前述のnumberOfChildrenから取得できるのでfor文で回せば取得はできます(indexは1から始まるので注意)

Action Recordingの通知

ここまでくるとおおよそ想像がつくかもしれませんがAction Recordingを実行してアクションのRecボタンもオンになっていて成功すればそのままcommandが追加されます。逆に何か足りてなければcommandが追加されません。というわけでAction Recording実行前のアクションとAction Recording実行後のアクションで何かしらのアクションにcommandが追加されていれば成功、何も一つも変わってなければ失敗です。しかし残念ですがアクティブなアクションを取得するようなメソッドもないみたいなので総当たりで全て調べるしかありません。総当たりで調べて一つでも増えているcommandが何かのアクションに追加されていればAction Recording成功です。

事前にアクションのリストを調べて、比較するという感じでだいぶ端折っていますがおおよそ上記のようなコードになるでしょう。全然更新されないUXPですがPhotoshopはまだまだ遊べる方でしょう。

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