Amazonで商品を見るセール会場へ

Photoshop JSXでグループ内も名前で選択する|再帰検索・同名・階層指定

Photoshopのグループ内・孫グループ内も含め、指定した名前を探して1つ選ぶJSXです。全階層で一致が1件の場合だけ選び、同名が複数ある場合は停止します。同名を親グループで区別する場合は、後半の名前配列で指定する例を使います。文書直下だけを探す場合は直下の名前選択へ進んでください。

2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、下の2つの全体コードを書き換えずに保存し、[ファイル]→[スクリプト]→[参照…]から実行して確かめました。

孫グループの中の1件は選ばれ、別のグループに同じ名前があると全階層の検索は止まり、名前の配列では親を指定して区別できました。

非表示のレイヤーは、選ばれると同時に表示に変わります。

コードはレイヤーの移動・名前変更・保存を呼びませんが、選択状態は変わります。

ロック、複数選択、アートボード、閉じたグループの中、Mac版は確かめていないので、自作の文書で試してから使ってください。

くわしくは「Photoshop 2026で実行した結果」にまとめています。

目次

名前検索・階層指定・複数選択の違い

目的使う方法
子・孫も含め同名が1件だけ全階層を走査して一致数を確認してから選択。
別グループに同名がある親から子への名前配列で、各段階の一致が1件か確認。
同名を全部選びたいこの例の対象外。複数選択の追加・解除とIDを使う方法を別に設計する。
非表示のまま選びたいDOM選択の実表示を確認する。旧MkVs=falseの設定とDOM代入の挙動を同じ保証にしない。

Photoshop 2026(27.11.0)で確かめたところ、このページのコードのdoc.activeLayerへの代入では、非表示のレイヤーは選ばれると同時に表示に変わりました。

非表示のまま選びたい場合は、このページのコードでは足りません。

スポンサーリンク

全階層を探し、一致が1件だけなら選択する

新しい全体コードをUTF-8の.jsxとして保存し、ファイル→スクリプト→参照から実行します。旧コードへ追記せず、別ファイルとして1回実行してください。メニューへの登録は動作を確認した後に行います。

LayerSetだけを再帰処理し、グループ自体の名前も候補に含めます。先に見つかった1件で打ち切らず、全体を調べることで別グループの同名も検出します。大規模・極端に深い階層の速度や再帰上限は未測定です。

#target photoshop
(function () {
    if (app.documents.length === 0) { alert("文書を開いてください。"); return; }
    try {
        var doc = app.activeDocument;
        var targetName = "CGM_target";
        var matches = [];
        function collect(container) {
            for (var i = 0; i < container.layers.length; i++) {
                var layer = container.layers[i];
                if (layer.name === targetName) { matches.push(layer); }
                if (layer.typename === "LayerSet") { collect(layer); }
            }
        }
        collect(doc);
        if (matches.length !== 1) {
            alert("全階層の一致: " + matches.length + "件。選択を変更しません。");
            return;
        }
        doc.activeLayer = matches[0];
    } catch (error) {
        alert("読取または選択で中断: " + error.message + "\n行: " + error.line);
    }
}());

同名を親グループからの名前配列で区別する

targetPathは親から子への名前の配列です。例ではCGM_GroupA→CGM_Subgroup→CGM_targetをたどります。別グループのCGM_targetと区別できますが、同じ親の下に同名が2つあれば停止します。名前に「/」がある場合も配列の1要素として扱い、区切り文字として分割しません。

