Amazon10/19まで!プライム感謝祭開催中!セール会場へ

Illustratorスクリプト(jsx)│DOMの基本|documents・layers・pageItemsの扱い方

Illustratorスクリプトでは、ファイル・レイヤー・オブジェクトを、入れ子になった「オブジェクト」としてたどって操作します。

このつながりを DOM(ドキュメントオブジェクトモデル)と呼びます。

  • app:Illustrator そのもの
  • app.activeDocument:いま開いているファイル
  • document.layers:レイヤーの一覧
  • document.pageItems:ファイルの中のすべてのオブジェクト
  • document.selection:いま選んでいるもの

この記事は、Adobe の Illustrator スクリプトの資料をもとに有志が公開している「Adobe Illustrator Scripting Guide」(2026年9月29日に確認)にもとづいています。

コードは ExtendScript(古い JavaScript)の書き方です。

2026年10月16日に、Windows 11 Pro(10.0.26200)のAdobe Illustrator 30.8.2(Build 7R)で、例1・例2・例3と、つまずきやすい点の後ろから消す例を実行し、結果を確かめました。

ファイルを開いていないときのエラーは、開いているほかのファイルを閉じる必要があるため確かめていません。

目次

DOMのつながり

app                         Illustrator
├─ documents               開いているファイルの一覧
└─ activeDocument          いま前にあるファイル
      ├─ layers            レイヤー
      │  └─ pageItems      そのレイヤーのオブジェクト
      ├─ pageItems         ファイルの全オブジェクト
      ├─ pathItems         パスだけ
      ├─ textFrames        テキストだけ
      ├─ placedItems       配置した画像だけ
      ├─ groupItems        グループだけ
      ├─ artboards         アートボード
      └─ selection         選んでいるもの

pageItems はすべての種類をまとめた一覧で、pathItems や textFrames は種類ごとの一覧です。

pageItemsと種類ごとの一覧を数えた結果(2026年10月16日)

新規のRGBのファイル(500×300ポイント)に、上から「文字」「図形」「背景」の3つのレイヤーを作り、「図形」の中に空のサブレイヤーを1つ入れました。

「文字」にテキストを1つ、「図形」に2つのパスをまとめたグループを1つ、「背景」に長方形を1つ置きました。

ファイルの用意はスクリプトで行い、確認に含めていません。

文字・図形・背景のレイヤーと、2つのパスを含むグループ、空のサブレイヤーを展開したレイヤーパネル
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。数を読み取ったファイルのレイヤーパネル(パネルを切り出し)。「図形」の中に、2つのパスを含むグループと空のサブレイヤーがある。

下の表の数は、スクリプトで読み取ったものです。

一覧数入っていたもの
doc.pageItems5テキスト、グループ、グループの中のパス2つ、長方形
doc.pathItems3パス3つ(グループの中の2つを含む)
doc.textFrames1テキスト
doc.groupItems1グループ
「図形」レイヤーのpageItems1グループだけ

ファイル全体の pageItems と pathItems には、グループの中のパスも数えられていました。

一方、「図形」レイヤーの pageItems に直接入っていたのは、グループ1つだけでした。

複合パス、クリッピングマスク、入れ子のグループがあるときの数は確かめていません。

ファイル(Document)の主なプロパティ

書き方意味
doc.nameファイルの名前(場所は含まない)
doc.fullName場所を含むファイル
doc.saved最後に保存してから変更がなければ true
doc.activeLayerいま選ばれているレイヤー
doc.documentColorSpaceカラーモード(RGB か CMYK)
doc.selection選んでいるもの(何も選んでいないときはnull。文字編集中は文字範囲などを返す場合がある)
Adobe Illustrator Scripting Guide の Document の説明をもとに作成

保存は doc.save()、形式を指定した保存は doc.saveAs()、書き出しは doc.exportFile()、閉じるのは doc.close() です。

例1:レイヤー名を並べる

var doc = app.activeDocument;
var names = [];
for (var i = 0; i < doc.layers.length; i++) {
  names.push(doc.layers[i].name);
}
alert(names.join("\n"));

一覧は0番から数え、.length で数が分かります。

名前でレイヤーを取り出すときは doc.layers.getByName("背景") のように書きます。

例1を実行した結果(2026年10月16日)

上の「pageItemsと種類ごとの一覧を数えた結果」と同じファイルで、例1のコードをそのまま保存したファイルを、「ファイル」→「スクリプト」→「その他のスクリプト」から実行しました。

