Photoshopでリンク配置したスマートオブジェクト(.psd)のレイヤーカンプを活用して管理する場面は多く見られます。
この記事のExtendScript例は、配置先のスマートオブジェクトが持つカンプ情報をActionManagerから読み取ります。通常の文書のレイヤーカンプ一覧を取得する処理とは対象が異なります。
それでも、Photoshopの非公開内部情報にアクセスする手法を用いれば、レイヤーカンプ一覧を取得できます。
この記事では、アクティブな文書のレイヤーとグループ内を走査し、スマートオブジェクトから取得できたカンプ名とIDを表示するJSXを紹介します。スマートオブジェクトの中身を開いて、さらに内側のレイヤーを再帰的に調べる処理ではありません。
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで、掲載のコードを書き換えずに保存し、[ファイル]→[スクリプト]→[参照…]から実行して確かめました。
リンク配置と埋め込みの両方で一覧が出ることと、元のファイルでカンプを足したときの注意を「Photoshop 2026で試した結果」にまとめています。

ActionManagerからカンプ情報を読み取る方法
Photoshopのほかの自動化手順は、まとめ記事で確認できます。

処理の要となるのは、executeActionGet() と ActionReference の組み合わせです。
var ref = new ActionReference();
ref.putIdentifier(charIDToTypeID("Lyr "), layer.id);
var desc = executeActionGet(ref);この処理により、レイヤーのプロパティ情報に直接アクセスできます。
コードはsmartObject内のcompsListオブジェクトからcompListリストを取り出します。必要なキーがない場合は空の配列を返し、例外は表示せず、それまでに取得できた配列を返します。次の図は構造の説明で、実行用コードではありません。実際にはキーをstringIDToTypeIDで変換しています。
内部データ構造からレイヤーカンプ一覧を取得する手順
layer (ArtLayer) →
executeActionGet(ref) →
desc.getObjectValue("smartObject") →
getObjectValue("compsList") →
getList("compList") → 各カンプ情報各 comp オブジェクトには以下の情報が含まれています。
| キー名 | 意味 |
|---|---|
name | レイヤーカンプの名前 |
ID | カンプに割り当てられたID |
補足:公開APIと内部プロパティの違い
AdobeのJavaScript Scripting Reference(2020)には、ActionReferenceとexecuteActionGet()自体の説明があります。一方、この記事で参照するsmartObject内のcompsList/compListという構造は、同資料で仕様を確認できていません。文書のカンプを扱うDocument.layerCompsとは区別してください。
代替手段として、ActionManager(AMコード)と呼ばれる低レベルAPIを利用し、Photoshop内部のプロパティを参照しています。
こうした記述方法は、Photoshopの操作をコード化するScripting Listenerプラグインなどで出力ログを解析して特定されています。
サンプルコード
以下のスクリプトを拡張子 .jsx のファイルとして保存し、Photoshopの[ファイル]メニューなどから実行してください。
Photoshop 2026では、[ファイル]→[スクリプト]→[参照…]で保存したファイルを選ぶと実行できます。
※リンク配置だけでなく、埋め込みスマートオブジェクトにも対応しています。
#target photoshop
// 対象レイヤーを再帰的に収集
function collectAllLayers(layerCollection, result) {
for (var i = 0; i < layerCollection.length; i++) {
var layer = layerCollection[i];
if (layer.typename === "ArtLayer") {
result.push(layer);
} else if (layer.typename === "LayerSet") {
collectAllLayers(layer.layers, result);
}
}
}
// スマートオブジェクトのレイヤーカンプ一覧を取得
function getLayerCompsFromSmartObject(layer) {
var list = [];
try {
var ref = new ActionReference();
ref.putIdentifier(charIDToTypeID("Lyr "), layer.id);
var desc = executeActionGet(ref);
if (!desc.hasKey(stringIDToTypeID("smartObject"))) return [];
var soDesc = desc.getObjectValue(stringIDToTypeID("smartObject"));
if (!soDesc.hasKey(stringIDToTypeID("compsList"))) return [];
var compsList = soDesc.getObjectValue(stringIDToTypeID("compsList")).getList(stringIDToTypeID("compList"));
for (var i = 0; i < compsList.count; i++) {
var comp = compsList.getObjectValue(i);
var name = comp.getString(stringIDToTypeID("name"));
var id = comp.getInteger(stringIDToTypeID("ID"));
list.push({ name: name, id: id });
}
} catch (e) {
// 無視(対象外)
}
return list;
}
// メイン処理
function main() {
if (app.documents.length === 0) {
alert("ドキュメントが開かれていません。");
return;
}
var allLayers = [];
collectAllLayers(app.activeDocument.layers, allLayers);
var output = "スマートオブジェクトのレイヤーカンプ一覧:\n\n";
var found = false;
for (var i = 0; i < allLayers.length; i++) {
var layer = allLayers[i];
if (layer.kind === LayerKind.SMARTOBJECT) {
var comps = getLayerCompsFromSmartObject(layer);
if (comps.length > 0) {
found = true;
output += "【" + layer.name + "】\n";
for (var j = 0; j < comps.length; j++) {
output += " ・[" + comps[j].id + "] " + comps[j].name + "\n";
}
output += "\n";
}
}
}
if (!found) {
alert("レイヤーカンプ付きスマートオブジェクトは見つかりませんでした。");
} else {
alert(output);
}
}
main();
取得できたカンプがあるレイヤーだけを表示します。このコードは取得例外を表示せず、取得前の失敗では空配列を返すため、「見つかりませんでした」はカンプの不在を証明しません。一部のレイヤーだけ取得に失敗しても、その失敗は一覧に表示されません。調査用に使う場合は、別のコピーで例外のレイヤー名と内容を記録する改修が必要です。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
Photoshop 2026で試した結果
2026年10月20日に、Photoshop 2026(27.11.0)とWindows 11 Proで、上のコードを書き換えずに保存し、[ファイル]→[スクリプト]→[参照…]から実行しました。
練習用のファイルは、別のスクリプトで作ったので確認に含めていません。
赤・青・緑の3枚のレイヤーと、レイヤーカンプ「案A 赤だけ」「案B 青だけ」「案C 全部」を持つPSDを1つ用意しました。
これを1つの文書に、リンク配置・埋め込み・グループの中にリンク配置の3通りで置き、カンプのないPSDの埋め込みと、普通のレイヤーも1枚ずつ足しました。
リンクと埋め込みの両方で一覧が出る