#target photoshop
(function () {
    if (app.documents.length === 0) { alert("文書を開いてください。"); return; }
    try {
        var doc = app.activeDocument;
        var targetPath = ["CGM_GroupA", "CGM_Subgroup", "CGM_target"];
        if (targetPath.length === 0) { alert("名前の配列を指定してください。"); return; }
        var container = doc;
        var target = null;
        for (var step = 0; step < targetPath.length; step++) {
            var matches = [];
            for (var i = 0; i < container.layers.length; i++) {
                if (container.layers[i].name === targetPath[step]) { matches.push(container.layers[i]); }
            }
            if (matches.length !== 1) {
                alert("段階 " + (step + 1) + " の一致: " + matches.length + "件。選択を変更しません。");
                return;
            }
            target = matches[0];
            if (step < targetPath.length - 1) {
                if (target.typename !== "LayerSet") {
                    alert("途中の名前がグループではありません。選択を変更しません。");
                    return;
                }
                container = target;
            }
        }
        doc.activeLayer = target;
    } catch (error) {
        alert("読取または選択で中断: " + error.message + "\n行: " + error.line);
    }
}());

途中の名前はグループである必要があります。最後の名前はレイヤーでもグループでも構いません。グループ名を変更した後は配列も更新します。表示名をつないだ文字列だけを固有IDとみなさず、各段階の候補を検査してください。

階層と同名の確認例

自作文書の条件全階層の例名前配列の例
CGM_targetが孫に1つその孫を選択指定した経路なら選択
GroupA/targetとGroupB/target2件で停止親を指定して区別
同じ親の下に同名が2つ2件で停止その段階で停止
対象がグループ自体1件ならグループ選択最後の名前ならグループ選択
名前配列の途中の名前がArtLayer経路を指定しないため、この条件は使わない。ArtLayerも名前の検索候補になる。途中がグループではない旨を表示し、選択代入前に停止。
対象の名前が見つからない全階層の一致0件で停止。見つからない段階の一致0件で停止。
文書を開いていない文書取得前に停止。文書取得前に停止。

表のうち、「CGM_targetが孫に1つ」の全階層の例、「GroupA/targetとGroupB/target」の両方の例、「同じ親の下に同名が2つ」の名前配列の例、「文書なし」の全階層の例は、Photoshop 2026(27.11.0)で実行して表のとおりになりました。

そのほかの行(対象がグループ自体、途中がArtLayer、名前なし)は、実行して確かめていません。

どの回もレイヤーの数と順序は変わらず、選択の置き換えはヒストリーにも積まれませんでした。

選択後の保存や削除をつなぐ前に、対象を読み違えていないかを確認してください。

Photoshop 2026で実行した結果

2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、上の2つの全体コードを書き換えずに別々の.jsxとして保存し、[ファイル]→[スクリプト]→[参照…]から5回実行しました。

練習用の文書は、上から「メモ」「CGM_GroupA」(中に「CGM_Subgroup」と「A_枠」、CGM_Subgroupの中に「CGM_target」と「影」)「CGM_GroupB」「背景」の順に、別のスクリプトで作りました。

同名のある文書・同じ親に同名が2つある文書も、同じ形で作り分けています。

練習用の文書と、実行前に「メモ」を選んだ状態はスクリプトで用意したので、その部分は確認に含めていません。

グループはすべて開いた状態です。

選択中のレイヤー・表示・ヒストリーは、実行の前後にスクリプトで読み取って比べました。

孫の非表示レイヤーは、選ばれると同時に表示に変わる

実行前と実行後のカンバスとレイヤーパネル。実行前はCGM_targetが非表示でメモが選ばれ、実行後は孫グループの中のCGM_targetが選ばれて赤い四角が表示されている
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。非表示のCGM_targetを全階層の検索のコードで選んだ前後。選ばれると同時に表示に変わった。

「CGM_target」を非表示にした文書で全階層の検索のコードを実行すると、孫グループの中の「CGM_target」が選ばれました。

同時に目のアイコンが付き、カンバスにも赤い四角が表示されました。

ヒストリーは「開く」のままで、文書のタブには未保存の印「*」が付きました。

元の非表示に戻すには、目のアイコンを押します。

別のグループの同名は、全階層では止まり、名前配列なら区別できる

「全階層の一致: 2件。選択を変更しません。」のスクリプト警告と、名前配列のコードでCGM_GroupAの中のCGM_targetが選ばれたカンバスとレイヤーパネル
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。CGM_GroupAとCGM_GroupBの両方にCGM_targetがある文書。全階層の検索は2件で止まり、名前配列では赤い四角のCGM_targetが選ばれた(青い四角はCGM_GroupBの中)。

