Photoshopの画像アセット機能を使うと、指定したレイヤーやドキュメントからPNGやJPG画像を自動で書き出せます。
ただし、スクリプトで自動処理する際は、Generatorのバックグラウンド処理のタイミングに注意が必要です。
本記事では、選択したPSDを画像アセット機能で書き出すスクリプトの手順と注意点を解説します。
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで、PSDを2つ以上選ぶと最後の1つしか書き出されなかったSTEP.3のコードを直しました。
直した版でPSDを3つ選んで実行し、3つとも書き出されるのを確かめています。
STEP.2の欄にはSTEP.1と同じコードが載っていたので、画像アセットをオンにするコードに差し替えました。
何が起きていて何を変えたかは「STEP.3のコードを直した理由」にまとめています。
画像アセット機能とは
Photoshopの画像アセット機能は、レイヤー名を拡張子付きに変更するだけで画像を自動書き出しできる機能です。
画像アセットをオンにすると、レイヤー名に拡張子を付けたレイヤーが、その形式の画像として自動で書き出されます。
書き出し先は、PSDと同じフォルダーにできる「PSD名-assets」フォルダーです。
倍率は、レイヤー名の先頭に書きます。
ボタン.pngアイコン.jpg50% banner.png→ 50%に縮小したPNGを書き出し
2026年10月17日に確かめたところ、拡張子の無い「バナー 50%」という名前のレイヤーは書き出されませんでした。
2026年10月20日の確認でも、拡張子の無いレイヤー(練習ファイルの「draft」)は書き出されませんでした。
スクリプトで画像アセットを書き出す手順
先にPSDと既存のassetsフォルダーを退避し、コピーで試してください。STEP.1は元PSDを上書き保存して閉じます。作業中の未保存変更があるPSDも先に保存して閉じてください。以下は3つの役割に分けた例です。すでに命名済みならSTEP.1は不要で、STEP.3はSTEP.2の呼び出しも含みます。
RenameForAssets.jsx(画像アセットのルールに従ってレイヤーをリネーム)EnableAssets.jsx(ドキュメントの画像アセット機能を有効化)ExportPsdAsAssets.jsx(選択したPSDを開いて画像アセットを書き出し)
Photoshopのスクリプト一覧や関連記事はまとめ記事で確認できます。

