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

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)の書き方で、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。文字編集中は文字範囲などを返す場合がある)
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(“背景”) のように書きます。

例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隠しているか・ロックしているか
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();
}

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

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

この記事を書いた人

目次