Photoshopの文書直下で最上位にあるレイヤーまたはグループを選ぶJSXです。指定はdoc.layers[0]です。グループ内の子まで自動で掘り下げず、表示・非表示にかかわらず、このコレクションの端を対象にします。反対側の端は最下位の選択を参照してください。
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、下の全体コードを書き換えずに保存し、[ファイル]→[スクリプト]→[参照…]から実行して確かめました。
文書直下の一番上のレイヤーが選ばれ、一番上がグループのときは中の子ではなくグループ自体が選ばれました。
ただし、一番上のレイヤーが非表示だと、選ばれると同時に表示に変わります。
コードはレイヤーの移動・名前変更・保存を呼びませんが、選択状態と、この場合の表示状態は変わります。
アートボード、1要素だけの文書、Mac版は確かめていないので、自作の文書で試してから使ってください。
くわしくは「Photoshop 2026で実行した結果」にまとめています。
配列の並び順とグループの扱い
AdobeのScripting Guideは、レイヤーパネルの先頭をスクリプトの先頭として扱うと説明しています。JavaScriptの先頭は0で、末尾はlength−1です。レイヤー名の「レイヤー1」と配列の添字1は別です。Action ManagerのitemIndexや背景による番号差とも混同しません。
| 文書直下のコレクション | 先頭 | 末尾 |
|---|---|---|
| doc.layers(グループを含む) | doc.layers[0] | doc.layers[doc.layers.length - 1] |
| doc.artLayers(グループを含めない) | doc.artLayers[0] | doc.artLayers[doc.artLayers.length - 1] |
| 選択するもの | 文書直下で先頭の要素 | 文書直下で末尾の要素 |
最上位がグループなら、そのグループ自体を選びます。子のうち最上位を選ぶ処理、文書全体で最初のArtLayerを再帰的に探す処理、表示されているArtLayerだけを選ぶ処理は対象範囲が異なります。グループを自動展開したり、子を複数選択したりするコードは含めていません。
文書直下の最上位を選択する全体コード
新しい全体コードをUTF-8の.jsxとして保存し、ファイル→スクリプト→参照から実行します。旧コードへ追記せず、別ファイルとして1回実行してください。メニューへの登録は動作を確認した後に行います。
#target photoshop
(function () {
if (app.documents.length === 0) { alert("文書を開いてください。"); return; }
try {
var doc = app.activeDocument;
if (doc.layers.length === 0) { alert("文書直下にレイヤーがありません。"); return; }
var target = doc.layers[0];
doc.activeLayer = target;
} catch (error) {
alert("読取または選択で中断: " + error.message + "\n行: " + error.line);
}
}());
対象範囲を変える場合
文書直下のArtLayerだけに限定する場合は、コード内の空件数検査・length・添字の参照をすべてdoc.artLayersへ揃えます。文書直下がグループだけならartLayersは0件となるため、0件検査を残します。layersとartLayersのlengthを混ぜると、存在しない添字や別の対象を参照します。
グループ直下の端を選びたい場合は、名前配列でグループを指定する方法で対象を取得し、LayerSetであることを確認してから、そのgroup.layersを使います。activeLayer.parentを無条件で使うと、文書直下のレイヤーではDocumentになり、グループ選択時には選んだグループの親になります。対象グループを明示してから参照してください。
確認用の配置と期待値
| 自作文書の条件 | この例の最上位選択 |
|---|---|
| 上から「CGM_Top」「CGM_Group」「CGM_Bottom」 | CGM_Top |
| 文書直下の最上位がグループ | グループ自体。内部の子を自動で選ばない。 |
| 1要素の文書 | その1要素。先頭と末尾は同じ。 |
| 端が非表示またはロック | 候補からは除外しない。実際の選択・表示の可否はPhotoshopで確認。 |
| 文書なし・読取/選択の例外 | 先に停止し、エラーを不在と決めつけない。 |
確認時は実行前後のレイヤーパネルを撮影し、端の行が選択されたことと、レイヤー数・順序・名前・表示状態を比較します。選択は重ね順の移動や画素の選択範囲作成とは別です。元の複数選択全体の自動復元を含めていないため、実行前の選択も記録してください。
Photoshop 2026で実行した結果
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、上の全体コードを書き換えずにSelectTopLayer.jsxとして保存し、[ファイル]→[スクリプト]→[参照…]から5回実行しました。
練習用の文書は、別のスクリプトで3つ作りました。
1つ目は上から「CGM_Top」「CGM_Group」(中に「CGM_Child_A」「CGM_Child_B」)「CGM_Bottom」「背景」、2つ目は一番上が「CGM_Group」、3つ目は一番上の「CGM_Top」を非表示にしてすべてロックした文書です。
文書を開く操作と、実行前に選んでおくレイヤーもスクリプトで用意したので、その部分は確認に含めていません。
選択中のレイヤーのID・表示・ロック・ヒストリーは、実行の前後にスクリプトで読み取って比べました。
背景や2枚選択からでも、一番上の1枚だけが選ばれる

「背景」を選んで実行すると、一番上の「CGM_Top」が選ばれました。
「CGM_Child_A」と「CGM_Bottom」の2枚を選んだ状態で実行しても、選択は「CGM_Top」の1枚だけに置き換わりました。
元の2枚の選択は戻らないので、必要なら実行前に控えておきます。
レイヤーの数・順序・名前・表示は変わらず、ヒストリーも「開く」のままでした。
一番上がグループなら、グループ自体が選ばれる

