Home About Contact
InDesign , ExtendScript , Claude

indd スキルを使った InDesign から Markdown への書き出し

前回 紹介した indd, idml スキルを使えばいわゆる indd2md コマンドに相当するものが実現できる。 もちろん、制約はあると思う。 カタログのような InDesign ドキュメントから期待する Markdown 形式を得るのは難しいかもしれない。 読み物系のドキュメントようにストーリーが存在して・・・テキストの出現順が自明なドキュメントの方が対処しやすいかも。

ここでは 前回 作成した明太フランスの InDesign ドキュメントを例にして markdown 変換がどうなるか実際に試してみる。

とりあえずやってみる

前回のポスト の後の方に m-france.zip (idml を含むパッケージ) があるので これを題材にする。

m-france.zip を展開すると次のようになる:

.
├── Links
│   └── m-france.jpg
└── m-france.idml

ここに Claude への指示として ./TODO.md を用意:

indd, idml スキルを使って
./m-france.idml を markdown テキストに変換してください
結果は ./m-france.md に保存

TODO.md を加えた現在のプロジェクトディレクトリはこれ:

.
├── Links
│   └── m-france.jpg
├── TODO.md
└── m-france.idml

それでは InDesign 2026 を起動、その後ターミナルで claude を実行、indd2md に相当する処理を依頼します。(モデルは Opus 4.8 High を使用)

$ claude
> read ./TODO.md

step1

step2

結果の ./m-france.md:

# 明太フランス

カリッと香ばしいバゲットに、旨味あふれる明太子。
シンプルだからこそ、素材と製法にトコトンこだわりました。
ひとくち食べれば広がる、贅沢な味わいをお届けします。
当店自慢のソースには 本場・博多の **高級明太子** を贅沢に使用。

コンソールに Claude からのこの説明が出ていることからわかるように タイトル と ボールド の存在に気づいています。

IDML を unpack して 2 つのストーリーを抽出:
- Story_u108(title スタイル)→ 見出し「明太フランス」
- Story_u127(body スタイル)→ 本文。FontStyle="ボールド" の run「高級明太子」を **太字** として反映

ただ変換したのはテキストだけで画像は含まれていません。

「markdown テキストに変換」と頼んだので変換対象がテキストだけになったのかも。

それを頼んでみます:

画像も含めてください。![image](...) の形で挿入

step3

できました:

# 明太フランス

![image](Links/m-france.jpg)

カリッと香ばしいバゲットに、旨味あふれる明太子。
シンプルだからこそ、素材と製法にトコトンこだわりました。
ひとくち食べれば広がる、贅沢な味わいをお届けします。
当店自慢のソースには 本場・博多の **高級明太子** を贅沢に使用。

より実践的に

最初「markdown テキストに変換」とざっくり頼んだことで、テキスト(画像なし)で書き出されました。 あとから画像も含めるように依頼して画像も対応できたのですが、 現実の問題としては、InDesign で制作するような商用ドキュメントは複雑なレイアウトや表現を持つため、 markdown でサポートされているマークアップバリエーション程度では到底その表現力が足りない。

そこで独自のマークアップテキストを使って表現力を増した形で書き出してもらいたいのですが、 次の問題はそれをどう指示するか?です。

たとえば次のような出力例を考えてみます:

{paraStyle: 段落スタイル名, fontName: フォント名, fontSize: フォントサイズ, fontWeight: フォントウェイト} 
# 明太フランス

{size: ヨコmm x タテmm}
![image](Links/m-france.jpg)

{paraStyle: 段落スタイル名, fontName: フォント名, fontSize: フォントサイズ, fontWeight: フォントウェイト} 
カリッと香ばしいバゲットに、旨味あふれる明太子。
シンプルだからこそ、素材と製法にトコトンこだわりました。
ひとくち食べれば広がる、贅沢な味わいをお届けします。
当店自慢のソースには 本場・博多の **高級明太子** を贅沢に使用。

各要素の前にアノテーション情報を追記してもうら形で書き出してもらうことにする。 当然 段落スタイル名 などは実際の値が入ってほしいわけだが、意図は伝わるのであろうか・・・。

次の指示書を書く (./TODO2.md):

次のような形式で書き出してください:
```
{paraStyle: 段落スタイル名, fontName: フォント名, fontSize: フォントサイズ, fontWeight: フォントウェイト} 
# 明太フランス

{size: ヨコmm x タテmm}
![image](Links/m-france.jpg)

{paraStyle: 段落スタイル名, fontName: フォント名, fontSize: フォントサイズ, fontWeight: フォントウェイト} 
カリッと香ばしいバゲットに、旨味あふれる明太子。
シンプルだからこそ、素材と製法にトコトンこだわりました。
ひとくち食べれば広がる、贅沢な味わいをお届けします。
当店自慢のソースには 本場・博多の **高級明太子** を贅沢に使用。
```

結果は ./m-france.txt に保存

step4

難なくできました (./m-france.txt):

{paraStyle: title, fontName: 游ゴシック体, fontSize: 15pt, fontWeight: Bold}
# 明太フランス

{size: 24mm x 23mm}
![image](Links/m-france.jpg)

{paraStyle: body, fontName: 游ゴシック体, fontSize: 5.25pt, fontWeight: ミディアム}
カリッと香ばしいバゲットに、旨味あふれる明太子。
シンプルだからこそ、素材と製法にトコトンこだわりました。
ひとくち食べれば広がる、贅沢な味わいをお届けします。
当店自慢のソースには 本場・博多の **高級明太子** を贅沢に使用。

まとめ

実はこれより複雑かつ長い(4ページ程度)InDesign ドキュメントで同様の処理を依頼しているのですが普通に機能しています。 ただ、それがうまくいく理由は Claude への指示が簡単に出せる状況にあるからです。 つまり、もとから在版(InDesign) とそこから手動で作成したマークアップテキストのセットが存在していて、 そのセットにプラスして今回処理したい InDesign ドキュメントを見せた上で、 以前と同じ形式でマークアップテキストを書き出して、と頼めばよいだけだからです。

なお推測ではあるが、 複雑かつ長い InDesign ドキュメントのマークアップテキストへの変換がうまく機能した理由は InDesign ドキュメント自体も在版と最新版のドキュメント構造が同じだったからであろう。 おそらくは InDesign ドキュメント自体も既存の版をベースに内容を差し替える形で制作されていたことが予想される。 AI はパターンマッチが非常に得意なので、そのようにつくられたデータであれば正確に処理できるのも当然なのかもしれない。 とはいえ、セクション数などは異なっていたにもかかわらずうまく処理されていたので、単純なパターンマッチだけで Claude が対応しているわけではないのは確か。

このあたり・・・ 望む最終形式のマークアップテキスト表現を Claude とどう共有するか? それをいかに上手に設計できるか が鍵になりそうです。