Photoshopの文書直下にあるレイヤーまたはグループを、名前の完全一致で1つ選ぶJSXです。グループ内へ再帰検索せず、同名が2件以上ある場合は選択を変更せず停止します。グループ内の子・孫を探す場合は、階層を含めて名前で選択する記事を使います。
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで下のコードを実行し、表の5つの条件と文書なしの動きを画面で確かめました(結果は「Photoshop 2026で実行した結果」の節)。
コードはレイヤーの移動・名前変更・保存を呼びませんが、選択状態は変わります。
非表示のレイヤーは、選ばれると同時に表示に変わりました。
ロックとアートボードの挙動は確かめていないので、自作の文書で確認してください。
doc.layers.getByNameが探す範囲
doc.layersは文書直下のArtLayerとLayerSetを含むコレクションです。グループの子はそのグループのlayersで取得します。getByNameは指定したコレクションで最初に一致した要素を返すため、同名の別要素まで一意に指定したことにはなりません。
| 指定 | 対象 |
|---|---|
| doc.layers | 文書直下のレイヤーとグループ。子・孫は含めて検索しない。 |
| doc.artLayers | 文書直下のArtLayer。グループ自体を対象にしない。 |
| group.layers | 指定したグループ直下のレイヤーとグループ。 |
| 名前の比較 | この新例は===による完全一致。部分一致・正規表現・自動の空白除去は行わない。 |
文書直下で一致が1件のときだけ選択するコード
新しい全体コードをUTF-8の.jsxとして保存し、ファイル→スクリプト→参照から実行します。旧コードへ追記せず、別ファイルとして1回実行してください。メニューへの登録は動作を確認した後に行います。
targetNameのCGM_targetだけを対象の名前へ変更します。候補を読み終えてから選ぶため、不在や同名で停止した場合はactiveLayerへ代入しません。グループも同名検索の候補に含めます。
#target photoshop
(function () {
if (app.documents.length === 0) { alert("文書を開いてください。"); return; }
try {
var doc = app.activeDocument;
var targetName = "CGM_target";
var matches = [];
for (var i = 0; i < doc.layers.length; i++) {
if (doc.layers[i].name === targetName) { matches.push(doc.layers[i]); }
}
if (matches.length !== 1) {
alert("文書直下の一致: " + matches.length + "件。選択を変更しません。");
return;
}
doc.activeLayer = matches[0];
} catch (error) {
alert("読取または選択で中断: " + error.message + "\n行: " + error.line);
}
}());
自作サンプルで確認する条件
| 配置・条件 | このコードの期待値 |
|---|---|
| 文書直下にCGM_targetが1つ | その行を選ぶ。 |
| CGM_targetはグループ内だけ | 文書直下では0件となり、現在の選択を保持。 |
| 直下にCGM_targetが2つ | 2件で停止し、どちらも推測して選ばない。 |
| 同名が直下とグループ内に1つずつ | 直下の1件だけを対象にする。階層全体の重複検査ではない。 |
| CGM_targetというグループが直下に1つ | グループ自体を選ぶ。子を自動で全部選択しない。 |
上の表は実行前に決めた期待値で、5つとも実機で期待値どおりになりました(次の節)。
ただし、選ばれた行が非表示だった場合は表示に変わります。
実行前に2枚を選んでいても、実行後は1枚だけの選択になり、元の選択には戻りません。
選択を戻す場合は、実行前に選ばれていた行を記録して手動で戻します。
activeLayerを保存するだけで複数選択全体を復元したとは扱いません。
Photoshop 2026で実行した結果
2026年10月20日に、Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)で、上のコードを改変せずに[ファイル]→[スクリプト]→[参照…]から5回実行しました。
練習用の文書(800×500px)と、実行前のレイヤーの選択はスクリプトで用意しました。
実行後の選択・表示・ヒストリーは、画面とスクリプトでの読み取りの両方で確かめました。
文書直下の1件だけが選ばれる
文書直下に「CGM_target」(非表示)、グループ「CGM_Group」の中にも「CGM_target」を置きました。
ほかに、大文字小文字だけが違う「cgm_target」と、末尾に半角の空白がある「CGM_target 」も置きました。
実行前は、cgm_targetとグループの中のCGM_targetの2枚を選んでおきました。
実行すると、文書直下のCGM_targetだけが選ばれ、ほかの2枚の選択は外れました。
cgm_targetと、末尾に空白のある名前は選ばれませんでした。
非表示だったCGM_targetは、選ばれると同時に表示に変わり、文書に未保存の印が付きました。
ヒストリーには項目が増えなかったので、表示を戻すときはレイヤーパネルの目のアイコンで非表示にします。