通知には「文字」「図形」「背景」の3行が、レイヤーパネルの上からの順に表示されました。

「図形」の中のサブレイヤーの名前は、通知に出ませんでした。

文字・図形・背景の3行を表示した通知と、図形の中にサブレイヤーがあるレイヤーパネル
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。例1のコードを実行したときの実機画面(通知とレイヤーパネルを含む範囲を切り出し)。通知は「文字」「図形」「背景」の3行で、「図形」の中のサブレイヤーの名前は出ていない。

doc.layers に入っていたのは、いちばん上の階層の3つのレイヤーでした。

同じファイルで、doc.layers.getByName("背景") で取り出したレイヤーの名前をスクリプトで読み取ると、「背景」でした。

この値は、画面に通知を出さずにスクリプトで読み取ったものです。

名前が同じレイヤーが2つ以上あるときの動きは確かめていません。

例2:選んだものの種類を調べる

var sel = app.activeDocument.selection || [];
var lines = [];
for (var i = 0; i < sel.length; i++) {
  lines.push(sel[i].typename + " / " + sel[i].name);
}
alert(lines.join("\n"));

typename には、PathItem(パス)・TextFrame(テキスト)・GroupItem(グループ)・PlacedItem(配置画像)のような種類の名前が入ります。

種類によって使えるプロパティが違うので、処理の前に typename で分けるのが基本です。

if (sel[i].typename === "TextFrame") {
  // テキストのときだけの処理
}

例2を実行した結果(2026年10月16日)

新規のRGBのドキュメント(400×240ポイント)に、名前をDOM_RECTにした青い長方形と、名前をDOM_TEXTにしたテキスト「DOM SAMPLE」を1つずつ置きました。

ドキュメントと2つのオブジェクトの用意はスクリプトで行い、確認に含めていません。

Ctrl+Aで2つとも選び、「ファイル」→「スクリプト」→「その他のスクリプト」から、例2のコードをそのまま保存したファイルを実行しました。

通知には「TextFrame / DOM_TEXT」と「PathItem / DOM_RECT」の2行が表示されました。

青い長方形とDOM SAMPLEのテキストを選んで例2のコードを実行し、TextFrame / DOM_TEXTとPathItem / DOM_RECTの2行が通知に出たIllustratorの画面
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。例2のコードを実行したときの実機画面(上部のメニューとファイルのタブの行を切り取り)。通知に「TextFrame / DOM_TEXT」と「PathItem / DOM_RECT」の2行が出た。画面下のツール表示はダイレクト選択に変わっているが、切り替わった理由は確かめていない。

テキストはTextFrame、長方形はPathItemとして、オブジェクトの名前と一緒に表示されています。

今回はテキストが1行目、長方形が2行目でしたが、並び順の決まり方は確かめていません。

実行の前後で、2つのオブジェクトの位置や名前は変わりませんでした。

グループや配置画像を選んだとき、何も選んでいないとき、文字の編集中に実行したときの表示は確かめていません。

例3:選んだものを右に10mm動かす

var MM = 2.834645; // 1mm をポイントに直す数
var sel = app.activeDocument.selection || [];
for (var i = 0; i < sel.length; i++) {
  sel[i].translate(10 * MM, 0);
}

スクリプトの長さの単位はポイント(1ポイント=1/72インチ)です。

ミリで考えたいときは、1mm=約2.834645ポイントを掛けます。

大きさを変えるのは resize()、回すのは rotate() です。

例3を実行した結果(2026年10月16日)

例2と同じ長方形とテキストを2つとも選んだまま、例3のコードをそのまま保存したファイルを、同じ「その他のスクリプト」から1回実行しました。

左寄りに置いた青い長方形とDOM SAMPLEのテキストを2つとも選んだIllustratorの画面
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。コードを実行する前の実機画面(上部のメニューとファイルのタブの行を切り取り)。長方形とテキストをCtrl+Aで2つとも選んでいる。例2の実行前に撮ったもので、例2では位置は変わらない。
例3のコードを実行し、青い長方形とDOM SAMPLEのテキストが実行前より右へ移ったIllustratorの画面
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。例3のコードを1回実行した後の実機画面(上部のメニューとファイルのタブの行を切り取り)。画面の表示位置は1枚上と同じで、長方形とテキストが右へ移っている。ツール表示がダイレクト選択のため、選択の枠の見え方は実行前と異なる。

実行の前と後の位置は、スクリプトで読み取って比べました。