実行すると「スクリプト警告」の窓に、カンプを持つ3つのスマートオブジェクトと、それぞれの3つのカンプが表示されました。
並びはレイヤーパネルの上からの順で、グループの中のスマートオブジェクトも一番上に出ました。
カンプのないスマートオブジェクトと普通のレイヤーは、一覧に出ませんでした。
角かっこの中の数字(1798349など)がカンプのIDで、リンク配置と埋め込みで同じ値でした。
実行の前後で、ヒストリーの数と文書の保存状態は変わらず、文書には何も書き込まれませんでした。
見つからないときと、文書を開いていないとき

カンプのないスマートオブジェクトしかない文書では、「レイヤーカンプ付きスマートオブジェクトは見つかりませんでした。」と表示されました。
文書を開いていないホーム画面で実行すると、「ドキュメントが開かれていません。」と表示されました。
どちらも[OK]で閉じるだけで、ほかには何も起きませんでした。
元のファイルでカンプを足したら、内容を更新してから実行する
元のPSDに4つ目のカンプ「案D 緑だけ」を足して保存し、スマートオブジェクトを置いた文書を開き直して実行しました。
リンク配置のレイヤーには、パネルのアイコンに黄色の警告の印が付いていました。
この状態では、リンク配置のスマートオブジェクトも、カンプは3つのままで表示されました。

