現在の選択を基準に、Action Managerへ上方向の相対選択を要求するPhotoshop JSXです。Frwrを指定します。選択IDの一覧を先に取得し、1つだけ選ばれている場合に実行します。画面で隣に見える行と、Photoshopが相対選択で返す対象を同一と決めつけないでください。
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで、下の全体コードを書き換えずに保存し、[ファイル]→[スクリプト]→[参照…]から実行して確かめました。
非表示のレイヤーと閉じたグループの中は飛ばされ、開いたグループには下から中へ入り、一番上のレイヤーの次は一番下の背景に戻りました。
コードはレイヤーの移動・名前変更・保存を呼びませんが、選択状態は変わります。
アートボード、グループの中の非表示、Mac版は確かめていないので、自作の文書で試してから使ってください。
くわしくは「Photoshop 2026で実行した結果」にまとめています。
相対選択・非表示を含む隣接選択・追加選択の違い
| 目的 | 方法と範囲 |
|---|---|
| Photoshopに上方向の相対選択を要求 | この記事のFrwr。グループや非表示の扱いは実機で比較する。 |
| 同じ親の下で、非表示を含む1つ下を明示 | DOMのparent.layersで隣を探し、ID指定で置き換える。非表示を含む隣接選択 |
| 元の選択へ1つ上を追加 | 選択を先に解除せず、IDとaddToSelectionで1回要求する。上への追加選択 |
| 文書直下の端を選ぶ | 最上位/最下位。相対選択とは別の対象指定。 |
旧記事の「表示レイヤー」という説明を、全階層・すべての文書で非表示を必ず飛ばす保証にはしません。このコード自身はvisibleを走査して候補を絞っていません。MkVs=falseは選択要求に付ける設定で、表示レイヤーだけを抽出する条件でも、ロックを解除する指示でもありません。
Photoshop 2026(27.11.0)で一番上の階層から実行したところ、すぐ上の非表示のレイヤーは飛ばされ、その上の表示されたレイヤーが選ばれました。
飛ばされたレイヤーは非表示のまま、選ばれたロック付きのレイヤーも鍵が付いたままでした。
上方向の相対選択を要求する全体コード
新しい全体コードをUTF-8の.jsxとして保存し、ファイル→スクリプト→参照から実行します。旧コードへ追記せず、別ファイルとして1回実行してください。メニューへの登録は動作を確認した後に行います。
#target photoshop
(function () {
if (app.documents.length === 0) { alert("文書を開いてください。"); return; }
function validId(value) {
return typeof value === "number" && isFinite(value) && value >= 0 && Math.floor(value) === value;
}
function selectedIds() {
var key = stringIDToTypeID("targetLayersIDs");
var ref = new ActionReference();
ref.putProperty(charIDToTypeID("Prpr"), key);
ref.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var result = executeActionGet(ref);
if (!result.hasKey(key)) { throw new Error("選択IDの一覧を取得できません。"); }
var list = result.getList(key);
var ids = [];
for (var i = 0; i < list.count; i++) {
var id = list.getReference(i).getIdentifier();
if (!validId(id)) { throw new Error("選択IDが数値の整数ではありません。"); }
ids.push(id);
}
return ids;
}
function contains(ids, id) {
for (var i = 0; i < ids.length; i++) { if (ids[i] === id) { return true; } }
return false;
}
try {
var ids = selectedIds();
if (ids.length !== 1) { alert("レイヤーを1つだけ選択してから実行してください。"); return; }
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Frwr"));
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID("null"), ref);
desc.putBoolean(charIDToTypeID("MkVs"), false);
executeAction(charIDToTypeID("slct"), desc, DialogModes.NO);
} catch (error) {
alert("読取または選択で中断: " + error.message + "\n行: " + error.line);
}
}());
文書・複数選択・選択IDの事前検査
文書なしなら文書の取得やAction Managerの読取を行いません。targetLayersIDsの一覧が取得できない版・状態では中断します。取得失敗を「1つだけ選択」と推測して続行せず、一覧0件・複数件も停止します。複数選択を受け付ける追加操作は、別記事の追加選択を使ってください。
端のレイヤーとエラーを区別する
この例は上端に到達したことを実行前に判定していません。executeActionが失敗した場合はerror.messageと行番号を表示します。例外は端への到達だけでなく、文書の状態やAPIの読取・選択失敗でも起こり得るため、「これ以上上のレイヤーはない」と一律に言い換えません。失敗時の選択状態も実機で確認してください。
Photoshop 2026(27.11.0)では、一番上のレイヤーを選んで実行してもエラーにならず、一番下の背景レイヤーが選ばれました。
この版では、例外を上端の合図にはできませんでした。
繰り返し実行する処理に組み込むときは、上端で止める判定を別に用意してください。
自作PSDで確認する条件
| 条件 | 確認するもの |
|---|---|
| 3つの表示レイヤーで中央だけ選択 | 要求の方向と、選択後の行・選択ID。 |
| 隣が非表示・ロック・グループ | 相対選択が対象にした行。MkVs=falseでも表示状態の前後を比較。 |
| グループの子・折り畳んだグループ・アートボード | 親の境界と画面の見た目が異なる場合の選択結果。 |
| 上端にいる | 実行結果または例外の全文。別のエラーと区別。 |
| 文書なし・選択0件・複数選択 | 選択実行前の停止。自動で1件へ絞らない。 |
上表のうち、アートボードと選択0件以外の条件はPhotoshop 2026(27.11.0)で確かめました。
結果は次の「Photoshop 2026で実行した結果」にまとめています。
自分の文書で使うときも、前後の行・ID・表示・レイヤー数と順序を記録し、保存・削除などの処理をつなぐ前に対象を確認してください。
Photoshop 2026で実行した結果
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで、上の全体コードを書き換えずにSelectUpperLayer.jsxとして保存し、[ファイル]→[スクリプト]→[参照…]から9回実行しました。
練習用の文書は、上から「A 表示」「B 非表示」「C ロック」(すべてをロック)「G 開いたグループ」(中にG1・G2)「H 閉じたグループ」(中にH1・H2)「背景」の順に、別のスクリプトで作りました。
最初に「背景」を選んだ状態と、2枚を選んだ状態もスクリプトで用意したので、その部分は確認に含めていません。
選択中のレイヤーのID・表示・ロック・ヒストリーは、実行の前後にスクリプトで読み取って比べました。
閉じたグループの中は飛ばし、開いたグループには下から入る