「CGM_GroupA」の孫と「CGM_GroupB」の子の両方に「CGM_target」がある文書では、全階層の検索のコードは「全階層の一致: 2件。選択を変更しません。」と出して止まりました。

[OK]で閉じた後も、選択は実行前の「メモ」のままでした。

同じ文書で名前配列のコードを実行すると、CGM_GroupA→CGM_Subgroup→CGM_targetの順にたどり、赤い四角の「CGM_target」が選ばれました。

CGM_GroupBの中の青い四角の「CGM_target」は選ばれませんでした。

同じ親の下に同名が2つあると、名前配列でも止まる

CGM_Subgroupの中にCGM_targetが2つあるレイヤーパネルと、「段階 3 の一致: 2件。選択を変更しません。」のスクリプト警告
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。同じ親の下にCGM_targetが2つある文書で名前配列のコードを実行したときの警告。選択は変わらなかった。

CGM_Subgroupの中に「CGM_target」が2つある文書で名前配列のコードを実行すると、「段階 3 の一致: 2件。選択を変更しません。」と出ました。

段階の番号は配列の何番目の名前で止まったかを表していて、ここでは3つ目の「CGM_target」です。

[OK]で閉じた後も、選択は実行前の「メモ」のままでした。

文書を開いていないとき

文書を1つも開いていない状態で全階層の検索のコードを実行すると、「文書を開いてください。」と出て、何も変わりませんでした。

確かめていないこと

閉じたグループの中のレイヤーを選んだときのパネルの開き方、ロックしたレイヤー、2枚以上を選んだ状態からの実行、アートボードは確かめていません。

対象がグループ自体のとき、途中の名前が通常のレイヤーのとき、catchの中断表示、大量のレイヤーでの速度も試していません。

Scriptsフォルダーへの登録、ショートカットの割り当て、Mac版と他の版も確かめていません。

見つからない・選べないときの切り分け

症状確認すること
文書を開いてくださいPSDなどの文書を開く。文書取得より先にapp.documents.lengthを検査する。
一致0件検索範囲、名前の大文字小文字・全角半角・前後の空白を確認。背景の名前は言語や改名で変わる。
同名で停止名前だけでは対象を一意に決められない。親グループを指定するか、一意な名前へ整理してから実行する。
読取または選択で例外error.messageと行番号を記録。不在と断定しない。文書切替・閉じる操作・対象の状態を確認してから再実行する。

表示確認では、選択した行のハイライトとレイヤー名を記録します。レイヤーを選ぶ操作は不透明ピクセルの選択範囲を作る操作とは別です。選択後の処理を追加する前に、期待した対象だけを選んだことを確認してください。

旧コードと過去の画面(参照用)

旧ActionReference.putNameの例は保持しますが、同名を区別するコードではありません。MkVs=falseを明示していても、対象の一意性や全階層の検索結果を保証しません。ScriptingListenerの記録を基にしたことだけで「確実」とは判断しません。executeActionの失敗をすべて不在とする説明も除去しています。

// 選択するレイヤー名を指定
var targetLayer = "背景";

// アクションリファレンスを作成
var idSelect = charIDToTypeID("slct");
var desc = new ActionDescriptor();
var idNull = charIDToTypeID("null");
var ref = new ActionReference();
var idLayer = charIDToTypeID("Lyr ");

// レイヤー名を指定
ref.putName(idLayer, targetLayer);
desc.putReference(idNull, ref);

// レイヤーの可視状態を変更しない設定
var idMakeVisible = charIDToTypeID("MkVs");
desc.putBoolean(idMakeVisible, false);

// アクションを実行
try {
    executeAction(idSelect, desc, DialogModes.NO);
} catch (e) {
    alert("レイヤー '" + targetLayer + "' が見つかりません。");
}
旧記事のAction Managerコード編集画面。下部の結果はActionDescriptor表示で、Photoshopのレイヤーパネルや同名・階層の選択結果は写っていません。
旧記事のAction Managerコード編集画面。下部の結果はActionDescriptor表示で、Photoshopのレイヤーパネルや同名・階層の選択結果は写っていません。 過去の掲載画像で、撮影日・Photoshopの詳細版は未確認です。

