スクリプト入門2

Illustrator スクリプト入門 02(ドキュメントを軽く見てみよう編)

Illustrator スクリプト入門 01(はじめの一歩編) に続きまして、

今回は、Adobe で配布されているドキュメントPDFを見ながら、スクリプトの雰囲気を感じていただく回です。それではレッツゴー。

Adobe が配布しているドキュメントをゲットする

スクリプトをつくるとき、やりたいことがあっても、できることがわからないと何も書けないですよね。
ということで、まずは Adobe が配布しているドキュメントをダウンロードしましょう。

まずは、 http://www.adobe.com/devnet/illustrator/scripting.html にアクセス。
Illustrator のバージョンごとに、以下のようなドキュメントが用意されていると思います。

- Adobe Illustrator XX XXXX Scripting Guide
- Adobe Illustrator XX XXXX Reference: AppleScript
- Adobe Illustrator XX XXXX Reference: JavaScript
- Adobe Illustrator XX XXXX Reference: VB Script

一番上の Scripting Guide は、スクリプトについてのガイドが書かれてるドキュメントです。とりあえずダウンロードしておきましょう。
2つめの Reference: AppleScript は、macOS のみで動く AppleScript という言語で書くときのドキュメントです。
3つめの Reference: JavaScript は、macOS と Windows の両方で動く JavaScript という言語で書くときのドキュメントです。JavaScript は有名ですよね。
最後の Reference: VB Script は、Windows のみで動く VB Script という言語で書くときのドキュメントです。

今回(というかずっと) JavaScript で書くので、2番目の Reference: JavaScript をダウンロードしましょう。

なんとなくPDFドキュメントを読んでみる

とりあえずダウンロードした2つのPDFドキュメントを一通り流し読みしてみましょう。サササーっとスクロールする感じでOK。
何書いてあるかさっぱりわかりませんよね。英語だし。
ぼくもわかりません。英語、読めないし。
でも大丈夫。雰囲気とルールさえ何となくわかってしまえばそこそこ理解できるようになります。
理解できなくても、全体に目を通して「なるほどね」「ふむふむ」といった解ってる感を演出しておきましょう(ここ大事)。

PDFドキュメントのちょっとしたルールを知る(目次編)

まずは、Reference: JavaScript の PDF (Illustrator_JavaScript_Scripting_Reference_xxxx.pdf) を開きましょう。
この PDF は、Illustrator のスクリプトで使用する魔法が沢山かかれているドキュメントです。このPDFドキュメントを見れば、ある程度の魔法を唱えることができます。

次に、3ページ目を開いてください。鬼のような量の目次があると思います。
1 JavaScript Object Reference の下にある、

- Application
- Artboard
- Artboards
- Brush
- Brushes
- ...

これらが、Illustrator スクリプトで使用する魔法一覧になります。
目次から「ああ、これは アートボードについて書かれてる項目なのね。」「ふむふむ、ブラシに関してはここを見ればいいのね。」というおおざっぱなイメージがつくと思います。

さらに、この目次を見て、ArtboardArtboards のように、単数系複数形が分かれてることに気付いたアナタ!素晴らしい!
この単数系と複数形が分かれてることに気付くだけで一気に理解が深まります。

大ざっぱに言ってしまうと、Artboard のような単数系は「とある1つのアートボード」、Artboards のような複数系は「複数のアートボードをひとまとめにしたもの」です。そのまんまですけどね。
もっと細かいことをいうと、単数系と複数形が対で存在しないものは、特殊な魔法だったりします。今回は特殊魔法はスルーします。

目次から、使える魔法のイメージと、単数系・複数形があることが理解できれば十分です。

PDFドキュメントのちょっとしたルールを知る(複数系編)

次に Layers のページを見ていきましょう。単数系ではなく複数形の方ね。
Layers ページを開くと、ちょっとした説明の下に Layers properties というセクションと、 Layers methods という2つセクションで構成されてますよね。

- Layers
  - Layers properties
  - Layers methods

基本的に、各魔法はこの2つのセクションで構成されています。
けど、properties とか methods と言われてもさっぱりわからんですよね。ぼくも上手に説明できないのですが、

- Layers → レイヤー群
  - Layers properties → レイヤー群固有の情報
  - Layers methods → レイヤー群の操作

といった感じです。現時点ではあまり気にしなくて良いです。

では、複数形のものは何ができるの?というのが重要です。
実際にはいろんなことができるのですが、現時点でおぼえて欲しいのが、

- レイヤー群の数をかぞえる
- レイヤーを追加する

の2つです。

数をかぞえる

この数をかぞえるというのは非常に重要で、なにかを操作するのに頻繁に使います。
たとえば、Illustrator で開いているドキュメントの数はいくつか、ドキュメント内のパスアイテムの数はいくつなのか、といったことを調べます。
スクリプト入門 01 で作ったサンプルがそれです。

var doc = app.activeDocument;
var sels = doc.selection;
var count = sels.length;
alert(count);