対象左端(前→後)右端(前→後)上端と下端
長方形50 → 78.34645150 → 178.34645変わらない
テキスト50 → 78.34668173.99854 → 202.34473変わらない

数値の単位はポイントで、線の幅を含まない外枠(geometricBounds)の値を小数第5位までにそろえています。

コードで指定した移動量は、10×2.834645=28.34645ポイントです。

長方形は左端も右端もちょうど28.34645ポイント右へ移り、上下の位置と大きさは変わりませんでした。

テキストは左端も右端も、指定した量との差が0.001ポイント未満で右へ移り、上下の位置は変わりませんでした。

テキストの幅には0.0005ポイントほどの差が出ましたが、理由は確かめていません。

文字の内容、フォント、オブジェクトの名前、ロックと非表示の状態は、実行前と同じでした。

グループや配置画像、ロックや非表示のオブジェクト、文字の編集中に実行したときの動きは確かめていません。

オブジェクト(PageItem)の主なプロパティ

書き方意味
item.typename種類の名前(読むだけ)
item.nameオブジェクトの名前(レイヤーパネルに出る名前)
item.layer入っているレイヤー(読むだけ)
item.parent親(グループやレイヤー)(読むだけ)
item.left・item.top左端と上端の位置
item.width・item.height幅と高さ
item.geometricBounds線の幅を含まない外枠 [左, 上, 右, 下](読むだけ)
item.visibleBounds線の幅を含む外枠(読むだけ)
item.hidden・item.locked隠しているか・ロックしているか
Adobe Illustrator Scripting Guide の PageItem の説明をもとに作成

ロックや非表示のオブジェクトは動かせないことがあるので、処理の前に locked や hidden を確かめます。

つまずきやすい点

  • ファイルを開いていないと app.activeDocument でエラーになる(app.documents.length で先に確かめる)
  • 一覧から消しながら0番から進むと、番号がずれて飛ばされる(後ろから進む)
  • ExtendScript なので let・const・=> は使えない
// 消すときは後ろから
var items = app.activeDocument.pathItems;
for (var i = items.length - 1; i >= 0; i--) {
  if (items[i].hidden) items[i].remove();
}

後ろから消す例を実行した結果(2026年10月16日)

新規のRGBのファイル(500×300ポイント)に長方形のパスを4つ置き、pathItems の並びで隣り合う2つ(1番と2番)を非表示にしました。

ファイルの用意と非表示の設定はスクリプトで行い、確認に含めていません。

元のファイルとは別に保存したコピーを開き、上のコードをそのまま保存したファイルを、「ファイル」→「スクリプト」→「その他のスクリプト」から1回実行しました。

4つのパスのうち中の2つが非表示になったレイヤーパネル
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。後ろから消す例を実行する前のレイヤーパネル(パネルを切り出し)。中の2つ(目のアイコンなし)が非表示。

非表示の2つだけが消え、パスは4つから2つになりました。

非表示の2つが消え、表示していた2つのパスが残ったレイヤーパネル
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。後ろから消す例を1回実行した後のレイヤーパネル(パネルを切り出し)。表示していた2つだけが残った。

表示していた2つは残り、表示の状態、アンカーポイントの数(4つ)、位置は変わりませんでした。

0番から進む書き方で消したときに飛ばされるかどうかは、試していません。

ロックした非表示のパスや、グループの中の非表示のパスがあるときの動きも確かめていません。

スクリプトの実行のしかたと置き場所は、Illustratorスクリプト(jsx)の始め方で紹介しています。

まとめ

  • app → activeDocument → layers・pageItems とたどって操作する
  • 種類ごとの一覧(pathItems・textFrames など)と、全部の一覧(pageItems)がある
  • typename で種類を見分けてから処理する
  • 長さの単位はポイントで、1mm=約2.834645ポイント

参考:Adobe Illustrator Scripting Guide(Document・PageItem、2026年9月29日に確認)。

レイヤーの一覧と選択範囲を混同しない

activeDocumentはappのプロパティです。documentsコレクションの子として参照するものではありません。レイヤーにはサブレイヤー、グループには子オブジェクトがあるため、doc.layers、layer.layers、group.pageItemsなど、調べる範囲に合う参照を選びます。名前が重複する場合にgetByNameだけで対象を決めることも避けてください。

selectionは選択がない場合にnullとなり、文字を編集中なら挿入点や文字範囲を含む場合もあります。このページのオブジェクト移動例は、選択ツールで図形やテキストオブジェクト全体を選んだ場合を対象とします。文字編集中は実行せず、コピーしたドキュメントで確認してください。

