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

Photoshopスクリプト(jsx)│レイヤーとマスクのリンクを一括で繋ぐ方法

Photoshopでレイヤーとマスクのリンクを一括で繋ぐスクリプトを紹介します。

作業中に外れてしまったリンクをまとめて再接続できるスクリプトです。

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

目次

レイヤーとマスクのリンクを一括で繋ぐメリット

  • 全レイヤーのマスクリンクを一括で再接続できる
  • 手作業で1つずつリンクし直す手間を削減できる
  • 意図しないマスクズレを防ぎデータ管理を効率化できる
スポンサーリンク

スクリプトの導入方法

STEP.1 スクリプトをダウンロード・格納

  1. 文書内のリンクを一括で変更するため、先にPSDを複製し、意図してリンクを外した箇所を控えてください。再接続は移動済みの画像とマスクを元の位置へ戻す処理ではありません。下記のコードをテキストエディタ等に貼り付けて保存します。

Photoshopのほかの操作は、まとめからご覧いただけます。

CGM_ConnectMaskLinks.jsx

main();

function main() {
  if (!documents.length) return;
  linkLayers();
}

function linkLayers() {
  var ref = new ActionReference();
  ref.putEnumerated(charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt'));
  var count = executeActionGet(ref).getInteger(charIDToTypeID('NmbL')) + 1;
  var Names = [];
  try {
    activeDocument.backgroundLayer;
    var i = 0;
  } catch (e) {
    var i = 1;
  };
  for (i; i < count; i++) {
    if (i == 0) continue;
    ref = new ActionReference();
    ref.putIndex(charIDToTypeID('Lyr '), i);
    var desc = executeActionGet(ref);
    var layerSection = desc.getEnumerationValue(stringIDToTypeID('layerSection'));
    var Id = desc.getInteger(stringIDToTypeID('layerID'));
    if (typeIDToStringID(layerSection) == 'layerSectionEnd') continue;
    if (desc.hasKey(charIDToTypeID("UsrM"))) linkChannelMask(i);
    if (desc.getBoolean(stringIDToTypeID("hasVectorMask"))) linkVectorMask(i);
  }
};

function linkChannelMask(idx) {
  var desc = new ActionDescriptor();
  var ref = new ActionReference();
  ref.putIndex(charIDToTypeID("Lyr "), idx);
  desc.putReference(charIDToTypeID('null'), ref);
  var desc2 = new ActionDescriptor();
  desc2.putBoolean(charIDToTypeID('Usrs'), true);
  desc.putObject(charIDToTypeID('T   '), charIDToTypeID('Lyr '), desc2);
  executeAction(charIDToTypeID('setd'), desc, DialogModes.NO);
};

function linkVectorMask(idx) {
  var desc = new ActionDescriptor();
  var ref = new ActionReference();
  ref.putIndex(charIDToTypeID("Lyr "), idx);
  desc.putReference(charIDToTypeID("null"), ref);
  var desc1 = new ActionDescriptor();
  desc1.putBoolean(stringIDToTypeID("vectorMaskLinked"), true);
  desc.putObject(charIDToTypeID("T   "), charIDToTypeID("Lyr "), desc1);
  executeAction(charIDToTypeID("setd"), desc, DialogModes.NO);
}
  1. CGM_ConnectMaskLinks.jsx を 以下のフォルダに保存。
C:\Program Files\Adobe\Adobe Photoshop CC\Presets\Scripts\
  1. Photoshopを再起動。

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

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

[ファイル]→[スクリプト]→[参照]で保存したファイルを選べば、フォルダーに置かずに実行できました。

STEP.2 スクリプトを実行

  1. [ファイル] → [スクリプト] → [CGM_ConnectMaskLinks] を選択。
  2. 対象文書のマスクリンクが変更されるので、レイヤーパネルで鎖アイコンを確認する。エラーで中断した場合は、途中までの変更が残る可能性がある。

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

Photoshop 2026で実行した結果

2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Pro で、記事のコードを変えずにCGM_ConnectMaskLinks.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つごとに「マスクをリンク」または「ベクトルマスクをリンク」が並びました(この例では8つ)。

最初からリンクされていたマスクの分も、1つとして数えられています。

まとめて元に戻すときは、ヒストリーパネルで実行前の状態を選びます(ヒストリーパネルでの取り消しは、今回は試していません)。

背景の無い文書でも動いた

このコードは、背景があるかどうかで数え始める位置を変えています。

背景を通常のレイヤーに変えた文書でも、同じように[参照]から実行すると、すべてのマスクがリンクされました。

わざと外したリンクも繋がる

このスクリプトは、開いている対象文書のレイヤーマスクとベクトルマスクのリンクを変更します。スマートオブジェクトの内容を開いて処理するコードはありません。

マスクだけを動かすために、わざとリンクを外しておいたレイヤーも繋がります。

そうしたレイヤーがある文書では、実行後、レイヤーパネルの画像サムネールとマスクサムネールの間にある鎖アイコンをクリックして、必要な箇所だけリンクを外し直します。再び繋ぐには同じ位置の空白をクリックします。これはAdobeの操作案内に基づく補足で、今回実機では試していません。

確かめていないこと

Scriptsフォルダーへの配置と再起動、アートボード、スマートオブジェクトの中のレイヤー、Macと他の版での動作は、今回は確かめていません。

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

スポンサーリンク

まとめ

  • すべてのレイヤーのマスクリンクを一括で再接続可能
  • 外れたリンクを再接続できるが、すでにずれた位置は戻らない
  • レイヤーとマスクのズレを防ぎデータ管理を効率化

Photoshopでレイヤーとマスクのリンクを一括で復元し、作業効率を向上させましょう。

よくある質問:レイヤーとマスクのリンクを一括で繋ぐ

このスクリプトでは何ができますか?

Photoshopで、レイヤーとマスクのリンクを一括で繋ぎ直せます。作業中に外れてしまったリンクを、まとめて再接続できるスクリプトです。

どんなメリットがありますか?

全レイヤーのマスクリンクを一括で再接続できます。手作業で1つずつリンクし直す手間を減らし、意図しないマスクのズレを防いでデータ管理を効率化できます。

誤ってリンクを外してしまったときにも使えますか?

はい。

Photoshop 2026で試すと、リンクを外したレイヤーマスクとベクトルマスクが、どちらもリンクされた状態に戻りました。

ただし、わざとリンクを外していたマスクも繋がるので、その場合は実行後にリンクを外し直してください。

どのレイヤーが対象になりますか?

Photoshop 2026で試すと、非表示のレイヤー、グループ、グループの中のレイヤーも含めて、文書の中のすべてのマスクがリンクされました。

レイヤーマスクとベクトルマスクの両方が対象です。

特定のレイヤーだけに限定する設定はありません。スマートオブジェクト内部の別文書は開かず、リンクを付けても画像やマスクの座標は元に戻しません。

スクリプトはどのように導入しますか?

記事のコードをテキストエディタ等に貼り付けてCGM_ConnectMaskLinks.jsxとして保存し、記事で案内しているフォルダに保存します。保存後にPhotoshopを再起動してください。

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

[ファイル] → [スクリプト] → [CGM_ConnectMaskLinks] を選択します。

フォルダーに置かずに使う場合は、[ファイル]→[スクリプト]→[参照]で保存したファイルを選んで[読み込み]を押します。

正常に終わる場合、完了通知は表示されません。レイヤーパネルで対象のマスクに鎖アイコンが付いたか確認してください。コードには各マスクの設定エラーを受けて次へ進む処理や、自動で元に戻す処理がないため、途中で止まった場合は一部だけ変更される可能性があります。エラーが出たら実行前のPSDと比較し、未処理の箇所を確認します。エラーの再現試験はしていません。

スクリプトのコードはどこで確認できますか?

記事内に掲載しているほか、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。

メニューの表示や名称が記事と違う場合はどうすればよいですか?

Photoshopのバージョンによってメニューの名称や配置が変わることがあります。最新の操作手順は、Adobeの公式情報で確認してください。

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

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

Photoshopのおすすめ書籍

動作要件とPCの確認項目

周辺機器の優先度

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