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つ置きました。
ファイルの用意はスクリプトで行い、確認に含めていません。

下の表の数は、スクリプトで読み取ったものです。
| 一覧 | 数 | 入っていたもの |
|---|---|---|
doc.pageItems | 5 | テキスト、グループ、グループの中のパス2つ、長方形 |
doc.pathItems | 3 | パス3つ(グループの中の2つを含む) |
doc.textFrames | 1 | テキスト |
doc.groupItems | 1 | グループ |
「図形」レイヤーのpageItems | 1 | グループだけ |
ファイル全体の pageItems と pathItems には、グループの中のパスも数えられていました。
一方、「図形」レイヤーの pageItems に直接入っていたのは、グループ1つだけでした。
複合パス、クリッピングマスク、入れ子のグループがあるときの数は確かめていません。
ファイル(Document)の主なプロパティ
| 書き方 | 意味 |
|---|---|
| doc.name | ファイルの名前(場所は含まない) |
| doc.fullName | 場所を含むファイル |
| doc.saved | 最後に保存してから変更がなければ true |
| doc.activeLayer | いま選ばれているレイヤー |
| doc.documentColorSpace | カラーモード(RGB か CMYK) |
| doc.selection | 選んでいるもの(何も選んでいないときはnull。文字編集中は文字範囲などを返す場合がある) |
保存は 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行が、レイヤーパネルの上からの順に表示されました。
「図形」の中のサブレイヤーの名前は、通知に出ませんでした。

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行が表示されました。

テキストは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回実行しました。


実行の前と後の位置は、スクリプトで読み取って比べました。
| 対象 | 左端(前→後) | 右端(前→後) | 上端と下端 |
|---|---|---|---|
| 長方形 | 50 → 78.34645 | 150 → 178.34645 | 変わらない |
| テキスト | 50 → 78.34668 | 173.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 | 隠しているか・ロックしているか |
ロックや非表示のオブジェクトは動かせないことがあるので、処理の前に 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回実行しました。

非表示の2つだけが消え、パスは4つから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公式の資料で確認してください。