0件・2件では警告だけで、選択は変わらない
CGM_targetがグループの中だけにある文書では、「文書直下の一致: 0件。選択を変更しません。」と出ました。
文書直下にCGM_targetが2つある文書では、「文書直下の一致: 2件。選択を変更しません。」と出ました。
どちらも[OK]の後は実行前に選んでいたCGM_otherのままで、ヒストリーも未保存の印も変わりませんでした。
![「文書直下の一致: 0件。選択を変更しません。」と「文書直下の一致: 2件。選択を変更しません。」の警告と、[OK]の後もCGM_otherが選ばれたままのレイヤーパネル](https://cg-method.com/photoshop/wp-content/uploads/2026/10/cgm-20261020-ps-8-stop.jpg)
同じ名前のグループはグループ自体が選ばれる
CGM_targetという名前のグループ(中にCGM_child1とCGM_child2)がある文書では、グループ自体が選ばれました。
中のレイヤーは選ばれず、開いていたグループは開いたままでした。

文書を開いていないとき
文書を開いていない状態で実行すると、「文書を開いてください。」と出て止まりました。
5回とも、定規の単位・描画色・背景色・ダイアログの表示設定は実行前後で変わりませんでした。
ロックしたレイヤー、アートボード、途中のエラーで中断する経路、Mac、ほかの版は確かめていません。
見つからない・選べないときの切り分け
| 症状 | 確認すること |
|---|---|
| 文書を開いてください | PSDなどの文書を開く。文書取得より先にapp.documents.lengthを検査する。 |
| 一致0件 | 検索範囲、名前の大文字小文字・全角半角・前後の空白を確認。背景の名前は言語や改名で変わる。 |
| 同名で停止 | 名前だけでは対象を一意に決められない。親グループを指定するか、一意な名前へ整理してから実行する。 |
| 読取または選択で例外 | error.messageと行番号を記録。不在と断定しない。文書切替・閉じる操作・対象の状態を確認してから再実行する。 |
表示確認では、選択した行のハイライトとレイヤー名を記録します。レイヤーを選ぶ操作は不透明ピクセルの選択範囲を作る操作とは別です。選択後の処理を追加する前に、期待した対象だけを選んだことを確認してください。
旧コードと過去の画面(参照用)
旧コードは文書取得前の文書数検査がありません。getByNameの例外をすべて「存在しない」と表示するため、読取失敗を区別できません。新例は文書数と一致件数を先に検査します。
// 現在のドキュメントを取得
var doc = app.activeDocument;
// レイヤーを指定して取得する関数
function getLayerByName(layerName) {
try {
return doc.layers.getByName(layerName);
} catch (e) {
alert("レイヤー名 '" + layerName + "' は存在しません。");
return null;
}
}
// 指定したレイヤー名を取得(デフォルトは "背景")
var targetLayer = getLayerByName("背景");
if (targetLayer) {
doc.activeLayer = 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です。グループ内へ再帰検索せず、同名が2件以上ある場合は選択を変更せず停止します。グループ内の子・孫を探す場合は、階層を含めて名前で選択する記事を使います。
doc.layersとdoc.artLayersは何が違いますか?
doc.layersは文書直下のレイヤーとグループが対象で、子・孫は含めて検索しません。doc.artLayersは文書直下のArtLayerが対象で、グループ自体は対象にしません。group.layersは指定したグループ直下のレイヤーとグループが対象です。
getByNameだけでは足りないのはなぜですか?
getByNameは指定したコレクションで最初に一致した要素を返すため、同名の別要素まで一意に指定したことにはなりません。そこで新例は、一致件数を先に確認し、1件のときだけ選択します。
名前の比較はどうなりますか?
この新例は完全一致です。部分一致・正規表現・自動の空白除去は行いません。
対象の名前はどこで指定しますか?
コード内のtargetNameのCGM_targetだけを、対象の名前へ変更します。候補を読み終えてから選ぶため、不在や同名で停止した場合は、activeLayerへ代入しません。グループも同名検索の候補に含めます。
選べない・見つからないときは何を確認しますか?
見つからない・選べないときの切り分けの項目を設けています。旧コードは、getByNameの例外をすべて「存在しない」と表示するため、読取失敗を区別できませんでした。新例は文書数と一致件数を先に検査します。選択後の処理を追加する前に、期待した対象だけを選んだことを確認してください。
このコードはPhotoshopで動作確認されていますか?
はい、2026年10月20日にPhotoshop 2026(27.11.0)とWindows 11 Proで、[ファイル]→[スクリプト]→[参照…]から実行して確かめました。
文書直下に1件・グループの中だけ・直下に2件・同じ名前のグループ・文書なしの5つで、選択と警告が期待値どおりでした。
非表示のレイヤーは選ばれると同時に表示に変わります。
ロック、アートボード、Mac、ほかの版は確かめていないので、自作の文書で確認してください。
UXPスクリプト(.psjs)や旧配布との関係は?
UXPのLayers資料は別の実行環境で、このJSXを.psjsに改名するだけでは移行できません。旧配布はGitHubの元コードに残しており、公開フォルダーの01.jsは新しい例へ更新していません。実行する場合は、記事の新しい全体コードを別の.jsxとして保存してください。最新の仕様は、Adobeの公式情報で確認してください。
