モノリスソフトの技術ブログに、「PythonでPhotoshopのツールを作りたい」という記事が2026年8月3日付で公開されています。著者は同社のテクニカルアーティストである菅原氏で、デザイナーチームで共通して使うツールをPythonで作り、Python環境を持たない相手にどう配るか、というところまでを扱った内容です。
記事の構成は、開発環境、ツール構成、Python環境での起動スクリプト、PyInstallerでexe化するバッチ、Photoshopのバージョンごとの起動スクリプト、その他の注意点、まとめです。
使っているもの
- Python 3.13
- photoshop-python-api 0.24.2 — Photoshopを外から操作する部分
- PySide6 6.11.1 — UIの構築
- PyInstaller 6.21.0 — 実行ファイル化
Photoshopの外部操作ライブラリとしてphotoshop-python-apiを選んだ理由は、ドキュメントとサンプルが揃っていることと、保守が続いていることだと説明されています。ライブラリはGitHubで公開されています。
Photoshopの中からツールを起動する経路

この記事でいちばん実務的なのは、ここだと思います。PyInstallerでexeにしたツールは、Photoshopのプラグインではなく、Photoshopに接続する独立したアプリケーションとして動きます。そのため、Photoshopのメニューから起動する導線を別に用意する必要があります。
記事では、Photoshopのバージョンごとに.jsxの起動スクリプトを置いて、そこからexeを叩く形にしています。run_ver2025.jsxのような名前で、環境変数__PS_VERSIONにバージョン文字列を設定してからexeを実行する、という流れです。
複数バージョンが入っているPCで、つなぎ先を間違えないようにする
複数のPhotoshopがインストールされたPCでは、photoshop-python-apiの処理でバージョンを指定しないと正しく動かないことがある、と記事は指摘しています。jsx側で環境変数にバージョンを入れているのは、この対策です。exeから起動したPython側には、どのPhotoshopから呼ばれたのかが見えないためです。
起動スクリプトの側では、まず__PS_VERSIONが設定されているかを確認し、未設定なら「Photoshopの起動用スクリプトから実行してください」と警告を出します。そのうえで、実際に取得したPhotoshopのバージョンと環境変数の値が一致するかを検証します。
さらに、photoshop.Sessionを継承したVersionSessionクラスを作り、静的メソッドで一度バージョンを設定したら以降は常に同じバージョンを使う、という形にしています。
Python環境のない相手に配る
ビルドはbuild.bat1本で、PyInstallerをワンフォルダモード(-D)、上書き許可(-y)、コンソール非表示(-w)、出力名指定(-n)で呼ぶ内容です。生成されたフォルダごと配布します。
ディレクトリは、パッケージのルートに__main__.pyとバージョンごとの.jsx、utils.pyを置き、py_installer/にビルド用のバッチ、ui/にQt Designerのform.uiとコンパイル済みのui_form.pyを入れる構成が示されています。
ウィンドウがPhotoshopの裏に回る問題
独立したアプリケーションである以上、ツールのウィンドウはPhotoshopの画面に隠れることがあります。記事では、ダイアログにQtCore.Qt.WindowStaysOnTopHintを設定して常に前面に出す方法が挙げられています。
全文とサンプルのコードはモノリスソフトの技術ブログで読めます。
管理人のひとこと
Photoshopのツールを外から動かすとき、どの言語で書くかよりも、「Python環境のない人にどう渡すか」と「複数バージョンのどれに繋がるか」で詰まることのほうが多いので、そこを正面から書いてくれているのはありがたい記事でした。
環境変数にバージョンを入れてjsxからexeを呼ぶ、というのは言われてみれば素直な解ですが、自分で当たるまで思いつかない種類の手順だと思います。ウィンドウが裏に回る話も、社内ツールを配ったあとに必ず一度は言われるやつです。
同じくスタジオのテクニカルアーティストが公開したツールの話としては、EAのF1担当TAによる3ds Max用の無料ツール3本も読み口が近いです。



コメント