「同じ作業を何度も繰り返して、日が暮れてしまった……」
「修正の手順が多すぎて、どこまでやったか分からなくなった……」
「単純作業を一発で終わらせたい」
そんな悩みを解決するのが**LISP(リスプ)**です。まずは、LISPを使うと何が変わるのか、そして安心・安全に使うための「土台」の作り方を解説します。
- 管理用フォルダーを作る(基地)←今回はこれと
- ECW_Utility.lsp を作る(守護神)←これ
- acaddoc.lsp に書き込む(全自動化)
❓1. LISPってなに?(実は怖くない魔法の杖)
LISPを一言でいうと、**「AutoCADへの指示書」**です。
- 繰り返し作業を一括で終わらせる: 100箇所ある修正も、コマンド一つで一瞬です。
- 面倒な手順を減らす: 「画層を変えて、線を引いて、元の画層に戻る」といった3工程を、1クリックに凝縮できます。
- 圧倒的な時短: 手作業で1時間かかる仕事が、数秒で終わる快感。これがLISPの魅力です。
「プログラミングは難しそう…」と感じる方もご安心ください。私自身もコードは書けず、先輩方の書いたものを調べ、整理・調整しながら利用しています。
しかし、設定は非常に簡単です。これから説明するようにファイルを配置するだけで、誰でもすぐに使い始められます。少し手間かもしれませんが、この設定をしておくとLISPの利便性が格段に向上します。
🧞2. 自作LISPの守護神「ECW_Utility.lsp」の役割
「ECW_Utility.lsp」は、単体で何かを描くLISPではありません。
他のLISPたちが安心・安全に、そして快適に動くための
**「最強のバックアップ・システム」**です。
- 管理の簡略化: すべてのLISPで共通の処理をここにまとめることで、個別のLISPがシンプルになります。
- 設定の自動復元: LISPがエラーで止まっても、スナップや画層を瞬時に元通りにします。
- 一発UNDO: 複雑な処理も「U」コマンド一回で実行前に戻せます。
📁3. LISPの「管理フォルダー」を作ろう
LISPファイルは、バラバラに置くとAutoCADも自分も見失ってしまいます。まずは「専用の基地(フォルダー)」を作りましょう。
- LISP管理フォルダーを作成: C:\AUTOCADLISP (Cドライブの下) や C:\Users\●●●(PC名)\Documents\LISP (マイドキュメントの中) など、分かりやすい場所に分かりやすい名前でフォルダーを作ります。
- ココではC:\AUTOCADLISPを例にフォルダを作ります

- 同じ場所に置く: 「〇〇.lsp」などの個別のファイルと「ECW_Utility.lsp」は、必ず同じフォルダーに入れてください。
🔧4. 【重要】サポートファイルの検索パスを設定する
ここが一番のポイントです。これさえ設定すれば、後は使用するLISPファイルをこのフォルフダーに入れておくと、「AutoCADがLISPファイルはここにある」と理解見に行ってくれます
- AutoCADで OPTIONS コマンドを入力。
- **「ファイル」**タブをクリック。
- **「サポートファイルの検索パス」**の左にある「+」をクリックして展開。
- 右側の「追加」をクリック→「参照」をクリック

- から先ほど作ったフォルダー(例:C:\AUTOCADLISP)を選択。
- **「開く」**をクリック。AUTOCADKISPフォルダーが開いて、もう一度**「開く」**をクリック

- オプションの「サポートファイルの検索パス」に「C:¥AUTOCADLISP」なっているか確認。
- **「適用」**をクリック。

