Illustratorスクリプトでは、ファイル・レイヤー・オブジェクトを、入れ子になった「オブジェクト」としてたどって操作します。
このつながりを DOM(ドキュメントオブジェクトモデル)と呼びます。
- app:Illustrator そのもの
- app.activeDocument:いま開いているファイル
- document.layers:レイヤーの一覧
- document.pageItems:ファイルの中のすべてのオブジェクト
- document.selection:いま選んでいるもの
この記事は、Adobe の Illustrator スクリプトの資料をもとに有志が公開している「Adobe Illustrator Scripting Guide」(2026年9月29日に確認)にもとづいています。
コードは ExtendScript(古い JavaScript)の書き方で、Illustratorの画面での再現は含みません。
DOMのつながり
app Illustrator
├─ documents 開いているファイルの一覧
└─ activeDocument いま前にあるファイル
├─ layers レイヤー
│ └─ pageItems そのレイヤーのオブジェクト
├─ pageItems ファイルの全オブジェクト
├─ pathItems パスだけ
├─ textFrames テキストだけ
├─ placedItems 配置した画像だけ
├─ groupItems グループだけ
├─ artboards アートボード
└─ selection 選んでいるものpageItems はすべての種類をまとめた一覧で、pathItems や textFrames は種類ごとの一覧です。
ファイル(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(“背景”) のように書きます。
例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") {
// テキストのときだけの処理
}例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() です。
オブジェクト(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();
}スクリプトの実行のしかたと置き場所は、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となり、文字を編集中なら挿入点や文字範囲を含む場合もあります。このページのオブジェクト移動例は、選択ツールで図形やテキストオブジェクト全体を選んだ場合を対象とします。文字編集中は実行せず、コピーしたドキュメントで確認してください。
