効率アップ!ChatGPTでIllustratorのスクリプト作成に挑戦!〜レイヤーパレットで選択中のレイヤーをダイアログに入力した数字の数だけ複製するスクリプト〜

ChatGPTにIllustratorで使えるスクリプトを書いてもらうことができました。

// ダイアログを表示して入力値を取得する
var userInput = prompt("複製するレイヤーの数を半角英数で入力してください:", "");
var layerCount = parseInt(userInput);

// 選択したオブジェクトをコピーする
var doc = app.activeDocument;
var selection = doc.selection;

// 選択したオブジェクトが存在するか確認する
if (selection.length > 0) {
  var copyItem = selection[0].duplicate();
  var currentLayerName = getSelectedLayerName(); 

  // レイヤーを複製し、オブジェクトをペーストする
  for (var i = 0; i < layerCount; i++) {
    // 新しいレイヤーを作成する
    var newLayer = doc.layers.add();
    newLayer.name = currentLayerName + "-" + (i + 1);

    // オブジェクトを新しいレイヤーにペーストする
    doc.selection = null;
    app.activeDocument.activeLayer = newLayer;
    copyItem.duplicate(newLayer, ElementPlacement.PLACEATBEGINNING);
  }

  // 初期の選択状態に戻す
  doc.selection = null;
  selection[0].selected = true;
} else {
  alert("オブジェクトが選択されていません。");
}


// レイヤー名を取得する関数
function getSelectedLayerName() {
  var doc = app.activeDocument; // アクティブなドキュメントを取得
  var selection = doc.selection; // 選択されたオブジェクトを取得
  
  if (selection.length > 0) {
    var selectedLayer = selection[0].layer; // 最初の選択オブジェクトの所属レイヤーを取得
    return selectedLayer.name; // レイヤー名を返す
  } else {
    return "選択されたオブジェクトがありません。";
  }
}

実感としては、いきなり手数の多い処理を書いてもらおうとするとうまく動作しないことが多かったので、機能ごとにスクリプトを書いてもらって、それを自分で組み合わせる。というやり方が良いと思いました。

お時間有りましたら↓の続きを読むをクリックして全文を読んでいただけると嬉しいです。

Illustratorはスクリプトを使うともっと便利になりますが、私は自分でゼロから書くことができません。。。

ネットの検索を頼ってみるものの、いかんせんニッチな操作なため、スクリプトのコピペではうまくいきません。。。

そんな私にも強い味方が現れました。

さっそく頼りまくります。

やってほしいことは、レイヤーパレットのレイヤー名を新規レイヤー作成アイコンまでドラッグしてそのまま複製する。または、optionキー(WindowsはAlt)を押しながらレイヤーパレットのレイヤーをドラッグして複製する。というものです。入稿されたデータの元を残しながら作業するのに頻繁に使う操作で、シルクスクリーンの多色の分版では特に多用します。これが一発でたくさん複製できたらもっと便利になるに違いない!!

まずは↓のようなプロンプトでお願いしてみました。

しかし、これでは空のレイヤーがレイヤーパレットに複製されるだけのスクリプトが出来上がりました。

おそらく、想像ですが、Illustratorの「レイヤー」とは、レイヤー内のレイヤーもレイヤーなので、私の意図が伝わらなかったのでしょう。ああ、己の日本語力の低さよ。。。

レイヤーパレットのレイヤーを丸々複製することが言葉にできず、何度もエラーがでたので、丸々複製は諦めて、アプローチを変えて、少し単純化してみました。

これだと、ロックや、非表示等で選択できていないオブジェクトは複製されない事になってしまいますが、そこは妥協します。。。

すると、回答は、

と出ました。これを拡張子.jsxのファイルにコピペして保存し、Illustratorで実行すると、

というエラーが出ましたが、複製はされました。

しかし、複数オブジェクトがある場合は、一番手前のオブジェクトのみが複製されるようです。

グループ化するとすべて複製されました。

いちいちグループ化するのもめんどくさいですが、グループ化されていないものにも適用できるようにChatGPTにお願いしてみたものの、うまく動作しないことが続いたので、この問題は後々の課題として、モチベーション維持のため、違う方向にカスタマイズすることにしました。

このままのスクリプトだと、複製されたレイヤー名が「Layer @」で固定されています。何のコピーかを判別しやすくするために、コピー元のレイヤー名使ってほしい。

ここまでのChatGPTとのやりとりで、焦らず、一歩ずつ進めると良い回答を得られることが多いことがわかってきたので、まずは↓のように機能はシンプルで、環境を細かく設定してみました。

しかし、これで回答してきたスクリプト実行してもダイヤログにレイヤー名が表示されませんでした。

この回答でもダメでした。というのも、わたしの「レイヤー名が表示されません」という指示が分かりにくかったようです。

正しくは、「レイヤー名が表示されない」のではなく

「レイヤー名が空欄で表示されている」でした。

すると↓のような回答が。

使用しているIllustratorのバージョンはこの記事を書いている時点での最新版 CC2023(27.5)なので、最初のプロンプトにもそう指定していたんですが、、、

IllustratorCC2022(26.3.0)版を提案してくれました。

このスクリプトをCC2023(27.5)で使用してみると、動作しました。

あとは、このレイヤー名取得スクリプトを、自分でレイヤー複製スクリプトに追加して、冒頭に表示したスクリプトになって完成!!

当たり前なんですけど、ChatGPTは指示を文字で表現できなければ理解してくれません。

自分のやってほしいことを具体的で段階的で簡潔な言葉にすることが重要で、自分の能力の低さに落ち込みました。今後の課題として勉強していきたいと思います。(自力でスクリプトを書く勉強もね。。。。)

最後までお読みいただきありがとうございました。

私は本業はシルクスクリーンプリント工場で働いています!!

本業の会社のサイトもご覧いただけると嬉しいです!!!

シルクスクリーン印刷オリジナルTシャツプリントの松栄シルクは、熟練の技術と最新の設備、一貫した生産管理で幅広いニーズにお応えできるワンストップ型プリント工場です。

コメントを残す