UXP for Photoshop の開発準備

UXP for Photoshop の開発準備

シリーズ投稿。Photoshopフィルタとしてsbsarを使う

とりあえずUXPでアプリを動かす手順を公式のガイドに沿ってメモ。
スタートアップガイド https://developer.adobe.com/photoshop/uxp/2022/guides/

UXP Developer tool での作業

DEVツールのインストール

Adobe UXP Developer Tool
ここの手順に従うが、普通にCCアプリからインストールできた。

プラグインの作成

DEVツールを立ち上げ作業開始。

CreatePluginからプラグインを作成。

バージョンを指定しないと作れない。洗濯させてくれてもよさそうが、手入力の必要がある。今回は作業時の最新バージョン24.2とした。
IDは公開しないのでデフォルトのまま。公開する場合はwebのコンソールでIDを発行する必要がある。以前は開発用でも正式なIDが必要だったような。テンプレートは今回UIは作らないのでリアクトやwebviewのものではなく、一番簡単かもしれないquick layers starter というものを使う。

選択したフォルダにファイルがたくさん作れられたが、ライブラリ依存?を解決するコマンド実行が必要らしいがいったん無視して進む。→ 追記:今回選択したテンプレートでは必要なかった。

プラグインの開発準備

Plugin workflows ここの内容に沿って行う。

DEVツールに作成したプラグインが一覧で並ぶようになったので、おもむろにLOADを実行してみたが、失敗する。

Photoshopを立ち上げてLOADしたところ、成功し、フォトショップ側にパネルが表示された。

新規ドキュメントを作成して、レイヤーを作成してボタンを押すとレイヤー一覧が更新される。これだけのアプリだろうか?ただ、自分が最終的に作りたいアプリはレイヤー名を参照するので参考にはなりそう。

ヘッダメニューにも項目が増えていた。パネルを表示するもののようだ。

Photoshopと接続している状態では、DEVツール上のメニューから実行できる項目が増えていた。Reload、Watch、Debug、Logsは名前からして便利そうだ。
→Watchはreloadを自動でするもの。Package はプラグイン一般公開時に使うもののようだ。DebugとLogsは普通にChromeの開発ツールが開いた。ブレークポイントなども使えるらしい。

htmlはいたって普通

パネルの構成は、htmlからjsを読み込んでいるだけ。cssはインライン記述。(デフォルトcssとしてAdobeのCSSが当たっているようだが)。先ほどのファイル一覧から考えてhtml/jsでプラグイン本体を開発、設定はmanifest.jsonに記述、その他jsライブラリ依存をpackage.jsonで管理、だろう。なんだ簡単じゃないか。

function showLayerNames() {
    const app = require("photoshop").app;
    const allLayers = app.activeDocument.layers;
    const allLayerNames = allLayers.map(layer => layer.name);
    const sortedNames = allLayerNames.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
    document.getElementById("layers").innerHTML = `
      <ul>${
        sortedNames.map(name => `<li>${name}</li>`).join("")
      }</ul>`;
}

document.getElementById("btnPopulate").addEventListener("click", showLayerNames);

jsも(何かライブラリを使わないなら)require(“photoshop”).app あたりがポイントなだけで、あとは非常にベタだ。app以下はjsxと同じ感じなのだろうか。違うものであってほしい。

README.mdの中身

生成ファイルの中にreeadmeがあるので軽くまとめてみる。

  • フォトショップ開発のスタートに最適なサンプルだよ、何のフレームワークにも依存してないよ、バニラ(素のJSという意味だったはず)だから。
  • フォトショが起動した状態で、Devツールからプラグイン起動してね、プラグインはあらかじめ作ってね。
  • あとはここをみよ https://developer.adobe.com/photoshop/uxp/2022/guides/devtool/udt-walkthrough/
  • フォトショのドキュメントを編集する方法のリンク ※ 後述
  • ファイルを書き出す方法のリンク ※ 後述

最後の2つのリンクは役に立ちそうなので以下に個別にまとめた。

フォトショのドキュメントを編集する

https://developer.adobe.com/photoshop/uxp/2022/guides/getting-started/editing-the-document/

ざっくり解説。

  • テンプレートのレイヤー一覧表示プラグインを改造してレイヤー削除プラグインにする。
  • layer.name を書き換えるコードに変更すると、モーダルスコープじゃなきゃダメ!というエラーが出る。
  • 他の処理と編集がかぶらないように、特別な書き方をする。具体的にはexecuteAsModal関数で処理をすべて囲む。
  • 何度も実行してレイヤー名が長くなっていくのを防ぐコード例(重要ではない)。

ファイルを書き出す

https://developer.adobe.com/photoshop/uxp/2022/guides/getting-started/writing-a-file/

ざっくり解説。

  • テンプレートさらに改造してレイヤー情報をtsvファイルに書き出す。
  • htmlにExport Reportボタンを追加する。
  • jsにレイヤー情報のテキストを作成し、ファイルを書き出すコードを追記する。
    window.require(“uxp”).storage でファイルアクセス系のモジュール参照が取れる。
  • ファイルの保存は非同期なのでawait使うよ。
  • ファイル名はユーザーが保存ダイアログで変更できる。ちゃんとtsv書き出される。
  • UXP API も確認してね。
    https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/

リアクト?

また、 Working with React ここにリアクト連携する記事がまとまっているが、今回はUIをメニュー以外使わないつもりなのでざっと読む。これもざっくりまとめると

  • リアクトに限らず、外部jsフレームワークを利用する際のことも述べている。
  • manifest.jsonが2つ必要になる、開発用と配布用。配布用を参照して開発するとリロードなどが行えなくなるぞ。
  • manifest.json 使うのがおすすめだが、オプションからごのごにょするとそうじゃなくてもできる。
  • 外部フレームワークを利用する場合は、npm install とか yarn install で依存を解決してね。DEVツールは何もしない。
  • バンドラー系のフレームワークを使う際は、DEVツールはどのようにビルドを行うか知りえないので自分でwatchの準備をしてほしい。

事前準備はこんなものでよさそう。

NEXT TODO

今回はここまで。次回は手を動かす、まで行きたい。。行かないかな。

日本語参考記事

Just Diary カテゴリー:UXP 一覧
ここに UXP開発関連のたくさんのまとめがされていた。ありがたし。一通り公式サイトベースで作業し終わった後に確認して答え合わせをしよう。

関連する投稿

カテゴリ最初の投稿

次の投稿

Previous post フォトショップのフィルタとしてsbsarを使いたい
Next post UXP for Photoshop:manifestの作成