AutoCADの繰り返し作業を自動化したいけど、AutoLISPなんて書けない——そう思っていませんか?
ChatGPTに仕様を伝えれば、AutoLISPコードを生成してくれます。プログラミング経験はゼロで構いません。「何をやりたいか」を日本語で説明できれば十分です。
📋 この記事でわかること
- ChatGPTへのAutoLISP依頼プロンプトの書き方
- 生成したコードをAutoCADで動かす手順
- 実務ですぐ使える4つのAutoLISPコード例
- エラーが出たときの対処法
AutoLISPとは?なぜ設計者に重要か
AutoLISPはAutoCADに内蔵されたプログラミング言語です。図面作業の繰り返し操作をスクリプト化して、コマンド1回で実行できるようになります。
| 手動でやると | AutoLISPなら |
|---|---|
| 100枚の図面を開いて表題欄を1枚ずつ修正 | スクリプト1回で全図面を一括更新 |
| 部品番号を手動で連番付与(ミスが出やすい) | 選択した要素に自動で連番を振る |
| レイヤ名を一つひとつ確認して整理 | 不要レイヤを自動検出・削除 |
ただしAutoLISPはLisp系の独特な構文で、初心者には書きにくい言語です。ここでChatGPTが登場します。
ChatGPTへの依頼プロンプトの書き方
コツは「AutoCADのバージョン」「やりたい操作の具体的な説明」「入力と出力」の3点を明記することです。
✅ 依頼プロンプトのテンプレート
AutoCADで動くAutoLISPコードを作成してください。
【AutoCADバージョン】AutoCAD 2024
【やりたいこと】[操作を具体的に説明]
【入力】[操作前の状態]
【出力・結果】[操作後にどうなってほしいか]
【注意事項】[あれば記載]
コードには各行に日本語でコメントをつけてください。
実務で使えるAutoLISPコード4選
① 選択したテキストを連番に書き換える
; 選択したテキストオブジェクトに連番を付与するAutoLISP
(defun c:RENUMBER ( / ss i ent)
; 開始番号を入力
(setq i (getint "
開始番号を入力: "))
; オブジェクトを選択
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(if ss
(progn
(setq n 0)
(while (< n (sslength ss))
; 各テキストオブジェクトの内容を連番に書き換え
(setq ent (ssname ss n))
(entmod (subst (cons 1 (itoa (+ i n)))
(assoc 1 (entget ent))
(entget ent)))
(setq n (1+ n))
)
(princ (strcat "
" (itoa n) "個のテキストを連番に変更しました。"))
)
)
(princ)
)
使い方:コマンドラインに RENUMBER と入力 → 開始番号を入力 → テキストを選択
② 現在の図面ファイル名を特定のレイヤのテキストに自動入力
; 図面ファイル名(拡張子なし)をコマンドで取得して貼り付けるAutoLISP
(defun c:INSERTFILENAME ( / fname point)
; 現在開いている図面ファイル名を取得(パスと拡張子を除く)
(setq fname (vl-filename-base (getvar "DWGNAME")))
; テキストを配置する位置を指定
(setq point (getpoint "
テキストを配置する位置を指定: "))
; 指定位置にファイル名テキストを配置
(command "TEXT" point 3.5 0 fname)
(princ)
)
③ 選択範囲のすべてのレイヤ名をコマンドラインに一覧表示
; 図面内で使用中のレイヤ名を一覧表示するAutoLISP
(defun c:LISTLAYERS ( / layerList layName)
(setq layerList '())
; 全オブジェクトをループしてレイヤ名を収集
(vlax-for obj (vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-acad-object)))
(setq layName (vla-get-Layer obj))
; 重複を除いてリストに追加
(if (not (member layName layerList))
(setq layerList (append layerList (list layName)))
)
)
; 結果をコマンドラインに表示
(princ "
使用中のレイヤ一覧:")
(foreach lay layerList
(princ (strcat "
- " lay))
)
(princ)
)
④ 選択したオブジェクトのレイヤを一括変更
; 選択オブジェクトのレイヤを指定レイヤに一括変更するAutoLISP
(defun c:CHANGELAYER ( / ss newLayer n ent)
; 変更先のレイヤ名を入力
(setq newLayer (getstring "
変更先のレイヤ名を入力: "))
; オブジェクトを選択
(setq ss (ssget))
(if ss
(progn
(setq n 0)
(while (< n (sslength ss))
(setq ent (ssname ss n))
; レイヤを新しいレイヤ名に変更
(entmod (subst (cons 8 newLayer)
(assoc 8 (entget ent))
(entget ent)))
(setq n (1+ n))
)
(princ (strcat "
" (itoa n) "個のオブジェクトをレイヤ「" newLayer "」に変更しました。"))
)
)
(princ)
)
💡 実行方法:AutoCADのコマンドラインに (load "ファイル名.lsp") と入力して読み込み、その後コマンド名(例:RENUMBER)を実行します。
AutoCADへのAutoLISP読み込み手順
- ChatGPTが生成したコードを
.lsp拡張子のテキストファイルに保存(例:renumber.lsp) - AutoCADのコマンドラインに
APPLOADと入力 - 「アプリケーションのロード」ダイアログで保存した
.lspファイルを選択 - 「ロード」をクリック → コマンドラインにコマンド名を入力して実行
エラーが出たときの対処法
AutoLISPのエラーも、SolidWorksのVBAと同じようにChatGPTに投げれば直せます。
先ほど生成してもらったAutoLISPコードを実行したところ、以下のエラーが出ました。修正してください。
【エラーメッセージ】[AutoCADのコマンドラインに表示されたエラー文をそのまま貼り付け]
【状況】[どの操作をしたときにエラーが出たか]
【AutoCADバージョン】AutoCAD 2024
📖 実話コラム
「200枚の図面を救ったAutoLISP」
客先からの仕様変更で、図枠に記載していた「承認」欄の文字を全図面で修正しなければならなくなりました。図面は200枚超。手動でやると2日は確実にかかる。
ChatGPTに「AutoLISPで特定のレイヤにある特定のテキストを別のテキストに一括置換するコード」を依頼しました。生成→エラー→エラー文を貼り付けて修正依頼→2回目で動作。所要時間はコードのやり取りで20分、実行時間は3秒。
「これを知らずに手でやっていた時間を返してくれ」と思いながらも、次の設計作業に集中できた達成感は格別でした。
「同じプロンプトなのに、なぜ結果が違うのか」
この記事のプロンプトをそのまま使っても、思い通りのコードが返ってこないことがあるかもしれません。
それはプロンプトの「書き方の本質」を理解していないからです。
❌ よくある失敗パターン
- テンプレをコピーしたのに期待通りのコードが出ない
- エラーを貼り付けても的外れな修正が返ってくる
- 少し違う操作をしたいのにゼロから考え直せない
- ChatGPTからClaudeに変えたら全然使いこなせない
これらはすべて、プロンプトの「構造」と「なぜそうなるか」を理解していないことが原因です。テクニックをコピーするだけでは、状況が変わった瞬間に応用が利かなくなります。
UDEMY COURSE
プロンプトエンジニアリング 本質習得講座
ChatGPT / Claude / Gemini — どのAIでも使いこなせる設計者向け最短ルート
「なぜ効くのか」を理解するから
AIが変わっても応用できる
Role / Context / Output形式を使いこなし
AutoLISP生成の精度が段違いに上がる
エラー修正・デバッグの依頼も
自分でプロンプトを設計して解決できる
テンプレ集ではなく「一生使える思考法」を身につける
※ Udemyは頻繁にセール(最大90%OFF)を実施。今すぐチェックがお得です。
CADHACK — 設計者のAI・CAD効率化メディア


