Photoshopで最上位にある効果レイヤーをパーツ分けされた各レイヤーへ適用するスクリプトを紹介します。
キャラクターイラストの仕上げやLive2Dのパーツ作成に役立ちます。
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで記事のコードを実行し、効果レイヤーが各パーツにどう結合されるかを確かめました。
結果と注意点は「Photoshop 2026で実行した結果」にまとめています。
スクリプトを使用するメリット
- 効果レイヤーをパーツ分けされた各レイヤーへ一括適用できる
- 手作業では手間がかかる大量のパーツ処理を自動化できる
- スクリプトを調整すれば特定のレイヤーのみへの適用にも対応できる
注意点
- 結合先のレイヤーが非表示だと適用できないため、事前に表示状態を確認しておくこと
- 実行前に必ずPSDを複製し、効果レイヤーと結合先の名前が重複していないか確認すること
最上位の効果レイヤーを各レイヤーに適用する手順
本スクリプトを使用すると、各パーツレイヤーに効果レイヤーを個別に適用して統合できます。
STEP.1 スクリプトを保存
- 下記のコードをテキストエディタ等に貼り付けて保存します。
ConbineLayer.jsx
app.bringToFront();
if (app.documents.length === 0) {
// ドキュメントが開かれていない場合は処理をしない。
} else {
var doc = activeDocument;
// グローバルなレイヤーリスト(全レイヤー、選択レイヤー、結合対象レイヤー)
var allLayers = [];
var selectedLayers = [];
var targetLayers = [];
// 全レイヤーを再帰的に収集
collectAllLayers(doc);
// 選択レイヤーを取得
collectSelectedLayers(selectedLayers);
// 全レイヤーから選択レイヤーを除外し、結合対象レイヤーを決定
filterTargetLayers(targetLayers);
if (selectedLayers == null || allLayers == null) {
alert("結合させるレイヤーを選択してください。\n処理をキャンセルします。");
} else {
// 結合対象レイヤーに非表示レイヤーがある場合は処理中断
var allVisible = true;
for (var i = 0; i < targetLayers.length; i++) {
if (!targetLayers[i].visible) {
allVisible = false;
break;
}
}
if (!allVisible) {
alert("結合対象のレイヤーに非表示のレイヤーがあります。\n非表示レイヤーは結合できませんので、削除するか表示状態にしてください。\n\n処理をキャンセルします。");
} else {
var message = "";
for (var i = 0; i < selectedLayers.length; i++) {
message += selectedLayers[i].name + " [" + (selectedLayers.length - i) + "]\n";
}
message += "をすべてのレイヤーに結合します。([]内の数字は結合順)\n\nよろしいですか?\n\n【注意】\n結合させたい効果レイヤーは全てレイヤーの一番上に配置してください。";
if (confirm(message)) {
doc.suspendHistory("結合処理", "mergeLayers()");
alert("結合が完了しました。\n効果レイヤーは非表示にしています。");
} else {
alert("処理がキャンセルされました。");
}
}
}
}
// 各結合対象レイヤーに対して、選択レイヤーを複製・移動・結合する
function mergeLayers() {
for (var i = 0; i < targetLayers.length; i++) {
var backIndex = selectedLayers.length - 1;
for (var j = 0; j < selectedLayers.length; j++) {
selectedLayers[backIndex - j].duplicate();
doc.activeLayer = activeDocument.layers[backIndex - j];
activeDocument.layers[backIndex - j].move(targetLayers[i], ElementPlacement.PLACEBEFORE);
try {
// レイヤークリッピング処理
var idGrpL = charIDToTypeID("GrpL");
var desc = new ActionDescriptor();
var idnull = charIDToTypeID("null");
var ref = new ActionReference();
var idLyr = charIDToTypeID("Lyr ");
var idOrdn = charIDToTypeID("Ordn");
var idTrgt = charIDToTypeID("Trgt");
ref.putEnumerated(idLyr, idOrdn, idTrgt);
desc.putReference(idnull, ref);
executeAction(idGrpL, desc, DialogModes.NO);
} catch (e) {
// クリッピング処理失敗時は無視
}
doc.activeLayer.merge();
}
}
// 結合後、元の選択レイヤーを非表示にする
for (var i = 0; i < selectedLayers.length; i++) {
selectedLayers[i].visible = false;
}
}
// 選択レイヤーを収集(グループ化イベントを利用)
function collectSelectedLayers(selectedLayersArray) {
if (doc.activeLayer) {
var idGrp = stringIDToTypeID("groupLayersEvent");
var descGrp = new ActionDescriptor();
var refGrp = new ActionReference();
refGrp.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
descGrp.putReference(charIDToTypeID("null"), refGrp);
executeAction(idGrp, descGrp, DialogModes.ALL);
for (var i = 0; i < doc.activeLayer.layers.length; i++) {
selectedLayersArray.push(doc.activeLayer.layers[i]);
}
undoAction();
}
}
// アクションを元に戻す
function undoAction() {
executeAction(charIDToTypeID("undo"), undefined, DialogModes.NO);
}
// 全レイヤーから選択レイヤーを除外し、結合対象のレイヤーリストを作成
function filterTargetLayers(targetLayersArray) {
for (var i = 0; i < allLayers.length; i++) {
var isSelected = false;
for (var j = 0; j < selectedLayers.length; j++) {
if (allLayers[i].name === selectedLayers[j].name) {
isSelected = true;
break;
}
}
if (!isSelected) {
targetLayersArray.push(allLayers[i]);
}
}
}
// 再帰的に全レイヤーを収集
function collectAllLayers(layerContainer) {
var childLayers = layerContainer.layers;
for (var i = 0; i < childLayers.length; i++) {
if (childLayers[i].typename === "LayerSet") {
// レイヤーセットの場合は再帰処理
collectAllLayers(childLayers[i]);
} else if (childLayers[i].typename === "ArtLayer") {
allLayers.push(childLayers[i]);
}
}
}
ConbineLayer.jsxを以下のフォルダに保存します。
C:\Program Files\Adobe\Adobe Photoshop CC\Presets\Scripts\上のパスは古い版の表記です。
Photoshop 2026(Windows)では、C:\Program Files\Adobe\Adobe Photoshop 2026\Presets\Scripts にこのフォルダーがあります。
2026年10月の確認では、このフォルダーへの配置と再起動は試していません。
- Photoshopを再起動します。
STEP.2 スクリプトを実行
- [ファイル] → [スクリプト] → [ConbineLayer] を選択します。
- 各パーツレイヤーに効果レイヤーが適用されます。
実行する前に、レイヤーパネルで一番上にある効果レイヤーを選んでおきます。
選んだレイヤーを「効果レイヤー」とし、グループ内も含むArtLayerを結合先の候補にします。ただし除外判定はレイヤーのIDではなく名前です。効果レイヤーと同名のパーツも対象から外れるため、先に名前を区別してください。文字・調整レイヤーなどへの適用は未確認です。
効果レイヤーが2枚以上あるときは、全部を選んでから実行します。
Scriptsフォルダーに置かなくても、[ファイル]→[スクリプト]→[参照]で保存したファイルを選べば実行できました。
実行すると「スクリプト警告」という確認の窓が開き、選んだ効果レイヤーの名前と結合の順番が表示されます。
![スクリプト警告の窓に、光 [2]、影 [1] をすべてのレイヤーに結合します、よろしいですか、と表示され、はいといいえのボタンがある画面](https://cg-method.com/photoshop/wp-content/uploads/2026/10/cgm-20261019-ps-cmb-confirm.jpg)
[はい]を押すと結合が始まり、終わると「結合が完了しました。効果レイヤーは非表示にしています。」という窓が出ました。
コードでは、[いいえ]を押すと「処理がキャンセルされました。」と表示して終わる作りです([いいえ]は今回は試していません)。
Photoshopに関するほかの操作解説は、関連記事から確認できます。

Photoshop 2026で実行した結果
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、上のコードをConbineLayer.jsxとして保存し、[ファイル]→[スクリプト]→[参照]から実行しました。
練習用のファイルと、効果レイヤーを選んだ状態は別のスクリプトで用意したので、確認には含めていません。
実行前:一番上に効果レイヤーを2枚置いた

1000×700ピクセルの文書に、パーツとして「髪」「顔」、グループ「体」の中の「服」、背景を置きました。
一番上には、描画モードを乗算にした「影」と、スクリーンにした「光」の2枚の効果レイヤーがあり、この2枚を選んでいます。
効果レイヤーが非表示になり、見た目はそのまま残った

[はい]を押してしばらくすると完了の窓が出て、「光」と「影」は非表示になっていました。
それでもカンバスの見た目は実行前と同じで、効果が各パーツのレイヤーに結合されたことが分かります。
「髪」「顔」「服」のレイヤーの大きさは実行前と同じで、効果はパーツの形の内側だけに入っていました。
コードは複製した効果レイヤーをパーツの上に移し、クリッピングマスクにしてから下のレイヤーと結合しているためです。
グループの中の「服」にも結合されました。
ヒストリーには「結合処理」が1つだけ増えていました(スクリプトで読み取って確認)。
背景レイヤーにも効果が結合される

上の画像は、実行後に背景レイヤーだけを非表示にして撮ったものです。
パーツには効果が入っていますが、パーツの外にあった「影」の紫の三角形は、背景レイヤーに結合されていました。
背景レイヤーも結合先に含まれ、背景ではクリッピングマスクが効かないため、効果レイヤーの全体がそのまま背景に結合されました。
このコードには、背景を結合先から外す設定はありません。
背景に効果を入れたくない場合は、元PSDを残したうえで、処理対象だけを別文書に複製して試してください。元文書の背景を非表示にするだけでは、非表示レイヤーの検査で中断します。
非表示のレイヤーがあると、何もせずに止まる

同じ構成で「顔」だけを非表示にして実行すると、確認の窓より前に「結合対象のレイヤーに非表示のレイヤーがあります。」という窓が出ました。
[OK]を押すと処理は止まり、どのレイヤーも結合されませんでした。
今回の構成では、非表示のパーツが1枚あると全体が止まりました。元PSDを残し、作業用の複製で対象を表示するか、処理対象だけを別文書へ複製してください。
確かめていないこと
Scriptsフォルダーへの配置と再起動、確認の窓で[いいえ]を押した場合、効果レイヤーを選ばずに実行した場合、効果レイヤーが一番上にない場合、効果レイヤーとパーツが同じ名前の場合、調整レイヤーやテキストレイヤーを使った場合、Mac版と他の版は確かめていません。
この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
レイヤー操作を自動化するスクリプトは、ほかにも紹介しています。




まとめ
- 最上位の効果レイヤーをすべてのパーツレイヤーへ一括適用できる
- 適用後に自動で結合されるため、パーツごとの統合作業を効率化できる
- Live2D用素材の書き出し前処理やイラスト制作に適している
レイヤー処理の手間を減らすために、効果レイヤーの一括適用と統合に本スクリプトを活用してみてください。
よくある質問:最上位の効果レイヤーを各レイヤーに適用して統合する
このスクリプトでは何ができますか?
Photoshopで、最上位にある効果レイヤーを、パーツ分けされた各レイヤーへ一括で適用して統合します。キャラクターイラストの仕上げやLive2Dのパーツ作成に役立ちます。
どんなメリットがありますか?
効果レイヤーをパーツ分けされた各レイヤーへ一括適用できます。手作業では手間がかかる大量のパーツ処理を自動化できます。また、スクリプトを調整すれば特定のレイヤーのみへの適用にも対応できます。
実行前に注意することはありますか?
結合先のレイヤーが非表示だと適用できないため、事前に表示状態を確認してください。構造にかかわらず、実行前にPSDを複製してください。効果レイヤーと同じ名前のパーツは対象から除外されるので、名前も区別しておきます。
2026年10月19日に試したところ、結合先に非表示のレイヤーが1枚でもあると、確認の窓の前に中止の窓が出て、何も結合されませんでした。
また、一番上の効果レイヤーをレイヤーパネルで選んでから実行してください。
適用したあとのレイヤーはどうなりますか?
2026年10月19日にPhotoshop 2026で試したところ、効果は各パーツの形の内側だけに結合され、効果レイヤーは非表示になりました。
背景レイヤーにも、効果レイヤーの全体がそのまま結合されました。
ヒストリーには「結合処理」が1つ増えるだけでしたが、元に戻したいときのために、事前のバックアップを残しておいてください。
スクリプトはどのように導入しますか?
記事のコードをテキストエディタ等に貼り付けてConbineLayer.jsxとして保存し、記事で案内しているフォルダに保存します。保存後にPhotoshopを再起動してください。
どうやって実行しますか?
[ファイル] → [スクリプト] → [ConbineLayer] を選択します。実行すると、各パーツレイヤーに効果レイヤーが適用されます。
Scriptsフォルダーに置かない場合は、[ファイル]→[スクリプト]→[参照]で保存したファイルを選んでも実行できました。
スクリプトのコードはどこで確認できますか?
記事内に掲載しているほか、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
メニューの表示や名称が記事と違う場合はどうすればよいですか?
Photoshopのバージョンによってメニューの名称や配置が変わることがあります。最新の操作手順は、Adobeの公式情報で確認してください。
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、[ファイル]→[スクリプト]→[参照]から実行して確かめました。
背景レイヤーにも効果は入りますか?
入ります。
2026年10月19日に試したところ、背景レイヤーではクリッピングマスクが効かず、効果レイヤーの全体がそのまま背景に結合されました。
このコードには背景を対象から外す設定がありません。背景を処理したくない場合は、元PSDを残して対象だけを別文書へ複製して試してください。