「背景」を選んで実行すると、すぐ上の「H 閉じたグループ」そのものが選ばれました。
「H 閉じたグループ」から実行すると、中の「H1」「H2」には入らず、上の「G 開いたグループ」の中の一番下にある「G2」が選ばれました。
「H 閉じたグループ」は閉じたままで、パネルの表示も変わりませんでした。
3回目は「G1」が選ばれ、グループの中を下から上へ進みました。
非表示は飛ばし、一番上の次は背景に戻る

「G1」から実行すると「G 開いたグループ」そのものが選ばれ、その次はグループの外の「C ロック」が選ばれました。
「C ロック」から実行すると、すぐ上の「B 非表示」ではなく、その上の「A 表示」が選ばれました。
「B 非表示」の目のアイコンは消えたままで、「C ロック」の鍵のアイコンも付いたままでした。
一番上の「A 表示」からもう一度実行するとエラーにならず、一番下の「背景」が選ばれました。
選択の置き換えはヒストリーに積まれず、9回の実行の後もヒストリーは「開く」のままでした。
2枚以上の選択や文書なしでは選ばずに止まる

「A 表示」と「G1」の2枚を選んだ状態で実行すると、「レイヤーを1つだけ選択してから実行してください。」と出ました。
[OK]で閉じた後も、2枚とも選ばれたままでした。
文書を開いていないホーム画面で実行すると、「文書を開いてください。」と出ました。
確かめていないこと
アートボード、レイヤーを1つも選んでいない状態、グループの中の非表示のレイヤー、背景レイヤーが無い文書の一番上から一番下へ戻るか、エラーで中断する場合の表示は確かめていません。
MkVsを付けない場合との違い、Scriptsフォルダーへの登録、ショートカットの割り当て、Mac版と他の版も試していません。
旧コードと過去の画面(参照用)
旧例には文書数・選択件数の検査がなく、すべての例外を端に到達したものとして表示します。新しい例は事前条件と例外の原文を分けています。旧画像のundefinedは戻り値の表示で、選択成功の証拠ではありません。
// 一つ上の表示レイヤーを選択
function selectLayerForward() {
try {
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(
charIDToTypeID("Lyr "),
charIDToTypeID("Ordn"),
charIDToTypeID("Frwr") // 1つ上のレイヤーへ移動
);
desc.putReference(charIDToTypeID("null"), ref);
desc.putBoolean(charIDToTypeID("MkVs"), false); // 可視状態を変更しない
executeAction(charIDToTypeID("slct"), desc, DialogModes.NO);
} catch (e) {
alert("これ以上上のレイヤーはありません。");
}
}
// スクリプトを実行
selectLayerForward();

