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

Photoshopスクリプト(jsx)│レイヤーとグループのロックを一括解除する方法

Photoshopで作業中、いずれかのレイヤーにロックがかかっていて編集できない場面があります。

そうしたケースで役立つのが、前面の文書のレイヤーとグループを走査してロックを解除するスクリプトです。

本記事では、レイヤーのロックを一括解除するJSXの導入手順と処理の流れを解説します。意図的なロックも外し、背景を通常レイヤーに変えるので、先にPSDを保存しコピーで試してください。対象文書を前面に開いてから実行します。

2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11で記事のコードを実行し、結果を「Photoshop 2026で実行した結果」に足しました。

2026年10月20日にコードを直しました。

非表示のレイヤーのロックが外れず、一番上のレイヤーが非表示だと処理が終わらない不具合がありました。

目次

スクリプトの導入方法

STEP 1: スクリプトの配置

Photoshopに関するほかの操作手順は、関連記事のまとめをご参照ください。

  1. 以下のコードをコピーし、unlockLayers.jsxというファイル名で保存

unlockLayers.jsx

function unlockLayers(){
    unlockAll(app.activeDocument.layers);

    function unlockAll(layers) {
      for (var i = 0; i < layers.length; i++) {
        unlockLayer(layers, i);
        if (layers[i].typename == 'LayerSet') unlockAll(layers[i].layers);
      }
    }

    function unlockLayer(layers, i) {
      var hidden = !isVisible(layers[i]);
      if(layers[i].isBackgroundLayer ) layers[i].name = '背景';
      var layer = layers[i];
      if(layer.allLocked) layer.allLocked = false;
      if(layer.pixelsLocked && layer.kind != LayerKind.TEXT) layer.pixelsLocked = false;
      if(layer.positionLocked) layer.positionLocked = false;
      if(layer.transparentPixelsLocked && layer.kind != LayerKind.TEXT) layer.transparentPixelsLocked = false;
      if(hidden) layer.visible = false;
    }

    function isVisible(layer) {
      var ref = new ActionReference();
      ref.putIdentifier( charIDToTypeID( "Lyr " ), layer.id );
      return executeActionGet( ref ).getBoolean( charIDToTypeID( "Vsbl" ) );
    }
 }
unlockLayers()
  1. Photoshopの「Scripts」フォルダに配置。
C:\Program Files\Adobe\Adobe Photoshop CC\Presets\Scripts

Photoshop 2026(Windows)では、C:\Program Files\Adobe\Adobe Photoshop 2026\Presets\Scripts にこのフォルダーがありました。

このフォルダーへファイルを置くには管理者の権限が要るため、2026年の確認では配置と再起動は試していません。

次のSTEP 2の[参照]から実行する場合は、フォルダーへの配置と再起動をしなくても実行できました。

  1. Photoshopを再起動。

STEP 2: スクリプトの実行

  1. Photoshopを起動
  2. [ファイル] → [スクリプト] → [参照]からunlockLayers.jsxを選択。
  3. スクリプトを実行すると、ドキュメント内のロックが一括で解除されます。
スポンサーリンク

Photoshop 2026で実行した結果

2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Pro で、直す前の記事のコードを変えずにunlockLayers.jsxとして保存し、[ファイル]→[スクリプト]→[参照]から実行しました。

試したのは、ロックの種類が違うレイヤーを並べた練習用のファイルです(ファイルの用意は別のスクリプトで行ったので、確認には含めていません)。

実行前のPhotoshopのレイヤーパネル。文字・非表示・グループ内・すべて・位置・画像ピクセル・透明ピクセルの各レイヤーと背景に鍵のアイコンが付いている
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。スクリプトを実行する前のレイヤーパネル。ロックの種類が違うレイヤーに鍵のアイコンが付いている(パネルを上下にスクロールした2枚を点線のところでつないでいます)。

実行すると、画面に何も表示されないまま、表示されているレイヤーのロックが外れました。

実行前のレイヤー実行後
位置をロックした文字のレイヤーロックが外れた
グループの中の、すべてをロックしたレイヤーロックが外れた
すべて/位置/画像ピクセル/透明ピクセルをロックした通常のレイヤーロックが外れた
非表示の、すべてをロックしたレイヤーロックが残った
背景「背景」という名前の通常のレイヤーになり、ロックが外れた
スクリプト実行後のPhotoshopのレイヤーパネル。非表示のレイヤーだけに鍵のアイコンが残り、ほかのレイヤーと背景の鍵は消えている
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。[ファイル]→[スクリプト]→[参照]から実行した後。非表示のレイヤーだけロックが残り、背景は通常のレイヤーになった(パネルを上下にスクロールした2枚を点線のところでつないでいます)。

背景は、名前が「背景」のまま通常のレイヤーに変わりました。

実行後のヒストリーには、ロックを外したレイヤーの数だけ「レイヤーのロック解除」が並び、最後に「レイヤーを作成」(背景の変換)が残りました。

まとめて元に戻すときは、ヒストリーパネルで実行前の状態を選びます。

直す前のコードは非表示のレイヤーを解除しなかった

直す前のコードは、選ぶレイヤーを1つ下へ移す命令を繰り返して、1枚ずつ処理していました。

この命令は非表示のレイヤーを選ばないので、非表示のレイヤーは飛ばされてロックが残りました。

練習用のファイルを開き直し、非表示だったレイヤーを表示してから実行すると、そのレイヤーのロックも外れました。

直したコードは、選ぶレイヤーを動かさずに、上のレイヤーから順に1つずつ調べます。

非表示のレイヤーやグループの中のレイヤーも対象になり、非表示のレイヤーはロックを外した後に非表示へ戻します。

