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/target | 2件で停止 | 親を指定して区別 |
| 同じ親の下に同名が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」が選ばれました。
同時に目のアイコンが付き、カンバスにも赤い四角が表示されました。
ヒストリーは「開く」のままで、文書のタブには未保存の印「*」が付きました。
元の非表示に戻すには、目のアイコンを押します。
別のグループの同名は、全階層では止まり、名前配列なら区別できる

「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件。選択を変更しません。」と出ました。
段階の番号は配列の何番目の名前で止まったかを表していて、ここでは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 + "' が見つかりません。");
}

参照資料と確認範囲
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の公式情報で確認してください。
