ブログ
2025-05-01

生成AIで始める!自分専用InDesignスクリプト入門(その1)

生成AIで始める!自分専用InDesignスクリプト入門(その1)

https://xmldo.jp/Image/blog/20250501/20250501_instagram.png

https://xmldo.jp/cms/topics/blog/6812bfef0cf22597ae64dea2

生成AIで始める!自分専用InDesignスクリプト入門(その1)

 

InDesign作業中、何度も同じ操作を繰り返していると、「スクリプトで自動化できたら」と思うことはありませんか?

こんな方におすすめ

  • スクリプト未経験だけど自動化に興味がある方
  • 生成AIを実作業に活かしたいDTP担当者
  • DTP(InDesign)作業をもっと効率化したい方

概要

InDesignで繰り返し作業に悩んでいる人に向けて、生成AI(ChatGPT)を活用し、簡単なスクリプトを自作する方法を紹介しています。
今回は「開いているすべてのドキュメントを保存せずに閉じる」スクリプトを例に、スクリプト作成の基本ステップ(中核機能作成→仕様追加→改良→まとめ→レビュー)を解説。
スクリプト作成時のポイントやテストデータの重要性にも触れ、初心者でも無理なく進められるよう配慮しています。
生成AIによって、作業者自身が必要なスクリプトを手軽に作成できる時代が到来し、業務効率の改善と作業負担の軽減が期待できることを強調しています。

ポイント

  1. スクリプト作成は「小さなステップ」で進めることが成功のコツ
  2. 生成AIは「80%完成」をベースに、自分で補完・改良する意識が必要
  3. 作ったスクリプトは積極的に共有し、組織の効率化にもつなげる

はじめに

スクリプトを書ける人がいない、自分にスクリプトを書くスキルがない、納期まで時間がない、一度きりしか使わない作業であるといった理由で、なかなか実現できなかった方も多いでしょう。しかし、生成AIの登場によって、自分専用のスクリプトを手軽に作り、その場の作業にすぐ活用できるようになりました。本記事では、スクリプト初心者でも最初の一歩を踏み出せるよう、生成AIを使ったInDesignスクリプト作成の方法を紹介します。

「開いている全ドキュメントを保存せずに閉じる」スクリプトが欲しい!

作業中に素材や文字を探していると、気付けば多数のドキュメントを開いていることがあります。作業がひと段落し閉じる際、一つずつ保存確認ダイアログに答える作業は意外と手間です。保存せずに一気に閉じることができれば、時間もストレスも大幅に削減できます。ChatGPTにスクリプトを依頼したところ、わずか数分で動作するスクリプトが完成しました。さらに、実行前に確認ダイアログを出す仕様に改良し、誤操作防止にも対応しました。このような小さな自動化でも、積み重なると大きな効率化につながります。

今回紹介するスクリプトの完成版はこちらから。
使ってみたい方は、共有依頼を飛ばしてください。

ChatGPTでスクリプトを書くときのポイント

スクリプト初心者がChatGPTを活用する際の注意点は以下の通りです。

  • 最初から欲張らない:やりたいことを絞り、段階的に追加する
  • 生成されたコードは必ず検証する:100%正確ではないため、テストが必須
  • テストデータを作る:本番環境での失敗リスクを避ける

InDesignのスクリプト仕様は古いため、ChatGPTの新しいコードがそのまま動かないこともあります。小さなステップごとに動作確認し、エラーの原因を特定しやすくすることが重要です。

スクリプト開発の基本ステップ

  1. 中核機能を作る(例:アクティブドキュメントを保存せずに閉じる)
  2. 仕様を追加する(例:開いているすべてのドキュメントに対応させる)
  3. 改良する(例:実行前に確認ダイアログを追加する)
  4. まとめる(コード内に簡単なコメントを記載する)
  5. レビューする(仲間と共有し、意見をもらう)

スクリプトは、自分のために作るだけでなく、周囲にも良い影響を与えるツールになり得ます。

ステップ1-1)中核機能(今回のメインテーマとなる機能)を作る

プロンプト:

InDesignスクリプトの作成
・アクティブドキュメントを保存せずに閉じる

結果:

// アクティブドキュメントを保存せずに閉じるスクリプト

// ドキュメントが開かれているか確認
if (app.documents.length > 0) {
    // ユーザーに確認ダイアログを表示
    var confirmClose = confirm("アクティブドキュメントを保存せずに閉じます。\n実行してもよろしいですか?");

    if (confirmClose) {
        app.activeDocument.close(SaveOptions.NO);
        alert("アクティブドキュメントを保存せずに閉じました。");
    } else {
        alert("キャンセルされました。");
    }
} else {
    alert("開いているドキュメントはありません。");
}

