Photoshopで作業中、いずれかのレイヤーにロックがかかっていて編集できない場面があります。
そうしたケースで役立つのが、前面の文書のレイヤーとグループを走査してロックを解除するスクリプトです。
本記事では、レイヤーのロックを一括解除するJSXの導入手順と処理の流れを解説します。意図的なロックも外し、背景を通常レイヤーに変えるので、先にPSDを保存しコピーで試してください。対象文書を前面に開いてから実行します。
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11で記事のコードを実行し、結果を「Photoshop 2026で実行した結果」に足しました。
2026年10月20日にコードを直しました。
非表示のレイヤーのロックが外れず、一番上のレイヤーが非表示だと処理が終わらない不具合がありました。
スクリプトの導入方法
STEP 1: スクリプトの配置
Photoshopに関するほかの操作手順は、関連記事のまとめをご参照ください。

- 以下のコードをコピーし、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()- Photoshopの「Scripts」フォルダに配置。
C:\Program Files\Adobe\Adobe Photoshop CC\Presets\ScriptsPhotoshop 2026(Windows)では、C:\Program Files\Adobe\Adobe Photoshop 2026\Presets\Scripts にこのフォルダーがありました。
このフォルダーへファイルを置くには管理者の権限が要るため、2026年の確認では配置と再起動は試していません。
次のSTEP 2の[参照]から実行する場合は、フォルダーへの配置と再起動をしなくても実行できました。
- Photoshopを再起動。
STEP 2: スクリプトの実行
- Photoshopを起動
- [ファイル] → [スクリプト] → [参照]から
unlockLayers.jsxを選択。 - スクリプトを実行すると、ドキュメント内のロックが一括で解除されます。
Photoshop 2026で実行した結果
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Pro で、直す前の記事のコードを変えずにunlockLayers.jsxとして保存し、[ファイル]→[スクリプト]→[参照]から実行しました。
試したのは、ロックの種類が違うレイヤーを並べた練習用のファイルです(ファイルの用意は別のスクリプトで行ったので、確認には含めていません)。

実行すると、画面に何も表示されないまま、表示されているレイヤーのロックが外れました。
| 実行前のレイヤー | 実行後 |
|---|---|
| 位置をロックした文字のレイヤー | ロックが外れた |
| グループの中の、すべてをロックしたレイヤー | ロックが外れた |
| すべて/位置/画像ピクセル/透明ピクセルをロックした通常のレイヤー | ロックが外れた |
| 非表示の、すべてをロックしたレイヤー | ロックが残った |
| 背景 | 「背景」という名前の通常のレイヤーになり、ロックが外れた |

背景は、名前が「背景」のまま通常のレイヤーに変わりました。
実行後のヒストリーには、ロックを外したレイヤーの数だけ「レイヤーのロック解除」が並び、最後に「レイヤーを作成」(背景の変換)が残りました。
まとめて元に戻すときは、ヒストリーパネルで実行前の状態を選びます。
直す前のコードは非表示のレイヤーを解除しなかった
直す前のコードは、選ぶレイヤーを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();
スクリプトの仕組み
- レイヤーを最上位から順に走査
- 各レイヤーのロック状態を判定して解除
- 背景レイヤーも通常レイヤーに変換して編集可能に変更
- 順次下位のレイヤーへ処理を移行
本スクリプトを実行すれば、非表示レイヤーやグループ内も含めて、コードが扱うレイヤーロックをまとめて解除できます。
検証した非表示レイヤーは非表示のまま残りました。コードは全体・画像ピクセル・位置・透明ピクセルのロックを扱います。スマートオブジェクトの内部は開きません。アートボード固有のロックや、親グループを再表示したときの子レイヤーの表示状態、例外発生時の途中終了は未確認です。
この記事で紹介しているコードは、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公式のヘルプで確認してください。
