InDesign作業中、何度も同じ操作を繰り返していると、「スクリプトで自動化できたら」と思うことはありませんか?
InDesignで繰り返し作業に悩んでいる人に向けて、生成AI(ChatGPT)を活用し、簡単なスクリプトを自作する方法を紹介しています。
今回は「開いているすべてのドキュメントを保存せずに閉じる」スクリプトを例に、スクリプト作成の基本ステップ(中核機能作成→仕様追加→改良→まとめ→レビュー)を解説。
スクリプト作成時のポイントやテストデータの重要性にも触れ、初心者でも無理なく進められるよう配慮しています。
生成AIによって、作業者自身が必要なスクリプトを手軽に作成できる時代が到来し、業務効率の改善と作業負担の軽減が期待できることを強調しています。
スクリプトを書ける人がいない、自分にスクリプトを書くスキルがない、納期まで時間がない、一度きりしか使わない作業であるといった理由で、なかなか実現できなかった方も多いでしょう。しかし、生成AIの登場によって、自分専用のスクリプトを手軽に作り、その場の作業にすぐ活用できるようになりました。本記事では、スクリプト初心者でも最初の一歩を踏み出せるよう、生成AIを使ったInDesignスクリプト作成の方法を紹介します。
作業中に素材や文字を探していると、気付けば多数のドキュメントを開いていることがあります。作業がひと段落し閉じる際、一つずつ保存確認ダイアログに答える作業は意外と手間です。保存せずに一気に閉じることができれば、時間もストレスも大幅に削減できます。ChatGPTにスクリプトを依頼したところ、わずか数分で動作するスクリプトが完成しました。さらに、実行前に確認ダイアログを出す仕様に改良し、誤操作防止にも対応しました。このような小さな自動化でも、積み重なると大きな効率化につながります。
今回紹介するスクリプトの完成版はこちらから。
使ってみたい方は、共有依頼を飛ばしてください。
スクリプト初心者がChatGPTを活用する際の注意点は以下の通りです。
InDesignのスクリプト仕様は古いため、ChatGPTの新しいコードがそのまま動かないこともあります。小さなステップごとに動作確認し、エラーの原因を特定しやすくすることが重要です。
スクリプトは、自分のために作るだけでなく、周囲にも良い影響を与えるツールになり得ます。
InDesignスクリプトの作成
・アクティブドキュメントを保存せずに閉じる
// アクティブドキュメントを保存せずに閉じるスクリプト
// ドキュメントが開かれているか確認
if (app.documents.length > 0) {
// ユーザーに確認ダイアログを表示
var confirmClose = confirm("アクティブドキュメントを保存せずに閉じます。\n実行してもよろしいですか?");
if (confirmClose) {
app.activeDocument.close(SaveOptions.NO);
alert("アクティブドキュメントを保存せずに閉じました。");
} else {
alert("キャンセルされました。");
}
} else {
alert("開いているドキュメントはありません。");
}
スクリプト開発は「コード作成」と「動作確認」を繰り返しながら進めるので、やりたいことが正しく動作したかを確認するためのテストデータが重要になります。開発中に本番データを使って壊してしまってはいけないので、必ず用意しましょう。
テストデータは、最終的に以下の意味を持ちます。
その原因は、操作ミス、環境の違い、データが想定外、ぐらいしかありません。ほとんどが「データが想定外」だと思うので、そのケースをテストデータに加えて改修を行い、今まで動いていた部分も含めて確認をする必要があるので、テストデータはコードと同じぐらい重要となります。
テストデータを使ってスクリプトの動作確認をします。テストデータを開いたら、文字や画像を置いたりして編集して、変更状態にします。スクリプトパネルにある「アクティブドキュメントを保存せずに閉じる.jsx」をダブルクリックで実行します。
※VS Codeを使って直接動かすこともできます。スクリプト開発に慣れてきたら是非試してみてください。
今回のスクリプトの結果は、以下が確認できればOKです。
これで第一ステップは完了です。
今回やりたかったこと「開いている複数ドキュメントを全て保存せずに閉じる」に対応させてみましょう。
InDesignスクリプトの作成
・現在開いているドキュメントを全て、保存せず閉じる
#target "InDesign"
// 開いているドキュメントの数を取得
var docCount = app.documents.length;
// ドキュメントが開いていれば処理
if (docCount > 0) {
// 最後のドキュメントから順に閉じる
for (var i = docCount - 1; i >= 0; i--) {
try {
app.documents[i].close(SaveOptions.NO);
} catch (e) {
alert("ドキュメントを閉じる際にエラーが発生しました: " + e.message);
}
}
alert("すべてのドキュメントを保存せずに閉じました。");
} else {
alert("開いているドキュメントはありません。");
}
スクリプトを実行後すぐに処理が始まってしまうので、間違えて実行しないように確認ダイアログを加えます。
最初に「開いているドキュメントを全て保存せずに閉じます。実行して良いですか?」のダイアログを出してください。
#target "InDesign"
// 確認ダイアログを表示
var confirmClose = confirm("開いているドキュメントをすべて保存せずに閉じます。\n実行してもよろしいですか?");
if (confirmClose) {
var docCount = app.documents.length;
if (docCount > 0) {
// ドキュメントを後ろから順に閉じる
for (var i = docCount - 1; i >= 0; i--) {
try {
app.documents[i].close(SaveOptions.NO);
} catch (e) {
alert("ドキュメントを閉じる際にエラーが発生しました: " + e.message);
}
}
alert("すべてのドキュメントを保存せずに閉じました。");
} else {
alert("開いているドキュメントはありません。");
}
} else {
alert("処理をキャンセルしました。");
}
ここで紹介しているようなレベルのスクリプトであれば、コード内にコメントを書いておけば充分です。
例えば:
//このスクリプトについて
//・開いているドキュメント全てを保存せずに閉じるスクリプト
//動作環境
//・InDesignCC2024(動作確認済)
//使い方
//・ドキュメントを開いた状態で、このスクリプトを実行
//使用時の注意点
//・保存せず閉じるので、保存したいものは予め自分で保存して閉じておくこと。
//改修履歴
//2025.4.28 実行前に、確認ダイアログ表示
#target "InDesign"
// 確認ダイアログを表示
var confirmClose = confirm("開いているドキュメントをすべて保存せずに閉じます。\n実行してもよろしいですか?");
...
今回紹介するスクリプトの完成版はこちらから。
使ってみたい方は、共有依頼を飛ばしてください。
「自分が欲しいものを、自分で作り、自分で使うスクリプト」でも、他の人も同様に必要としているかもしれません。社内のミーティングなどで紹介し、良さそうならスクリプトを共有するのも有効です。
スクリプトが動かない、どこがダメなのか分からないという場面に遭遇した時に役立つサイトを紹介しておきます。
スクリプトをより深く知りたい、もっと複雑な機能もチャレンジしてみたいという場合には、是非参考にしてみてください。
いずれもInDesignスクリプトの専門家がいる企業ですので、スクリプト開発を覚えたい方やお困りごと、開発を依頼したい時には、お問い合わせしてみてください。
かつては「スクリプトは専門家に依頼するもの」という認識でしたが、生成AIの登場によって、作業者自身が手軽にスクリプトを作れる時代になりました。もちろん、本格的な開発にはコード管理やエラーハンドリングなどの知識が必要ですが、小さな効率化なら今すぐ取り組めることが分かっていただけたと思います。
次回以降は、以下のテーマを順番に解説していきます。
とても実践的で素晴らしい記事です!単に「スクリプトが作れるよ」という話にとどまらず、テストデータの重要性やエラー発生時の対処など、実際の作業現場で必要なリアルな視点がきちんと盛り込まれています。無理に完璧を目指さず、できた部分から活かしていく現実的な進め方も好感を持ちました。このような取り組みがもっと普及すれば、DTP業界全体の生産性が底上げされそうだと感じました。