グループの中の「CGM_Child1」を選んで実行すると、選択はグループ「CGM_Group」自体に移りました。
グループの中の子は選ばれず、グループは開いたままでした。
一番上が非表示だと、選ぶと同時に表示される

一番上の「CGM_Top」を非表示にし、すべてロックした文書で実行すると、「CGM_Top」が選ばれました。
同時に目のアイコンが付き、カンバスに青い四角が表示されました。
ロックは付いたままで、ヒストリーには何も積まれず「開く」のままでしたが、文書には未保存の印「*」が付きました。
非表示のレイヤーを表示に変えたくない場合は、このコードをそのまま使わないでください。
非表示を含む1つ下を選ぶ記事では、Action Managerの選択で表示を変えない指定を使っています。
その方法を一番上の選択に当てはめた形は、この記事では確かめていません。
文書を開いていないときは止まる

ホーム画面で文書を1つも開いていない状態で実行すると、「文書を開いてください。」と出て、何もせずに止まりました。
確かめていないこと
アートボード、1要素だけの文書、catchで中断する場合の表示は確かめていません。
Scriptsフォルダーへの登録、ショートカットの割り当て、Mac版と他の版も試していません。
旧説明から修正した点
旧コードは「一番上」と説明しながらdoc.layers[doc.layers.length - 1]を指定していました。
これは文書直下の末尾を参照するため、今回の最上位の例はdoc.layers[0]へ修正しています。
旧コードと過去の画面(参照用)
以下は誤った方向の説明を含む旧コードです。参照用に保持し、新しい全体コードと混ぜて実行しないでください。旧画像は編集画面だけで、対象の選択結果や文書の構成を確認できません。
// 現在のドキュメントを取得
var doc = app.activeDocument;
// レイヤーが存在するか確認
if (doc.layers.length > 0) {
// 一番上のレイヤーを取得してアクティブにする
doc.activeLayer = doc.layers[doc.layers.length - 1];
} else {
alert("レイヤーが存在しません。");
}

参照資料と確認範囲
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として保存してください。





よくある質問:文書直下の最上位のレイヤーを選択する
このスクリプトでは何ができますか?
Photoshopの文書直下で、最上位にあるレイヤーまたはグループを選ぶJSXです。グループ内の子まで自動で掘り下げず、表示・非表示にかかわらず、このコレクションの端を対象にします。反対側の端は、最下位の選択の記事を参照してください。
「最上位」はどのレイヤーですか?
AdobeのScripting Guideは、レイヤーパネルの先頭をスクリプトの先頭として扱うと説明しています。文書直下のコレクション(グループを含む)の先頭、つまり添字0の要素が最上位です。レイヤー名の「レイヤー1」と配列の添字1は別で、Action ManagerのitemIndexや背景による番号差とも混同しません。
最上位がグループだった場合はどうなりますか?
そのグループ自体を選びます。グループを自動展開したり、子を複数選択したりするコードは含めていません。子のうち最上位を選ぶ処理、文書全体で最初のArtLayerを再帰的に探す処理、表示されているArtLayerだけを選ぶ処理は、対象範囲が異なります。
端のレイヤーが非表示やロックされていると、どうなりますか?
候補からは除外しません。
2026年10月19日にPhotoshop 2026(27.11.0)で確かめたところ、非表示ですべてロックした一番上のレイヤーも選ばれ、選ばれると同時に表示に変わりました。
ロックは付いたままでした。
1要素だけの文書なら、その1要素が先頭でも末尾でも対象になります。
文書を開いていない場合は「文書を開いてください。」と出て止まります。
読取・選択で例外が出た場合は先に停止し、エラーを不在と決めつけません。
旧コードからどこを修正しましたか?
旧コードは「一番上」と説明しながらdoc.layers[doc.layers.length - 1]を指定していました。
これは文書直下の末尾を参照するため、今回の最上位の例はdoc.layers[0]へ修正しています。
旧コードは参照用で、新しい全体コードと混ぜて実行しないでください。
このコードはPhotoshopで動作確認されていますか?
はい。
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、[ファイル]→[スクリプト]→[参照…]から実行して確かめました。
確かめたのは、背景を選んでいるとき、2枚を選んでいるとき、一番上がグループのとき、一番上が非表示でロックされているとき、文書を開いていないときの5通りです。
コードはレイヤーの移動・名前変更・保存を呼びませんが、選択状態は変わり、一番上が非表示なら表示に変わります。
アートボード、1要素だけの文書、Mac版の挙動は確かめていないので、自作の文書で確認してください。
UXPスクリプト(.psjs)でも使えますか?
いいえ。UXPのLayers資料は別の実行環境で、このJSXを.psjsに改名するだけでは移行できないとしています。UXPスクリプトの実行方法で分担を確認してください。
確認するときは何を比較すればよいですか?
自作文書で、上から「CGM_Top」「CGM_Group」「CGM_Bottom」と並べた条件では、CGM_Topが選ばれることを期待値としています。実行前後のレイヤーパネルを撮影し、端の行が選択されたことと、レイヤー数・順序・名前・表示状態を比較します。元の複数選択全体の自動復元は含めていないため、実行前の選択も記録してください。最新の仕様は、Adobeの公式情報で確認してください。