参照資料と確認範囲
Adobe Photoshop Scripting Guide 2020の38〜39ページ(レイヤーの並び順・グループ)、JavaScript Scripting Reference 2020のActionDescriptor、ActionList、ActionReference、Document、Layers、LayerSetを参照しています。2020年版のExtendScript資料で、今回のPhotoshop実機の検証記録ではありません。
Cutterman作者のレイヤー操作コードのtargetLayersIDsとID指定、Adobe CommunityのJJMack氏による選択追加の記録のselectionModifierを比較しました。作者の掲載例は公式の全条件保証ではなく、今回の実機成功や速度測定にも数えていません。Adobeのレイヤー選択手順で説明する行の選択と、サムネールからのピクセル選択は別です。
旧配布と関連する手順
旧配布はGitHubの元コードに残しています。公開フォルダーの01.jsは今回の新しい例へ更新していません。実行する場合は、このページの新しい全体コードを別の.jsxとして保存してください。





よくある質問:上方向の相対選択を要求するスクリプト
このスクリプトでは何ができますか?
現在の選択を基準に、Action Managerへ上方向の相対選択を要求するPhotoshop JSXです。選択IDの一覧を先に取得し、1つだけ選ばれている場合に実行します。
画面で隣に見える行が必ず選ばれますか?
いいえ。
2026年10月20日にPhotoshop 2026(27.11.0)で確かめたところ、すぐ上が非表示のレイヤーなら飛ばされ、閉じたグループの中も飛ばされました。
開いたグループには下から入り、中の一番下のレイヤーから上へ進んで、最後にグループそのものが選ばれました。
「1つ上を選ぶ」ほかの方法とどう違いますか?
Photoshopに上方向の相対選択を要求する方法(この記事)、同じ親の下で非表示を含む1つ下を明示する方法、元の選択へ1つ上を追加選択する方法(IDとaddToSelectionで1回要求)、文書直下の端を選ぶ最上位/最下位の指定を区別しています。相対選択とは別の対象指定です。
非表示のレイヤーは飛ばされますか?
2026年10月20日にPhotoshop 2026(27.11.0)で、一番上の階層のレイヤーから実行したときは、すぐ上の非表示のレイヤーが飛ばされました。
このコード自身は表示状態を調べて候補を絞っていないので、飛ばしたのはPhotoshopの相対選択の動きです。
グループの中の非表示のレイヤーや、ほかの版では確かめていないので、全部の文書で飛ばす保証にはしません。
MkVs=falseは選択要求に付ける設定で、ロックを解除する指示でもありません。
実行前にどんな検査をしますか?
文書なしなら文書の取得やAction Managerの読取を行いません。選択IDの一覧を先に取得し、1つだけ選ばれている場合に実行します。端のレイヤーとエラーも区別し、事前条件と例外の原文を分けて表示します。
実行後の「undefined」は成功を意味しますか?
いいえ。旧画像のundefinedは戻り値の表示で、選択成功の証拠ではないとしています。実際に選択が変わったかは、レイヤーパネルで確認してください。
このコードはPhotoshopで動作確認されていますか?
はい。
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで、[ファイル]→[スクリプト]→[参照…]から実行して確かめました。
確かめたのは、背景からの実行、閉じたグループ、開いたグループ、ロックしたレイヤー、非表示の隣、一番上からの実行、2枚の選択、文書なしの8通りです。
コードはレイヤーの移動・名前変更・保存を呼びませんが、選択状態は変わります。
アートボード、グループの中の非表示、Mac版の挙動は確かめていないので、自作の文書で確認してください。
どうやって使いますか?GitHubの旧配布は使えますか?
新しい全体コードをUTF-8の.jsxとして保存し、[ファイル]→[スクリプト]→[参照]から実行します。旧コードへ追記せず、別ファイルとして1回実行してください。メニューへの登録は動作を確認した後に行います。GitHubの旧配布は元コードのまま残っており、更新されていない場合があります。最新の仕様は、Adobeの公式情報で確認してください。
