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

Photoshop JSXでレイヤー名から選択する|文書直下・同名・不在の扱い

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は、選ばれると同時に表示に変わり、文書に未保存の印が付きました。

ヒストリーには項目が増えなかったので、表示を戻すときはレイヤーパネルの目のアイコンで非表示にします。

実行前と実行後のカンバスとレイヤーパネル。実行後は文書直下のCGM_target(オレンジ)だけが選ばれ、非表示から表示に変わっている
2026-10-20撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。文書直下(非表示)とグループの中にCGM_targetを置き、名前の似たレイヤーも並べて実行した結果。一番上の行は末尾に空白のある「CGM_target 」。

0件・2件では警告だけで、選択は変わらない

CGM_targetがグループの中だけにある文書では、「文書直下の一致: 0件。選択を変更しません。」と出ました。

文書直下にCGM_targetが2つある文書では、「文書直下の一致: 2件。選択を変更しません。」と出ました。

どちらも[OK]の後は実行前に選んでいたCGM_otherのままで、ヒストリーも未保存の印も変わりませんでした。

「文書直下の一致: 0件。選択を変更しません。」と「文書直下の一致: 2件。選択を変更しません。」の警告と、[OK]の後もCGM_otherが選ばれたままのレイヤーパネル
2026-10-20撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。CGM_targetがグループの中だけにある文書(上)と、文書直下に2つある文書(下)で実行した結果。

同じ名前のグループはグループ自体が選ばれる

CGM_targetという名前のグループ(中にCGM_child1とCGM_child2)がある文書では、グループ自体が選ばれました。

中のレイヤーは選ばれず、開いていたグループは開いたままでした。

実行前はCGM_other、実行後はグループCGM_target自体が選ばれたレイヤーパネル
2026-10-20撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。CGM_targetという名前のグループがある文書で実行した結果。中のレイヤーは選ばれない。

文書を開いていないとき

文書を開いていない状態で実行すると、「文書を開いてください。」と出て止まりました。

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;
}
旧記事のコード編集画面。下部にExecution finishedとArtLayer 背景が表示されています。Photoshopのレイヤーパネルやグループ内の検索結果は写っていません。
旧記事のコード編集画面。下部にExecution finishedとArtLayer 背景が表示されています。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です。グループ内へ再帰検索せず、同名が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の公式情報で確認してください。

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

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

Photoshopのおすすめ書籍

動作要件とPCの確認項目

周辺機器の優先度

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