そこで、[レイヤー]→[スマートオブジェクト]→[変更されたすべてのコンテンツを更新]を実行しました。
ヒストリーに「変更されたすべてのスマートオブジェクトを更新」が1つ積まれ、文書は未保存の状態になりました。

更新の後にもう一度実行すると、リンク配置の2つにだけ「案D 緑だけ」が出ました。
埋め込みのスマートオブジェクトは、置いたときの中身のままなので、カンプは3つのままでした。
元のファイルを直した直後は、内容を更新してから一覧を取ると、古い一覧を見ずに済みます。
確かめていないこと
練習の文書はスクリプトで開き直したので、画面から開いたときに自動で更新されるかは確かめていません。
リンク先のファイルが見つからないとき、CCライブラリのグラフィック、PSD以外のファイル(PSB・AIなど)、アートボードのある文書は試していません。
Mac版と、ほかの版のPhotoshopも確かめていません。
レイヤーを操作するスクリプトは、ほかにもあります。




よくある質問:リンクスマートオブジェクトのレイヤーカンプ一覧
スマートオブジェクトの中のレイヤーカンプを、取得できますか?
この記事ではActionManagerで配置先レイヤーが持つカンプ情報を読み取ります。対象はアクティブな文書のレイヤーとグループ内で、スマートオブジェクトの中身は開きません。取得できたカンプがあるレイヤーだけを表示します。このコードは取得例外を表示せず、取得前の失敗では空配列を返すため、「見つかりませんでした」はカンプの不在を証明しません。一部のレイヤーだけ取得に失敗しても、その失敗は一覧に表示されません。調査用に使う場合は、別のコピーで例外のレイヤー名と内容を記録する改修が必要です。
どんな仕組みで取得しているのですか?
処理の要となるのは、executeActionGet()とActionReferenceの組み合わせです。この処理により、レイヤーのプロパティ情報に直接アクセスできます。取得したプロパティ内には、スマートオブジェクト専用のsmartObjectキーが存在し、その階層下のcompsListオブジェクトからcompListリストを取得します。必要なキーがない場合と取得例外は、このコードでは区別されません。
取得できるレイヤーカンプの情報は、何ですか?
各compオブジェクトには、レイヤーカンプの名前(name)と、カンプに割り当てられたID(ID)が含まれています。
公式のDOMでは、なぜ取れないのですか?
文書のカンプはDocument.layerCompsで扱えますが、この記事は配置先スマートオブジェクトの内部プロパティを読む方法です。確認した2020年版の公式参照資料では、そのcompsList/compList構造の仕様は確認できていません。代替手段として、ActionManager(AMコード)と呼ばれる低レベルAPIを利用し、Photoshop内部のプロパティを参照しています。こうした記述方法は、Photoshopの操作をコード化するScripting Listenerプラグインなどで出力ログを解析して特定されています。
公式ドキュメントに記載のない方法を使っても、大丈夫ですか?
ActionReferenceやexecuteActionGet()自体は公式参照資料にあります。ただし、この例で使う内部プロパティの構造や版をまたぐ互換性まで確認できたわけではありません。Photoshopの非公開内部情報を参照する方法のため、使う前に、コピーしたファイルで動作を確認してください。
スクリプトは、どうやって実行しますか?
サンプルコードを、拡張子が.jsxのファイルとして保存し、Photoshopから実行します。この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめられています。Photoshopのほかの自動化手順は、まとめ記事で確認できます。
記事の内容は、今のPhotoshopで確認されていますか? 最新はどこで確認しますか?
掲載のコードは、2026年10月20日にPhotoshop 2026(27.11.0)とWindows 11 Proで実行して確かめました。
リンク配置と埋め込みの両方で一覧が出て、元のファイルでカンプを足したときは、内容を更新するまで古い一覧のままでした。
非公開の内部情報を使う方法のため、ほかの版では、まずコピーしたファイルで試してください。
最新はAdobe公式のScripting Guideなどの資料で確認してください。