このサンプルでは、選択したアイテムの数をかぞえました。

追加する

何かを新たに作りたいときは、この複数形の方を使います。
つい、単数系の方で「レイヤーを作るぜ!」というようなノリになってしまいますが、スクリプトでは、レイヤー群の中に「レイヤーを追加」するというのが正しい感覚です。
まずは、こちらもサンプルを動かしてみましょう。

var doc = app.activeDocument;
var lay = doc.layers.add();

このスクリプトを実行すると、レイヤーがひとつ追加されましたよね。
Illustratorで現在アクティブになっているドキュメント内にあるレイヤー群に新たなレイヤーを追加した。ことになります。

複数形の layers でレイヤーを追加!それだけ実感できれば十分です。

次は、その追加したレイヤー単体を操作してみましょう。

追加したレイヤーの名前を取得する

先ほど、複数形の layers でレイヤーを追加しました。
追加したレイヤー自体は単体なので、今度は単数系の方で操作します。

まず、PDFドキュメントの Layer ページを開いてください。単数系の方ね。レイヤーについての魔法が沢山かかれてますよね。
その中に、name という魔法があります。この魔法を使って、先ほど追加したレイヤーに名前をつけてみましょう。
先ほどの、レイヤーを追加するスクリプトに、以下の行を追加してみてください。

var layName = lay.name;
alert(layName);

そして実行します。
ダイアログにレイヤー名が表示され、ダイアログを閉じるとドキュメントにその名前のレイヤーが一番上に追加されていれば正解。

目的の箱 lay の後ろにドットname を追加することで、その箱(レイヤー)の名前が取得でた。ということです。
そして取得した名前を var layName という箱に詰め込んで、ダイアログで表示した。というイメージです。

ちょっと話がそれますが、このスクリプトを実行すると、ダイアログにレイヤー名が表示されてから、ドキュメントにその名前のレイヤーが追加されたような感じがしましたよね。
実はこの順番、ちょっと違うんですよね。なんかややこしいこと言ってるなあと思われるかもしれませんが、結構重要なポイントなのでここで説明しておきますね。

本当は、

ドキュメントにレイヤーが追加され、そのレイヤーの名前をダイアログに表示。ダイアログを閉じた瞬間に、ドキュメントを「最新の状態に描画」しなおしている。

というのが実際の処理の順番です。
このように、スクリプトを書いてる順番と、処理される順番に違和感がある場合は、記述のミス以外にも、Illustrator の内部処理が関係することがあります。
そのことを頭の片隅置いといてください。

話を戻します。

追加したレイヤーの名前を変更する

先ほどのスクリプトでは、追加したレイヤーの名前を取得しました。今度は、そのレイヤーの名前を変更してみましょう。
以下のスクリプトを実行してみてください。

var doc = app.activeDocument;
var lay = doc.layers.add();
lay.name = "追加したレイヤーだぜ!";

追加したレイヤーだぜ!」というレイヤーが追加されましたよね。
ここで、先ほどレイヤーの名前を取得する書き方となんか似てるなあと思われたかた、すばらしい!さすが!
スクリプトの魔法は、情報を取得する魔法と、情報を変更する魔法がほぼ同じことが多いのです。
 var layName = lay.name;lay の名前を取得
 lay.name = "変えたい名称";lay の名前を変更
といった具合に、イコールの右に置くか、左に置くかで処理が変わってくるのです。

スクリプトを書いていくうちに慣れてくるところなので、いまのところは「左に置くか右に置くかで意味が違うのかー」ということを憶えてしまえば問題ないです。

よーし、このままのテンションでもうちょっと進めるよ!

PDFドキュメントを開いて、 Layer のページを表示してください。
魔法が沢山書かれている Layer properties を見てください。先ほど使った name という魔法もありますよね。
で、 What it is という列に、それぞれの魔法の説明が英語で書かれてるのがわかります。
その説明の中に Read-only. と書かれてる魔法があることに気付きましたか? すぐに気付いたあなた。すごい。天才?
この Read-only. というのは、「取得だけできるよ!」という意味なんです。
先ほど、 name で、名称を取得したり変更したりしましたが、 Read-only. と書かれてる魔法は「取得」しかできません。
ここ、超重要。取得できるんだから変更もできるっしょ!というノリでスクリプトを書いてもうまく動かないのです。

このあたりもちゃんとチェックしながらスクリプトを書くと、ストレスがぐーんと減りますので、面倒くさがらずにPDFドキュメントをチェックしましょう。

以上、Illustrator スクリプト入門 02(ドキュメントを軽く見てみよう編)でした。お疲れさまでした。
スクリプトを書くときに必要なPDFドキュメントをゲットし、
そのPDFドキュメントの雰囲気をなんとなく知ってもらい、
PDFドキュメントを見ながら簡単なスクリプトを動かしてみました。

次回はPDFドキュメントの最低限おさえておきたいポイントを説明していこうかなーと思います。

喫茶店作業のコーヒー代として使わせていただきます!