STEP.1 画像アセット用にリネーム
対象のレイヤー(例:リネーム)を「PSD名.png」などのアセット規則に合わせて自動変更するスクリプトです。
RenameForAssets.jsx
var doc = app.activeDocument;
doc.activeLayer = doc.layers.getByName("リネーム");
var fileName = doc.name;
var fileName = baseName(fileName);
//レイヤーリネーム
doc.activeLayer.name = fileName + ".png" + "," + "32x32 fileName" + ".png";
//保存して閉じる
doc.save();
doc.close();
//拡張子を抜く
function baseName(str) {
var base = new String(str).substring(str.lastIndexOf('/') + 1);
if (base.lastIndexOf(".") != -1)
base = base.substring(0, base.lastIndexOf("."));
return base;
}2026年10月17日に、alpha.psdを開いて[ファイル]→[スクリプト]→[参照]から実行しました。
レイヤー「リネーム」の名前がalpha.png,32x32 fileName.pngに変わり、確認の窓は出ずに上書き保存して閉じました。
このPSDで画像アセットをオンにすると、元の大きさのalpha.pngと、縦横比を保たずに32×32に縮めたfileName.pngの2つが書き出されました。
STEP.2 画像アセット機能を有効化
前面に開いているPSDで、画像アセットをオンにするスクリプトです。STEP.1の後に単独で試す場合は、閉じられたPSDを開き直してください。
Photoshopに付属しているgenerate.jsxを呼び出して、画像アセットの命令を送ります。
以前この欄にはSTEP.1と同じコードが載っていたので、2026年10月20日に差し替えました。
EnableAssets.jsx
// 前面のドキュメントで画像アセットをオンにする
// [ファイル]→[生成]→[画像アセット]と同じ命令を、Photoshop付属のgenerate.jsxで送る
if (app.documents.length > 0) {
$.evalFile(new File(app.path.fsName + "\\Presets\\Scripts\\generate.jsx"));
} else {
alert("PSDを開いてから実行してください。");
}2026年10月20日に、練習用のshop-b.psdを開いた状態で[参照]から実行しました。
PSDと同じフォルダーにshop-b-assetsフォルダーができ、icon.pngとphoto.jpgが書き出されました。
STEP.3は、この処理を選んだPSDごとに行います。2026年10月29日に確認したPhotoshop 2026付属のgenerate.jsxは、命令の実行で例外が起きると内部で受け取り、gScriptResultにcancelを設定する構造でした。掲載スクリプトはその結果を判定していないため、「オンにしました」という窓や表示された件数だけでは、すべてのPSDで有効化できた証拠になりません。実際の出力画像をPSDごとに確認してください。この失敗条件は実機では再現していません。
STEP.3 選択したPSDを画像アセットで一括書き出し
選んだPSDをすべて開き、1つずつ画像アセットをオンにするスクリプトです。
書き出しはスクリプトが終わった後に進むので、PSDは閉じずに残します。
注意(2026年10月20日にコードを直しました)
以前のコードは、PSDを2つ以上選ぶと最後の1つしか書き出されず、ほかのPSDは保存されずに閉じられていました。
下は直した版です。
以前のコードを保存している場合は、差し替えてください。
ExportPsdAsAssets.jsx
// 選んだPSDをすべて開き、1つずつ画像アセットをオンにする
// 書き出しはスクリプトが終わってからGeneratorが行うので、ここでは閉じない
var gn_file = new File(app.path.fsName + "\\Presets\\Scripts\\generate.jsx");
var files = app.openDialog();
if (files && files.length > 0) {
for (var i = 0; i < files.length; i++) {
app.open(files[i]);
$.evalFile(gn_file);
}
alert(files.length + " 個のPSDで画像アセットをオンにしました。\n"
+ "書き出しはこの窓を閉じた後に始まります。\n"
+ "必要な画像がすべて出力され、開いて内容を確認できてから、PSDを閉じてください。");
}[ファイル]→[スクリプト]→[参照]で、保存したファイルを選んで実行します。
PSDを選ぶ窓が開くので、書き出したいPSDをまとめて選び、[開く]を押します。
すべて開き終わると「画像アセットをオンにしました」という窓が出ます。
[OK]で窓を閉じると書き出しが始まり、PSDごとに「PSD名-assets」フォルダーができます。
フォルダーの生成だけでは完了と判断せず、必要な画像の数・名前・寸法・内容を確認してからPSDを閉じてください。処理中に自分でPSDを編集していない場合は保存せずに閉じます。今回、コード末尾の案内文もこの確認内容に合わせました。画像の処理部分は変更していません。
ExtendScript Toolkitからの実行は確かめていません。
STEP.3を実行した結果
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで、直した版を[ファイル]→[スクリプト]→[参照]から実行しました。
試したのは、拡張子付きの名前のレイヤーを2つずつ入れた練習用のPSD 3つ(shop-a・shop-b・shop-c)です。
PSDは別のプログラムで作ったので、ファイルの用意は確認に含めていません。
このときジェネレーターは、事前の確認でオンになった状態でした。

3つ選んで[開く]を押すと、3つのPSDが開き、完了の窓が出ました。
窓が出ている間は、まだ何も書き出されていませんでした。
[OK]を押した数秒後には、3つの「-assets」フォルダーができていました。
| PSD | 書き出されたファイル(大きさ) |
|---|---|
| shop-a.psd | button.png(160×60)、banner.png(110×50。元の220×100を50%) |
| shop-b.psd | icon.png(96×96)、photo.jpg(240×160) |
| shop-c.psd | logo.png(200×80)。拡張子の無い「draft」は書き出されない |
PSDを1つだけ選んだ場合も、同じように書き出されました(ジェネレーターがオフの状態から実行)。
書き出しの後も、PSDのファイル自体は変わっていませんでした(ファイルのハッシュ値で確認)。
STEP.3のコードを直した理由