これで検索パス設定はOK👍
💾5. ECW_Utility.lsp のダウンロード
次のリンクからからダウンロードし先ほど作ったLISP管理フォルダーに保存してください
(又はメモ帳を開き、以下のコードを貼り付けて「ECW_Utility.lsp」という名前で保存)
※WordPressの仕様上、ファイルはZIP形式でダウンロードされます。ダウンロード後、ファイルを右クリックして「すべて展開(解凍)」してから、中に入っている ECW_Utility.lsp ファイルをご使用ください。
;;; Support: https://easycadwork.com
;;; X(follow me): https://x.com/easycadwork
;;; 概要: AutoCAD環境の退避・復元、およびエラーハンドリングを行う共通ライブラリ
;; =============================================================================
;; ECW_Start : 設定の退避とUNDO開始
;; =============================================================================
(defun ECW_Start ()
(vl-load-com)
;; 既存の設定をグローバルリストに保存
(setq *ECW_Settings*
(list
(cons "CMDECHO" (getvar "CMDECHO"))
(cons "OSMODE" (getvar "OSMODE"))
(cons "CLAYER" (getvar "CLAYER"))
(cons "CELTYPE" (getvar "CELTYPE"))
(cons "CECOLOR" (getvar "CECOLOR"))
(cons "ORTHOMODE" (getvar "ORTHOMODE"))
(cons "DIMSTYLE" (getvar "DIMSTYLE"))
(cons "PICKADD" (getvar "PICKADD"))
(cons "PICKFIRST" (getvar "PICKFIRST"))
(cons "SNAPMODE" (getvar "SNAPMODE"))
(cons "UCSNAME" (getvar "UCSNAME"))
)
)
;; LISP実行用の最適設定
(setvar "CMDECHO" 0)
;; 高速なUNDOグループの開始
(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
(princ)
)
;; =============================================================================
;; ECW_End : 設定の復元とUNDO終了
;; =============================================================================
(defun ECW_End (/ restore-var ds ucs)
;; 設定値を1つずつ取り出して復元する内部関数
(defun restore-var (name)
(if (assoc name *ECW_Settings*)
(setvar name (cdr (assoc name *ECW_Settings*)))
)
)
(if *ECW_Settings*
(progn
;; システム変数の復元
(restore-var "OSMODE")
(restore-var "CLAYER")
(restore-var "CELTYPE")
(restore-var "CECOLOR")
(restore-var "ORTHOMODE")
(restore-var "PICKADD")
(restore-var "PICKFIRST")
(restore-var "SNAPMODE")
;; 特殊な復元(寸法スタイル)
(setq ds (cdr (assoc "DIMSTYLE" *ECW_Settings*)))
(if (and ds (tblsearch "DIMSTYLE" ds))
(command "_.dimstyle" "_restore" ds)
)
;; 座標系(UCS)の復元
(setq ucs (cdr (assoc "UCSNAME" *ECW_Settings*)))
(if (and ucs (/= ucs ""))
(command "_.UCS" "_Restore" ucs)
)
(restore-var "CMDECHO")
;; UNDOグループの終了
(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
;; メモリの解放
(setq *ECW_Settings* nil)
)
)
(princ)
)
;; =============================================================================
;; ECW_Error : 独自エラーハンドラ
;; =============================================================================
(defun ECW_Error (msg)
(if (not (member msg '("Function cancelled" "quit / exit abort")))
(princ (strcat "\n** ECW_Error: " msg " **"))
)
(ECW_End) ; エラー時も確実に復元を実行
(setq *error* nil)
(princ)
)Lisp✏️6. なぜこのファイルが必要なの?
例えば、LISPの途中で「 Esc 」キーを押して中止したとします。
普通のLISPだと、プログラムが書き換えた「スナップが全部オフになった状態」で止まってしまい、手動で戻すハメになります。
この「ECW_Utility.lsp」を連携させておけば、エラーが起きた瞬間に *myerror* が発動し、自動で設定を元通りにしてくれます。
「道具を使い終わったら、元の場所に綺麗に戻しておく」——この職人の基本を、プログラムが代わりにやってくれるわけです。
☝️7.本ブログのLISPを使いこなすための「鉄則」
この記事で作成した「ECW_Utility.lsp」を最大限に活かすために、以下の4つの鉄則を守ってください。これさえ守れば、あなたのAutoCADは最強の相棒になります。
① ECW_Utility.lsp は「基地の守護神」
このファイルは、他のLISPが安全に動くための「安全装置」です。単体では動きませんが、これがあるおかげで、万が一LISPがエラーで止まっても、あなたのスナップ設定や画層がぐちゃぐちゃになるのを防いでくれます。
② acaddoc.lsp で「全自動ロード」させる
本ブログでは、acaddoc.lspの中に (load “ECW_Utility.lsp”) と記述する運用を推奨しています。
一度設定してしまえば、図面を開くたびに守護神が自動でバックグラウンドに常駐します。あなたが個別にロード作業をする必要はもうありません。
個別でロードしても動きますが、acaddoc.lspを設定する方が後々楽になります
③ すべてのLISPを「同じフォルダ」に集める
「ECW_Utility.lsp」と、今後このブログで手に入れる便利なLISPたちは、必ず同じ専用フォルダ(例:C:\Lisp)に入れてください。基地を一箇所にまとめることで、AutoCADが迷わず命令を探しに行けるようになります。(管理もしやすいです)
④ 最後は必ず「人の目」でチェックを!
紹介するLISPは私が長年実務で使い込んできた信頼できるものですが、図面の状態やPC環境によって予期せぬ挙動をすることもゼロではありません。
計算された数値や作図結果は、必ず最後にご自身の目で確認してください。道具はあくまで「手助け」、最終的な責任を持つのは設計者であるあなた自身です。
「まずはこの土台(ECW_Utility.lsp)を作り、acaddoc.lspで自動化する」。
この手順を踏むだけで、あなたは「設定を直す時間」を「図面を考える時間」に変えることができます。これこそが、定時退社への最短ルート😁です。



コメント