InDesignの自動化に役立つ知識とツールのまとめ

# InDesignを自動化する2つの方法

InDesignの自動化には2つのアプローチがある。1つはXMLを使った自動組版機能。もう1つはスクリプティングによる機能の拡張。

前者は制作そのものを半自動化するのに対し、後者は標準の機能ではできないような繰り返し処理を、自動で回せるようにしたものが多い。

# 1. XMLによる自動組版

(執筆中につきまとまっていません。)

## おおまかな手順

括弧内はオプションで必要になります。

* 元データとなるXMLファイルを用意する
* InDesign側でXML構造とスタイルを定義し、構造とスタイルをマッピングする
* (元のXMLからInDesign側の構造への整形をプログラムする=XSLTを書く)
* InDesignからXMLを読み込む(・必要に応じてXSLも指定する)

## とりあえず作ってみた
OPML形式のXMLファイルをInDesignに流しこむサンプルが入っています。
http://github.com/hokkey/opml2indesign

## やりかた

HTMLが書ける人にとっては割と理解がしやすい。
XMLとXSLが分かってるとさらに理解しやすい。

### XSLTによる整形をしない簡単な方法

#### データの準備

名前はなんでも良いのですが、テキストエディタで適当な名前のXMLファイルを作成します。とりあえず hoge.xml とでもしましょう。中に Root という名称のタグを作ります。

```xml:hoge.xml

<?xml version="1.0" encoding="UTF-8"?>
<Root></Root>

```

<Root>構造の中へ、自由な名前付けてタグを作成してください。ここでは、同じ見た目にしたいコンテンツには同じ名前のタグを付けておいたほうがよいでしょう。ここでは理解しやすくするためにHTML風の名前付けにしていますが、自由に名前を定義して構いません。

```xml:hoge.xml

<?xml version="1.0" encoding="UTF-8"?>
<Root>
<h1>InDesignの自動化に役立つ知識とツールのまとめ</h1>
<h2>InDesignを自動化する2つの方法</h2>
<article><p>InDesignの自動化には2つのアプローチがある。1つはXMLを使った自動組版機能。もう1つはスクリプティングによる機能の拡張。
前者は制作そのものを半自動化するのに対し、後者は標準の機能ではできないような繰り返し処理を、自動で回せるようにしたものが多い。</p>
</article>
</Root>

```

上の例ではインデントや改行のポイントが若干気持ち悪いのですが、これは後々影響してくるので我慢してください。基本的にInDesignが読み込むXMLには余計なインデントや意図しない改行が含まれないようにした方が良いでしょう。

#### InDesignでの準備

まずは普通にドキュメントを作成します。

通常通りデザインをしますが、自動組版部分のスタイルはすべて *オーバーライドなし* の「段落スタイル」「文字スタイル」で定義してください。
なお、オブジェクトスタイルやグリッドフォーマットといった、段落・文字スタイル以外のスタイル機能は現バージョンの機能では自動組版に使用できません。(プレースホルダとなるフレームに、あらかじめ設定をしておくことは可能)

次にXML構造名を定義します。「ウィンドウ > 構造」パレットを表示し、先程作成したXMLに登場するすべての構造と同じ名称の定義を作成します。

次はInDesign側の構造ツリーを定義します。「ウィンドウ > 構造を表示」を選択すると、ドキュメントの左側にWindowsのエクスプローラーのようなツリー表示があらわれます。ここに先程定義した構造を、読み込むXMLと同じ階層構造で作成していきます。

ただし、今回はh1とarticleだけが設置してあればそれで構いません。

次の手順が自動組版テンプレートをする上でのキモになります。XML構造とInDesign側の概念は、次の3つのパターンでマッピングすることができます。

* XML構造 → 任意のテキストフレームへのマップ
* XML構造 → 任意の段落スタイルへのマップ
* XML構造 → 任意の文字スタイルへのマップ

##### XML構造 → 任意のテキストフレームへのマップ

XMLの\<article\>構造をInDesign上のテキストフレームにマップすると、
XMLで「\<article\>」構造内に入力されている文字情報がInDesignのテキストフレーム内に自動で流し込まれるようになります。

##### XML構造 → 任意の段落スタイルへのマップ

XMLの\<h1\>構造をInDesign側で準備した「見出し1」段落スタイルにマップすると、
InDesign側では\<h1\>構造内に存在するテキスト部分に「見出し1」段落スタイルが適用されるようになります。

1つの構造にテキストフレームと段落スタイルを同時にマップすることもできます。
(1つのフレームに1種類のスタイルという見え方になる)
段落スタイルの中に別の段落スタイルを入れ子状にマップすることはできません。

##### XML構造 → 任意の文字スタイルへのマップ

段落スタイルを入れ子にすることはできませんが、段落スタイルの内側の構造を文字スタイルにマップすると、その部分には文字スタイルが適用された状態でInDesignに流し込まれます。

段落スタイル・文字スタイルのマッピングは「構造」パレットメニューの「構造をスタイルマップ」から行えます。

(執筆中ここまで。)

---

# 2. スクリプトによる自動化

## インストール方法

OSXの場合は、以下の2つの内いずれかのフォルダに.jsxファイルを移動してインストールする。(Xにはバージョン番号が入る)

<pre>/Applications/Adobe InDesign CSX/Scripts/Scripts Panel/</pre>

または、

<pre>~/Library/Preferences/Adobe InDesign/Version X.X-J/ja_JP/Scripts/Script Panel</pre>

前者はアプリケーションワイド、後者はユーザーローカルという位置付けなのだが、どう考えても前者が使いやすい。

## スクリプトの叩き方