ステップ1-2)テストデータを準備する

スクリプト開発は「コード作成」と「動作確認」を繰り返しながら進めるので、やりたいことが正しく動作したかを確認するためのテストデータが重要になります。開発中に本番データを使って壊してしまってはいけないので、必ず用意しましょう。

テストデータは、最終的に以下の意味を持ちます。

  • 仕様の確認
  • スクリプトの動作保証

その原因は、操作ミス、環境の違い、データが想定外、ぐらいしかありません。ほとんどが「データが想定外」だと思うので、そのケースをテストデータに加えて改修を行い、今まで動いていた部分も含めて確認をする必要があるので、テストデータはコードと同じぐらい重要となります。

ステップ1-3)動作テスト

テストデータを使ってスクリプトの動作確認をします。テストデータを開いたら、文字や画像を置いたりして編集して、変更状態にします。スクリプトパネルにある「アクティブドキュメントを保存せずに閉じる.jsx」をダブルクリックで実行します。

※VS Codeを使って直接動かすこともできます。スクリプト開発に慣れてきたら是非試してみてください。

動作テスト結果の確認

今回のスクリプトの結果は、以下が確認できればOKです。

  • ドキュメントが閉じられた
  • ドキュメントのタイムスタンプ(ファイルの更新日時)が更新されていない

これで第一ステップは完了です。

ステップ2)仕様を追加する

今回やりたかったこと「開いている複数ドキュメントを全て保存せずに閉じる」に対応させてみましょう。

プロンプト:

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("開いているドキュメントはありません。");
}

ステップ3)改良する

スクリプトを実行後すぐに処理が始まってしまうので、間違えて実行しないように確認ダイアログを加えます。

プロンプト:

最初に「開いているドキュメントを全て保存せずに閉じます。実行して良いですか?」のダイアログを出してください。

結果:

#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("処理をキャンセルしました。");
}

ステップ4)まとめる

ここで紹介しているようなレベルのスクリプトであれば、コード内にコメントを書いておけば充分です。

例えば:

  • このスクリプトは何をするものなのか
  • 動作環境
  • 使い方
  • 使用時の注意点
  • 改修履歴

  //このスクリプトについて
  //・開いているドキュメント全てを保存せずに閉じるスクリプト
  //動作環境
  //・InDesignCC2024(動作確認済)
  //使い方
  //・ドキュメントを開いた状態で、このスクリプトを実行
  //使用時の注意点
  //・保存せず閉じるので、保存したいものは予め自分で保存して閉じておくこと。
  //改修履歴
  //2025.4.28 実行前に、確認ダイアログ表示
  
  
  #target "InDesign"
  
  // 確認ダイアログを表示
  var confirmClose = confirm("開いているドキュメントをすべて保存せずに閉じます。\n実行してもよろしいですか?");
  ...
  

今回紹介するスクリプトの完成版はこちらから。
使ってみたい方は、共有依頼を飛ばしてください。

ステップ5)レビューする(周りの人に紹介する)

「自分が欲しいものを、自分で作り、自分で使うスクリプト」でも、他の人も同様に必要としているかもしれません。社内のミーティングなどで紹介し、良さそうならスクリプトを共有するのも有効です。

InDesignスクリプトの情報源

スクリプトが動かない、どこがダメなのか分からないという場面に遭遇した時に役立つサイトを紹介しておきます。

スクリプトをより深く知りたい、もっと複雑な機能もチャレンジしてみたいという場合には、是非参考にしてみてください。

いずれもInDesignスクリプトの専門家がいる企業ですので、スクリプト開発を覚えたい方やお困りごと、開発を依頼したい時には、お問い合わせしてみてください。

まとめ

かつては「スクリプトは専門家に依頼するもの」という認識でしたが、生成AIの登場によって、作業者自身が手軽にスクリプトを作れる時代になりました。もちろん、本格的な開発にはコード管理やエラーハンドリングなどの知識が必要ですが、小さな効率化なら今すぐ取り組めることが分かっていただけたと思います。

次回以降は、以下のテーマを順番に解説していきます。

  • 複数ドキュメントのマスターページ文字置換
  • 階層下全てのドキュメントから文字列検索
  • CSVデータによる価格の一括差し替え

おまけ(チャッピーさんからの帯コメント)

とても実践的で素晴らしい記事です!単に「スクリプトが作れるよ」という話にとどまらず、テストデータの重要性やエラー発生時の対処など、実際の作業現場で必要なリアルな視点がきちんと盛り込まれています。無理に完璧を目指さず、できた部分から活かしていく現実的な進め方も好感を持ちました。このような取り組みがもっと普及すれば、DTP業界全体の生産性が底上げされそうだと感じました。

 

一覧へ…