batchPlay は、UXP のスクリプトやプラグインから、Photoshop のコマンドを直接実行する仕組みです。
ExtendScript の executeAction にあたり、DOM で書けない操作に使います。
- 書き方:require(‘photoshop’).action.batchPlay([記述子], オプション)。Promise が返る
- 記述子は _obj(コマンド)・_target(対象)・_ref(対象の指定)で書く
- Photoshop の状態を変えるなら executeAsModal の中で実行する
- コードは、アクションパネルの「Copy As JavaScript」で取れる(開発者モードのとき)
この記事は、Adobe の UXP for Photoshop の公式ドキュメント(developer.adobe.com と GitHub の AdobeDocs/uxp-photoshop、2026年9月29日に確認)にもとづいています。
当方には Photoshop が無いため、実行の再現は含まず、画面の名前は英語版の表記です。
公式の例
選んでいるレイヤーを隠す、公式ドキュメントの例です。
const {app, action, core} = require('photoshop');
async function hideActiveLayer() {
return await action.batchPlay([{
_obj: "hide",
_target: [{_ref: "layer", _enum: "ordinal"},
{_ref: "document", _enum: "ordinal"}]
}], {});
}
let result = core.executeAsModal(hideActiveLayer, {commandName: "Hide Layer"});| キー | 意味 |
|---|---|
| _obj | 実行するコマンドの名前(hide など) |
| _target | 対象。具体的なもの(レイヤー)から順に、住所と逆の順で並べる |
| _ref | 対象の種類(layer・document など) |
| _enum: “ordinal” | 今選んでいるもの |
executeAsModal
Photoshop の状態を変えるコマンドは、executeAsModal の中で実行しなければなりません。
commandName は必ず指定し、処理中のプログレスバーの上に表示されます。
コードを取る方法
Copy As JavaScript
- Photoshop の開発者モードを有効にする(UDT の Developer Mode)
- アクションパネルで、アクションか、その中の手順を選ぶ
- パネルのメニューから「Copy As JavaScript」を選ぶ
- クリップボードに、executeAsModal と batchPlay の形のコードが入る
「Copy As JavaScript」は、開発者モードが有効なときだけメニューに出ます。
Record Action Commands
開発者モードでは、「Plugins → Development → Record Action Commands…」で、画面の操作を記述子としてファイルに記録できます。
通知を見張る
action.addNotificationListener([‘all’], …) で、実行されたコマンドを見張る方法も公式に載っています(開発者モードのときだけ動く)。
Alchemist
記述子を調べるプラグインとして Alchemist がよく使われますが、Jaroslav Bereza さんが作ったもので、Adobe の公式のツールではありません。
オプション
| オプション | 働き |
|---|---|
| synchronousExecution | 終わるまでスクリプト全体を止めて値を返す(なるべく使わないよう案内) |
| continueOnError | エラーが出ても続ける(初期値 false) |
| immediateRedraw | すぐ画面を描き直す(初期値 false) |
| historyStateInfo | Photoshop 2022 で非推奨。executeAsModal の履歴の機能を使う |
記述子ごとの _options.dialogOptions では、ダイアログの出し方を “silent”(初期値)・”dontDisplay”・”display” から選べます。
ExtendScriptのコードとの対応
ExtendScript の ScriptingListener で取ったコード(charIDToTypeID・ActionDescriptor)は、そのままでは UXP で動きません。
UXP では、同じ操作を「Copy As JavaScript」で取り直すのが近道です。
ExtendScript 側のコードの読み方は、PhotoshopのAction Managerの読み方で紹介しています。
まとめ
- batchPlay は UXP から Photoshop のコマンドを直接実行する
- 記述子は _obj・_target・_ref。_target は具体的なものから
- 状態を変えるなら executeAsModal の中で。commandName は必須
- コードは Copy As JavaScript(開発者モード)で取る
参考:Adobe「batchPlay」「executeAsModal」(2026年9月29日に確認)。