「ウィンドウ」メニュー一番下の「自動化」メニュー内にある「スクリプト」パネルから、インストールしたスクリプトを実行できる。

## よくある問題

> 入手したスクリプトが動かない!

InDesignのAPIはバージョンによって微妙に異なることがあるので、スクリプトが持っているバージョンで動くかどうかは試してみないとよくわからんところがある。
動かない場合は、ExtendScriptToolkitのAPIリファレンスを調べながらがんばって直すか諦めるしかない。InDesignのバージョンごとのAPIの差違は、[こちらの日本語のサイト](http://www15.ocn.ne.jp/~preopen/dom_about.html)から閲覧できる。神!

## こんなのが欲しかった! InDesignスクリプト撰

### [save_PDFandPackage 1.2](http://d.hatena.ne.jp/seuzo/20100904/1283578850)

>複数のドキュメント（またはフォルダ）をドラッグ＆ドロップするだけで
>・パッケージの作成
>・パッケージとPDFの作成
>・PDFの作成
>を自動処理します。

### [Batch Update Links](http://kasyan.ho.com.ua/batch_update_links.html)

複数のInDesignファイルを対象に、リンクを一括更新できる。
ブック機能でファイルを小分けにしている時は非常に助かるスクリプトです。

>Script for InDesign CS3/4, version 1.0.
>Batch updates all modified links in all InDesign documents >located in the selected folder.
>Run the script and select a folder. The script will open each nDesign document, update all outdated links, save and close it.

### [Close all open document without saving](http://kasyan.ho.com.ua/my_scripts.html)

名前の通り、保存ダイアログをスキップして開いているファイルを全閉じできる。

### [Batch rename and relink](http://kasyan.ho.com.ua/batch_rename_and_relink.html)

リンクファイルをまとめてリネーム・再リンクしてくれる。

### [Batch convert/export InDesign documents](http://www.kahrel.plus.com/indesign/batch_convert.html)

ブック機能を使えば、複数のInDesignファイルを1つにまとめてPDFに書き出すことはできる。しかし、複数のInDesignファイルからそれぞれPDFを書き出す、という処理は標準の機能ではできない。そういった処理をしたい時に役立つスクリプト。
![ダイアログ](http://www.kahrel.plus.com/indesign/images/batch_convert.png)

### [PDF貼り魔王](http://tu-kazu.jp/pdf-harimao.php)

![スクリーンショット](http://tu-kazu.jp/images/top1.jpg)

アプリケーション形式なので普通のスクリプトとは使い方が異なる。
いわゆる「ページ全面にPDFを貼りまくる」作業を自動化するためのツール。
アイデア次第で色々な用途に使えるので(PDFしか存在しない大量のレイアウトに、白とノンブルを重ねて番号を振り直す〜とか)、持っていると便利。

### [仕上げ屋](http://www.vector.co.jp/soft/mac/writing/se464180.html)

![スクリーンショット](http://blog-imgs-38.fc2.com/d/e/t/detaramedia/0070b.png)

こちらもアプリケーション型。InDesignとPhotoshopを連携して、配置した画像が100%になるように縮尺を調整したり、Photoshopアクションをバッチ適用したりできる。無料のLite版と、高機能な有料版がある。Mac版もWindows版もある。

こちらのデベロッパーの方は、他にも「[ガイド屋](http://www.vector.co.jp/soft/mac/writing/se475999.html)」「[一発屋](http://www.vector.co.jp/soft/mac/writing/se476187.html)」「[押し屋](http://www.vector.co.jp/soft/mac/writing/se476301.html)」「[トンボ屋](http://www.vector.co.jp/soft/mac/writing/se476499.html)」といった便利なツールを販売・配布している。

作者ブログ: http://detaramedia.blog95.fc2.com/

### ほかにも色々ありそう

* Scripts for InDesign CS5_J(日本語) - http://www.seuzo.jp/st/scripts_InDesignCS5/
* My Scripts - http://kasyan.ho.com.ua/my_scripts.html
* InDesignScripts - http://www.kahrel.plus.com/indesignscripts.html


# 番外編 InDesignスクリプトの作り方

AdobeCSと一緒にインストールされているExtendScriptToolkitを使用して、AppleScript・VisualBasic・JavaScriptのいずれかで書くことができる。プラットフォーム依存のない形式はJavaScriptだけなので、普通に考えたらこれ一択。ExtendScriptToolkit自体は微妙なIDEだが、APIを調べることができるリファレンスがこのツールがここからしか呼び出せないので、これは絶対に使うことになる。

### ExtendScriptToolkitの便利なところ

* 動作中のInDesignのDOMをリアルタイムで覗くことができる
* 公式のリファレンスを開ける

### AppleScriptを使う利点

あえてAppleScriptを使うメリットとしては、OSXの仕組みを利用してドロップレットやフォルダアクションを作れるというところがあります。

### InDesignスクリプティングについての参考情報

日本語の情報は多くはないが、以前に比べると充実してきている。

#### 公式ドキュメント

* [Adobe InDesign CS5 スクリプティングガイド(PDF直リンク)](http://www.adobe.com/content/dam/Adobe/en/devnet/indesign/cs5_docs/indesign_scripting/guide-ja-JP/InDesignCS5_ScriptingGuide_JS.pdf)
* [Adobe InDesign CS6 スクリプティングチュートリアル(PDF直リンク)](http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/indesign/sdk/cs6/scripting/InDesign_ScriptingTutorial_JP.pdf)

#### 一般開発者によるサイト

* [InDesign CC自動化計画](http://www.openspc2.org/book/InDesignCC/)
* [ディザInDesign](http://indesign.cs5.xyz/)