よくある質問:IllustratorスクリプトのDOM

IllustratorスクリプトのDOMとは、何ですか?

Illustratorスクリプトでは、ファイル・レイヤー・オブジェクトを、入れ子になった「オブジェクト」としてたどって操作します。このつながりを、DOM(ドキュメントオブジェクトモデル)と呼びます。appがIllustrator本体、app.activeDocumentがいま開いているファイル、document.layersがレイヤーの一覧、document.pageItemsがファイルの中のすべてのオブジェクト、document.selectionがいま選んでいるものです。

pageItemsと、pathItemsやtextFramesは、どう違いますか?

pageItemsはすべての種類をまとめた一覧で、pathItemsやtextFramesは種類ごとの一覧です。

2026年10月16日にIllustrator 30.8.2で数えたところ、ファイル全体の pageItems と pathItems にはグループの中のパスも含まれ、「図形」レイヤーの pageItems に直接入っていたのはグループだけでした。

選んだものの種類は、どうやって調べますか?

typenameを使います。typenameには、PathItem(パス)・TextFrame(テキスト)・GroupItem(グループ)・PlacedItem(配置画像)のような種類の名前が入ります。種類によって使えるプロパティが違うので、処理の前にtypenameで分けるのが基本です。

レイヤーを名前や番号で取り出すには、どう書きますか?

一覧は0番から数え、.lengthで数が分かります。名前でレイヤーを取り出すときは、doc.layers.getByName("背景") のように書きます。ただし、名前が重複する場合に、getByNameだけで対象を決めることは避けてください。

Illustrator 30.8.2で試したところ、例1の doc.layers にはいちばん上の階層のレイヤーだけが入り、サブレイヤーの名前は出ませんでした。

doc.layers.getByName("背景") で取り出したレイヤーの名前は「背景」でした。

選んだものを右に10mm動かすとき、単位はどうなりますか?

スクリプトの長さの単位はポイント(1ポイント=1/72インチ)です。ミリで考えたいときは、1mm=約2.834645ポイントを掛けます。大きさを変えるのはresize()、回すのはrotate()です。記事の移動例は、選択ツールで図形やテキストオブジェクト全体を選んだ場合を対象としており、文字編集中は実行せず、コピーしたドキュメントで確認してください。

スクリプトが、エラーになったり、一部のオブジェクトが飛ばされたりするのは、なぜですか?

つまずきやすい点として、次の3つを挙げています。ファイルを開いていないと、app.activeDocumentでエラーになる(先にapp.documents.lengthで確かめます)。一覧から消しながら0番から進むと、番号がずれて飛ばされる(後ろから進みます)。ExtendScriptなので、let・const・アロー関数は使えない。ロックや非表示のオブジェクトは動かせないことがあるため、処理の前にlockedやhiddenを確かめます。

後ろから消す例は、Illustrator 30.8.2で非表示の2つだけが消えることを確かめました。

ファイルを開いていないときのエラーは確かめていません。

selectionが、nullになったり、文字範囲が返ってきたりするのは、なぜですか?

selectionは、何も選んでいないときはnullになります。文字を編集中は、挿入点や文字範囲などを返す場合があります。なお、activeDocumentはappのプロパティで、documentsコレクションの子として参照するものではありません。レイヤーにはサブレイヤー、グループには子オブジェクトがあるため、doc.layers、layer.layers、group.pageItemsなど、調べる範囲に合う参照を選んでください。

この記事のコードは、実際のIllustratorで確認したものですか? 最新はどこで確認しますか?

記事は、有志が公開している「Adobe Illustrator Scripting Guide」(2026年9月29日に確認)にもとづいています。

コードはExtendScript(古いJavaScript)の書き方です。

2026年10月16日に、Windows 11 ProのIllustrator 30.8.2で、例1・例2・例3と後ろから消す例のコードを実行し、レイヤー名の並び、選んだものの種類と名前の表示、約10mmの右への移動、非表示のパスだけの削除を確かめました。

ファイルを開いていないときのエラー、名前が同じレイヤーがあるときの getByName、Macやほかの版での動きは確かめていません。

実行のしかたと置き場所は、関連記事「Illustratorスクリプト(jsx)の始め方」で紹介しています。

バージョンによって動作が異なる場合があるため、最新はAdobe公式の資料で確認してください。

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

この記事を書いた人

目次