2026年10月20日に、直したコードを同じ練習用のファイルで実行しました([参照]からではなく、別のスクリプトから実行しています)。

非表示のレイヤーもロックが外れ、非表示のまま残りました。

表示されているレイヤーと背景の結果は、直す前と同じでした。

閉じたグループの中のレイヤーもロックが外れました(グループは開いた状態に変わりました)。

直す前のコードは一番上のレイヤーが非表示だと終わらなかった

一番上のレイヤーを非表示にした複製で、コードと同じ「1つ下へ移す」命令だけを1回ずつ実行して、選ばれるレイヤーを確かめました。

選択は一番下の背景まで進んだ後、表示されている一番上のレイヤー(この例ではグループ)へ戻り、非表示の一番上のレイヤーには戻りませんでした。

直す前のコードは、一番上のレイヤーに戻ったところで止まる作りでした。

2026年10月20日に、直す前のコードに回数の上限(40回)を付けた確かめ用の版を、一番上のレイヤーを非表示にして実行しました。

選択は背景からグループへ戻ることを繰り返し、上限の40回まで終わりませんでした。

直したコードでは、一番上のレイヤーが非表示でも処理が終わり、そのレイヤーも非表示のままロックが外れました。

一番上のレイヤー、グループ、グループの中のレイヤー、背景を非表示にした場合も、すべてのロックが外れ、非表示のまま残りました。

スクリプトの内容

function unlockLayers(){
    unlockAll(app.activeDocument.layers);

    function unlockAll(layers) {
      for (var i = 0; i < layers.length; i++) {
        unlockLayer(layers, i);
        if (layers[i].typename == 'LayerSet') unlockAll(layers[i].layers);
      }
    }

    function unlockLayer(layers, i) {
      var hidden = !isVisible(layers[i]);
      if(layers[i].isBackgroundLayer ) layers[i].name = '背景';
      var layer = layers[i];
      if(layer.allLocked) layer.allLocked = false;
      if(layer.pixelsLocked && layer.kind != LayerKind.TEXT) layer.pixelsLocked = false;
      if(layer.positionLocked) layer.positionLocked = false;
      if(layer.transparentPixelsLocked && layer.kind != LayerKind.TEXT) layer.transparentPixelsLocked = false;
      if(hidden) layer.visible = false;
    }

    function isVisible(layer) {
      var ref = new ActionReference();
      ref.putIdentifier( charIDToTypeID( "Lyr " ), layer.id );
      return executeActionGet( ref ).getBoolean( charIDToTypeID( "Vsbl" ) );
    }
 }

unlockLayers();

スクリプトの仕組み

  1. レイヤーを最上位から順に走査
  2. 各レイヤーのロック状態を判定して解除
  3. 背景レイヤーも通常レイヤーに変換して編集可能に変更
  4. 順次下位のレイヤーへ処理を移行

本スクリプトを実行すれば、非表示レイヤーやグループ内も含めて、コードが扱うレイヤーロックをまとめて解除できます。

検証した非表示レイヤーは非表示のまま残りました。コードは全体・画像ピクセル・位置・透明ピクセルのロックを扱います。スマートオブジェクトの内部は開きません。アートボード固有のロックや、親グループを再表示したときの子レイヤーの表示状態、例外発生時の途中終了は未確認です。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。

レイヤーを操作するスクリプトは、ほかにもあります。

スポンサーリンク

まとめ

✅ 非表示のレイヤーも含めて、ロックを一括解除できる

✅ ロックされた背景レイヤーも編集可能になる

✅ 標準のスクリプト機能から手軽に実行できる

レイヤーロックの解除作業を効率化したい場合に活用してください。

よくある質問:レイヤーロックを一括解除するスクリプト

このスクリプトは、何をするものですか?

Photoshopで作業中に、いずれかのレイヤーにロックがかかっていて編集できない場面で役立つ、前面の文書のレイヤーとグループを対象に、コードで指定したロックを解除するJSXです。記事では、導入手順と処理の流れを解説しています。

どうやって導入しますか?

記事のコードをunlockLayers.jsxとして保存し、初回は[ファイル]→[スクリプト]→[参照]から実行できます。Scriptsフォルダーへの配置と再起動は、メニューに登録する場合の手順です。

どうやって実行しますか?

Photoshopを起動し、[ファイル]→[スクリプト]→[参照]から、保存したスクリプトを選択します。スクリプトを実行すると、ドキュメント内のロックが一括で解除されます。

スクリプトは、どんな仕組みで動いていますか?

レイヤーを最上位から順に走査し、各レイヤーのロック状態を判定して解除します。背景レイヤーも、通常レイヤーに変換して編集可能に変更し、順次下位のレイヤーへ処理を移行します。

背景レイヤーのロックも、解除されますか?

はい。

Photoshop 2026で試すと、背景は「背景」という名前の通常のレイヤーになり、ロックも外れました。

実行する前に、気をつけることはありますか?

このスクリプトは、非表示レイヤーやグループ内も含めて、コードが扱うレイヤーロックをまとめて解除します。

意図してロックしていたレイヤーも解除されるため、複製したファイルで試し、結果を確認してから使うことをおすすめします。

検証した非表示レイヤーは、非表示のまま残りました。親グループを再表示した後の子レイヤーの状態は未確認です。

動作は、2026年10月19日と、コードを直した2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11で確かめています。

記事のコードは、どこにありますか? 最新はどこで確認しますか?

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめられています。スクリプトの格納先や動作は、Photoshopのバージョンによって変わる場合があるため、最新はAdobe公式のヘルプで確認してください。

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

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

Photoshopのおすすめ書籍

動作要件とPCの確認項目

周辺機器の優先度

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