とあるDTPオペレーターのInDesignスクリプト備忘録

デザイナー上がりですがいまはDTP命。InDesign用スクリプトの解説などを綴っています。コメント、読者登録歓迎

【入門者向け①】スクリプトでInDesignを操作① ~基本的なフレーム操作~

スクリプトを使ってInDesignを操作する方法を、基本中の基本から説明したいと思います。
高度な説明はできませんが、しょっぱなからつまずいている人がこの記事を読み終わった時、なんとなくスクリプトの考え方が分かるようになればいいなと思ってます。
まず、InDesignを開き(CC以降を想定)、大きさとかはどうでもいいので、白紙ドキュメント上にテキストフレームを3つ作ってください。
(もちろんスクリプトでテキストフレームを生成することもできますが、これから説明することよりもややこしくなるので今回は割愛)

次に、塗りは「なし」にしてください。ここまで用意ができたら、実際にスクリプトを使って操作してみます。
この3つのテキストフレームの中の1つに、「黒」の塗りを設定してみます。
ESTKの白紙の新規画面に、次の英文をコピペではなく「入力」し、ESTK上で実行してみてください。
(ESTKの操作法はググってください。もし要望があれば、ESTKの説明記事も作成します)

app.activeDocument.textFrames[0].fillColor = "Black";

テキストフレームのうち、どれか1つが黒塗りになったはずです。ならなかった人は以下のどれかを確認してください。
 ・誤字脱字、特にスペルミスはないか?
 ・大文字小文字は見本通りになっているか?
 ・複数形の「-s」がちゃんとついているか?
 ・Blackの前後に「"」が付いているか?
 ・ESTKの使い方(特にターゲットが使用中のInDesignになっているか)は合ってるか?

よくある間違いの例
 × activedocument(dが小文字) 
 × textframes(Fが小文字)
 × textFrame(複数形の-sがない)
 × textFrames.fillColor([0]がない)
 × fillColor = Black;("がない)
 × ESTKのターゲット指定が間違っている


ESTKのターゲット指定が引っかかっている場合、1行目に「#target InDesign」を付けると解決したりします。
これを入れて上手く行ったという人は、以降1行目は削除しないでください。

うまく動いたところで一つ一つ説明していきます。

■最初の「app」について
 これはInDesignそのものを指します。大体の場合、最初になんらかのかたちで「app」の1文を入れることになると思います。
 appの記述なしでも動作する命令文(alertとか)もあるのですが、ここでは省きます。

■「activeDocument」について

 名前からも予想が付きますが、あなたがいままさに操作しているInDesignドキュメントを指します。
 初心者が書いたスクリプトが動かないとき、これが書かれていない場合が多いです。
 ちなみに「documents[0]」でもactiveDocumentと同じ意味合いになります。こちらの書き方を選ぶ人も多いです。

■「textFrames」について
 テキストフレームそのものを指します。なにげに複数形の「-s」がとても重要です。
 対象のテキストフレームが1つしかなくても「-s」は必要です。
 「F」が大文字であることにも注目。Javaは単語の境目の先頭文字が大文字になることが多いです。
 前述のactiveDocumentも、Dが大文字ですね。
 これは「キャメルケース(らくだのこぶ)」と呼ばれる英文表記法で、Javaに限らずプログラムではよく用いられる表記法のようです。凸凹させることで単語の区切り目をわかりやすくしているのですね。

■「[0]」について

 初心者が書いたスクリプトが動かないときのあるあるが、この[0]の有無ですね。添字と呼ばれるもので、複数形の-sが付く文の後にはこの添字が付く場合が多いです。
 数字としては0ですが、Javaでは「0 = 1番め」を指します。これがもし「1番目=[1]」だったらもう少し馴染みやすいのかもしれませんね。
 なぜ[0]はじまりなのかはJavaを学んでいくとなるほど、と分かるのですが、ここでは省きます。
 つまりtextFrames[0]は「1番目のテキストフレーム」ということになります。
 対象のテキストフレームが1つしかなくても、この[0]は省略できません。
 とにかく「Javaでは「0」が「1番め」」というルールを刻み込んでください。

 また、どのテキストフレームが「1番め」なのかはInDesignが決めているので、必ずしもユーザの感覚とは一致しません。
 上の例文を実行した場合も、人によってどのテキストフレームが黒塗りになるか違う可能性があります。

■「fillColor」について

「塗り」のことです。-sは付きません(添字の[0]もついてませんよね)。
画面上ではスウォッチパレットから塗り色指定をしますが、スクリプトで塗り色指定をするときにはこの「fillColor」を使います。

■「=」について

=の左側の内容と右側の内容を橋渡ししています。Javaではこのイコールがよく登場しますが、登場する場面によってその役割が異なります。
今回は左の内容(処理対象)と、右の内容(値)をつなぐためのものと思ってください。

■「Black」について

スクリプトの処理に対する実際の値です。イコールの左側が「こんなふうにして」という文章なのに対し、右側は「その具体的な値(数値だったり処理だったり)はこれ」と指示しています。今回は「具体的な値は『黒』」と指示しています。
この黒はスウォッチパレットでは[黒]と表示されていますが、スクリプトで指定する場合は"Black"と指示します。"black"ではダメです(紙色は"Paper"です。これまた"paper"ではダメです)。

■「""」について

Javaでは色々な文字をよくこの「""」で囲みます。もちろん囲んでいいものと悪いものがああります。言い方を変えれば、「""で囲まなくてはならないもの」があります。
詳しい説明は別な場でしますが、今回のところは色指定は「""」をつけて行うとおぼえといてください。

■最後の「;」について
Javaでは行末セミコロン「;」を付けます(行末以外で付ける場合もありますが、役割が違うのでいまは考えないでください)。
じつはInDesignスクリプトではこの「;」を打たなくても改行さえ入っていれば動いてしまうのですが、Javaの慣例的なものとして、行末には「;」を付けるものと考えてください。

最後におさらい。見本のスクリプトを無理くり日本語にするとこうなります。可能ならザキヤマ風に読んでみてください。

InDesignの~ 現在編集中の~ テキストフレーム(1番目)の~ 塗り色の~ =(値は~) くーろ~

アホらしいと思われるかもしれませんが、物事を覚えるときにリズムは意外と大事だったりします。
見本のスクリプトの1行に秘められたそれぞれの意味がわかったところで次に進みます。
冒頭で作成したInDesignドキュメントは引き続き使用するので、そのままにしてください。(つづく)