以前のコードは、選んだPSDごとにPhotoshopを外から呼び出すバッチファイル(temp.bat)を作り、PSDを開くたびに書き出し用のスクリプト(temp.jsx)を実行させていました。
外から呼び出したスクリプトは、実行の前に毎回確認の窓が出ます。
バッチファイルはその答えを待たずに、3秒後に次のPSDを開いていました。
確認の窓に答えた時点では次のPSDも開いているので、temp.jsxの1行目が古いほうのPSDを保存せずに閉じ、そのPSDは書き出されませんでした。
2026年10月17日にPSDを2つ選んで3回試し、3回とも最後のPSDの分だけが書き出されました。
もう1つの理由は、書き出しがスクリプトの終わった後に進むことです。
2026年10月20日に、PSDを開いて画像アセットをオンにした後、スクリプトの中で15秒待っても何も書き出されず、スクリプトが終わってから約2秒で書き出されました。
この15秒の確認は、画面からではなく、スクリプトを外から呼び出して行いました。
そこで直した版では、バッチファイルを使わず、Photoshopの中で選んだPSDをすべて開いて1つずつ画像アセットをオンにし、閉じずにスクリプトを終えるようにしました。
直した版では外から呼び出さないので確認の窓は出ず、スクリプトがほかの文書を閉じることもありません。
スクリプト実行時の注意点
- 書き出しはスクリプトが終わってから進む
- この記事の同期処理の中で待機する方法では、書き出し完了を待ってからPSDを閉じる動作は確認できませんでした。
$.sleep(5000);のように待っても、待っている間は書き出されませんでした(15秒待って確認)。
- 選んだPSDは開いたまま残る
- 必要な出力画像がすべてそろい、開いて内容を確認できてから閉じます。自分で加えた未保存の変更がある文書を、保存せずに閉じないでください。
- 書き出しの前に閉じたPSDの画像は、書き出されません。
- 確かめたのはPSD 3つまでで、数十個を一度に開いた場合は確かめていません。
- ジェネレーターの設定がオンに変わる
- [編集]→[環境設定]→[プラグイン]の「ジェネレーターを有効にする」がオフでも、実行するとオンに変わりました。
- 全体の設定を元に戻すときは、チェックを外して[OK]を押します。特定の文書だけ自動生成を止める場合、現在のAdobe公式手順では[ファイル]→[自動処理]→[Generatorプラグイン]→[画像アセット]の選択を解除します。掲載コードのコメントにある[ファイル]→[生成]は旧メニューの表記です。この現在のメニュー操作は今回実機では確認していません。
- 以前案内していたバッチからの呼び出しは使わない
- バッチ(.bat)ファイルからPhotoshopを呼び出す方法は、上のとおり複数のPSDで失敗しました。
- ドロップレット(.exe)から呼び出す方法は確かめていません。

Mac版、ほかの版、ExtendScript Toolkitからの実行、日本語や空白を含むフォルダー名は確かめていません。
この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
読み込みと書き出しの記事は、ほかにもあります。




まとめ
- レイヤー名のリネームと書き出し設定をスクリプトで自動化可能
- 複数のPSDファイルに対して一括で処理を実行可能
- 書き出しはスクリプトが終わってから進むので、PSDは閉じずに終える
- 必要な出力画像の内容まで確認してからPSDを閉じる
スクリプトを活用することで、多数のPSDからの画像アセット書き出し作業を効率化できます。
よくある質問:選択したPSDを画像アセットで一括書き出す
画像アセット機能とは、何ですか?
レイヤー名に拡張子を付けたレイヤーを、その形式の画像として自動で書き出す機能です。
画像アセットをオンにすると、PSDと同じフォルダーの「PSD名-assets」フォルダーに書き出されます。
倍率は50% banner.pngのように、レイヤー名の先頭に書きます。
スクリプトで画像アセットを書き出す手順は?
処理は、3つのスクリプトに分けています。
RenameForAssets.jsxは、レイヤー「リネーム」の名前を「PSD名.png」などの書き方に変えて、上書き保存して閉じます。
EnableAssets.jsxは、前面のPSDで画像アセットをオンにします。
ExportPsdAsAssets.jsxは、選んだPSDをすべて開き、それぞれで画像アセットをオンにします。
スクリプトは、どこから実行しますか?
[ファイル]→[スクリプト]→[参照]から実行します。
2026年10月20日に、Photoshop 2026でこの方法で確かめました。
ExtendScript Toolkitからの実行は確かめていません。
スクリプト実行中に、書き出されないことがあるのは、なぜですか?
画像アセットの書き出しは、スクリプトが終わってから進むためです。
スクリプトの中で15秒待っても、待っている間は書き出されませんでした。
書き出しの前にPSDを閉じると、そのPSDの画像は書き出されません。
書き出されない問題には、どう対策しますか?
スクリプトではPSDを閉じずに終え、必要な出力画像がすべてそろい、内容を確認できてから閉じます。フォルダーの存在だけでは書き出し完了を証明できません。
この記事のSTEP.3は、そのように直した版です。
以前案内していたバッチ(.bat)からの呼び出しは、複数のPSDで失敗しました。
複数のPSDを、まとめて処理できますか?
STEP.3は選んだファイルを順に開いて画像アセットの命令を送ります。拡張子の検査やファイルごとの例外処理はないため、保存済みPSDだけを選び、途中の読み込み失敗時は処理済みと未処理を確認してください。
2026年10月20日に、3つ選んで3つとも書き出されるのを確かめました。
記事のコードは、どこにありますか? 最新はどこで確認しますか?
この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで動作を確かめました。
Mac版とほかの版は確かめていません。
最新の情報はAdobe公式の資料で確認してください。