参照資料と確認範囲

Adobe Photoshop Scripting Guide 2020の38〜39ページ(並び順・レイヤーセット)、JavaScript Scripting Reference 2020のDocument、ArtLayers、Layers、LayerSetを参照しています。2020年版のExtendScript資料で、現在のPhotoshopで実機確認した記録ではありません。

Adobeのレイヤー選択手順ではパネルでの選択と、サムネールからのピクセル選択を区別しています。UXPのLayers資料は別の実行環境です。このJSXを.psjsに改名するだけでは移行できません。UXPスクリプトの実行方法で分担を確認してください。

旧配布と関連する手順

旧配布はGitHubの元コードに残しています。公開フォルダーの01.jsは今回の新しい例へ更新していません。実行する場合は、このページの新しい全体コードを別の.jsxとして保存してください。

スポンサーリンク

よくある質問:全階層から名前で1つのレイヤーを選択する

このスクリプトでは何ができますか?

Photoshopのグループ内・孫グループ内も含め、指定した名前を探して1つ選ぶJSXです。全階層で一致が1件の場合だけ選び、同名が複数ある場合は停止します。文書直下だけを探す場合は、直下の名前選択の記事へ進んでください。

同じ名前のレイヤーが複数ある場合はどうなりますか?

名前だけでは対象を一意に決められないため、停止します。親グループを指定するか、一意な名前へ整理してから実行してください。先に見つかった1件で打ち切らず、全体を調べることで、別グループの同名も検出します。

同じ名前のレイヤーを親グループで区別できますか?

できます。targetPathという、親から子への名前の配列で指定します。記事の例ではCGM_GroupA→CGM_Subgroup→CGM_targetをたどり、別グループのCGM_targetと区別できます。ただし、同じ親の下に同名が複数ある場合は区別できません。

同名のレイヤーをすべて選べますか?

この例の対象外です。複数選択の追加・解除とIDを使う方法を、別に設計する必要があります。

グループ自体の名前も検索の対象ですか?

はい。LayerSetだけを再帰処理し、グループ自体の名前も候補に含めます。

非表示のレイヤーを選ぶと、表示は変わりますか?

はい。

2026年10月19日にPhotoshop 2026(27.11.0)で確かめたところ、非表示の「CGM_target」は選ばれると同時に表示に変わりました。

ヒストリーには積まれないので、元に戻すときは目のアイコンを押して非表示に戻してください。

見つからないときは何を確認しますか?

一致0件の場合は、検索範囲、名前の大文字小文字・全角半角・前後の空白を確認します。背景の名前は言語や改名で変わります。例外が出た場合は、error.messageと行番号を記録し、不在と断定せず、文書切替・閉じる操作・対象の状態を確認してから再実行してください。文書がない場合は、先にapp.documents.lengthを検査します。

このコードはPhotoshopで動作確認されていますか?

はい。

2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、[ファイル]→[スクリプト]→[参照…]から2つのコードを実行して確かめました。

確かめたのは、孫に1つ(非表示)、別のグループに同名、同じ親に同名が2つ、文書なしの場合です。

大規模・極端に深い階層の速度や再帰上限は未測定です。

コードはレイヤーの移動・名前変更・保存を呼びませんが、選択状態と非表示のレイヤーの表示は変わるため、自作の文書で確認してください。

旧コードやUXPとの関係はどうなっていますか?

旧ActionReference.putNameの例は保持していますが、同名を区別するコードではなく、対象の一意性や全階層の検索結果を保証しません。また、UXPのLayers資料は別の実行環境で、このJSXを.psjsに改名するだけでは移行できません。最新の仕様は、Adobeの公式情報で確認してください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Photoshopのおすすめ書籍

動作要件とPCの確認項目

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次