Photoshop UXP Action類の上級者向け操作01
2024年12月14日にアドビアプリ自動化もくもく会 に参加してきました。
当日Action Recordingについて5分ほど出席者に解説、プレゼンする時間をもらいました。主にActionRecordingの概要と便利な部分などを自前のプラグインのデモも交えつつ解説したのですが後日アクション周りを調べてさらに色々判明したことが出てきたので今回アクション関係のことについて前回の記事より突っ込んだ内容について記録程度に記事を作りました。
Actionの操作でやりたいこと
今までもAction関係は色々いじってきましたが今回Actionの操作についてUXP上でやりたいことがさらにいくつかあります。具体的には以下の内容です。
- アクティブなアクションの取得
- アクションの記録ボタンのオン・オフ
- コマンドの内容の取得
- 新規アクションの作成
- アクションデータ(atn)ファイルの読み込み
- UXPの実行内容をアクションに記録
背景としてAction Recordingの記録を簡素化したい、現状APIだけだとユーザーに記録ボタンを開始させてそこからUXPのコードを発火させるというエンドユーザーからしたら面倒に感じるような操作を要求されます。
これとは別にUXPでアクション生成機能、アクション操作機能を実装したいという考えがありました。というわけで一つずつ調べていきます。
アクティブなアクションの取得
Alchemistで色々こねくり回してなかなか取得できませんでしたが結果的には以下のコードで取得できました。
BatchPlayのコード関係の記事を見直して、色々見てたら最終的に”action”という文字列を参照すればいいだけの話でした。
参考リンク
アクションの記録ボタンのオン・オフ
これはかなりややこしかったです。まずAlchemistでアクションの記録ボタンを押しても何も反応せず、最初は不可能なのではないかと思いました。
しかしこのボタンの存在が死角になって、普段ここからしか録音をオンにしてなかったのでこの時点で諦めていたのですがもう一つ発火ポイントがありました。そうです右側のパネルメニューです。
ここから発火させたら以下のようなコードがAlchemistで取得できました。
しかしこのコード、このままでは動きません。生成されたコードの上部にコメントは「イベントが感知した通知は再実行できることはないでしょう。この生成されたコードが動く可能性はまずありません」(超てきとうな翻訳)
つまりこのままだと動きません。困りましたが以下のフォーラムのやりとりを見たら答えがありました。
List of core.performMenuCommand() parameter or quit Photoshop from script
先程取得したAlchemistのコードは確かにそれ自身は動きません、しかし内部にcommandID: 1174と何かIDが取得できていました。このIDはメニューの類、例えば上部のファイル、編集、イメージといったメニューのコマンド類にはIDが全て振られていてこのIDを元にコマンドを実行する方法があります。
performMenuCommandメソッドです。coreモジュールの中のメソッドなのですがここにIDを引数を渡すと該当のIDのコマンドを実行します。
これで実行できてめでたしめでたし、なのかというとそうでもありません。ここからさらに現在のPhotoshopはアクションを記録している状態なのか、そうでないのか取得しないといけません。しかしこのメニュー名は記録開始する場合はコマンドの名前は「記録開始」、これから停止する場合は「記録中止」となります。何か方法がありそうね感じがありますがcoreモジュールの中にgetMenuCommandTitleというメソッドがあります。その名の通りIDに対応したコマンド名が取得できます。以下のような感じです。
しかしここで再度新しい問題が、それは返ってくる値が日本語で、これはどうもローカルの環境に左右される値らしく、安易にresult === “記録開始”とかしたら他の言語でうまくいきません。それで以下のフォーラムが答えがありました。
How can I programmatically enable and disable Extras?
coreに専用のモジュールがあるみたいです。translateUIStringというまんまなメソッドです。特定の値を渡すと起動中の言語環境に合わせたメニューのコマンド名の文字列を返してくれます。その文字列ですが公式のドキュメントを見てもどこのファイルを見ればいいのかよくわかりません。しかし先ほどのリンクのフォーラムで発見者がいたのでそこから辿り着けました。以下のファイル内に記載してあります。
Mac
/Applications/Adobe Photoshop 2025/Locales/ja_JP/Support Files/tw10428_Photoshop_ja_JP.dat
Win
C:\Program Files\Adobe\Adobe Photoshop 2025\Locales\ja_JP\Support Files/tw10428_Photoshop_ja_JP.dat
このファイルの中に各種UIのローカル言語に応じた文字列があります。ファイル内にローカル言語のメニュー名がリストで大量のあるので見つけるのが少し大変ですがアクション記録開始の文字列は”$$$/Menu/Actions/RecordAction=記録開始”ですね。この”$$$/Menu/Actions/RecordAction”を先ほどのメソッドに渡せばローカル言語の文字列が返ってきます。
ちなみに”$$$/ActionsPalette/StopRecording”がアクション記録中止のコマンド名です。これで他言語環境下でも実行できるようになるはずです。現在英語、日本語環境下で行って問題ありませんでした。これでActionRecordingもユーザーに煩わしい思いをさせずに記録させることができそうです。
今回
- アクティブなアクションの取得
- アクションの記録ボタンのオン・オフ
を実現しましたが残りは次回に続く。