【入門】AutoLISPで土木設計を自動化する方法|コード例3選

【入門】AutoLISPで土木設計を自動化する方法|コード例3選

こんにちは。土木設計歴30年、AI土木研究室です。

AutoCADで図面を描いていて、「この作業、毎回まったく同じことを繰り返しているな」と感じたことはありませんか。レイヤーの設定、文字の一括修正、同じ形状の構造物の配置、寸法スタイルの統一。1回あたりは数分でも、1年分を積み上げると数十時間になります。

この「繰り返し」を機械にやらせる仕組みがAutoLISP(オートリスプ)です。AutoCADに標準で搭載されているプログラミング言語で、追加費用は一切かかりません。にもかかわらず、建設コンサルタントの現場で本格的に使っている方は驚くほど少ないのが実情です。

この記事では、プログラミング未経験の土木設計者がAutoLISPを使い始めるための最短ルートを、実際に業務で使えるコード例とあわせて解説します。

目次

AutoLISPとは何か|土木設計者が知っておくべき基礎知識

AutoLISPは、AutoCADの操作を自動化するために用意されたプログラミング言語です。1986年から搭載されており、40年近い歴史があります。古い技術に見えるかもしれませんが、逆に言えば「バージョンが変わっても動き続ける」という安定性があり、業務ツールとしては大きな強みです。

土木設計者にとってのAutoLISPの位置づけを、他の自動化手段と比べて整理してみます。

  • アクションレコーダ:操作を録画して再生するだけ。条件分岐ができず、図面ごとの違いに対応できない
  • スクリプト(.scr):コマンドを並べるだけ。単純な一括処理には向くが、判断が入る処理は不可
  • AutoLISP(.lsp):条件分岐・繰り返し・図形情報の読み取りができる。土木設計の実務ではここが本命
  • .NET / VBA:さらに高度だが、開発環境の構築が必要でハードルが高い

つまりAutoLISPは、「メモ帳だけで書けるのに、実用的な判断処理まで書ける」という絶妙な位置にあります。土木設計の自動化を始めるなら、ここが最初の一歩として最適です。

AutoLISPを土木設計に導入する準備|最初の5分でやること

特別なソフトは不要です。Windowsのメモ帳とAutoCADがあれば、今日から始められます。

ステップ1:ファイルを作る

メモ帳を開き、後述するコードを貼り付けて「mytools.lsp」という名前で保存します。拡張子は必ず「.lsp」にしてください。文字コードは「ANSI」または「UTF-8」で保存します。日本語の文字を含む場合は、AutoCADのバージョンによって挙動が変わるため、まずはANSIで試すのが無難です。

ステップ2:AutoCADに読み込む

AutoCADのコマンドラインで「APPLOAD」と入力し、作成したlspファイルを選択して「ロード」をクリックします。エラーが出なければ成功です。

ステップ3:起動時に自動で読み込ませる

毎回APPLOADするのは面倒なので、APPLOADダイアログ内の「スタートアップ スイート」に登録しておきます。これでAutoCADを起動するたびに自動で読み込まれ、自作コマンドがいつでも使える状態になります。

ここまで5分もかかりません。準備の手軽さこそがAutoLISPの最大の魅力です。

実務で使えるAutoLISPコード例3選|土木設計の作業を自動化する

理屈より実物です。コピーしてすぐ使える、実務向けのコードを3つ紹介します。

例1:選択した文字の高さを一括変更する

照査で「注記の文字が小さい」と指摘され、数十個の文字を1つずつ直した経験は誰にでもあるはずです。これを一発で片付けます。

(defun c:TH ( / ss n ent h)
  (setq h (getreal "\n新しい文字高さ <3.0>: "))
  (if (null h) (setq h 3.0))
  (princ "\n文字を選択してください: ")
  (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  (if ss
    (progn
      (setq n 0)
      (repeat (sslength ss)
        (setq ent (entget (ssname ss n)))
        (setq ent (subst (cons 40 h) (assoc 40 ent) ent))
        (entmod ent)
        (setq n (1+ n)))
      (princ (strcat "\n" (itoa n) "個の文字を変更しました。"))))
  (princ))

コマンドラインで「TH」と打つだけで動きます。ssgetにフィルタ条件を渡しているので、文字以外を誤って選んでも無視される点がポイントです。

例2:作図前にレイヤーを自動作成して切り替える

CAD製図基準に沿ったレイヤー名は長く、手打ちすると必ず打ち間違いが出ます。よく使うレイヤーをコマンド化しておけば、名前の揺れがゼロになります。

(defun MakeLay (name color ltype)
  (if (not (tblsearch "LAYER" name))
    (command "_.-LAYER" "_M" name "_C" color name "_L" ltype name ""))
  (setvar "CLAYER" name)
  (princ (strcat "\nレイヤー " name " に切り替えました。"))
  (princ))

(defun c:LC () (MakeLay "D-STR-STR" "3" "CONTINUOUS"))
(defun c:LD () (MakeLay "D-DIM" "1" "CONTINUOUS"))
(defun c:LH () (MakeLay "D-BGD-HICH" "8" "DASHED"))

「LC」で構造物線、「LD」で寸法、「LH」で補助線に切り替わります。レイヤー管理の考え方そのものについては、土木CAD図面のレイヤー管理ベストプラクティス7選で詳しく整理していますので、あわせてご覧ください。

例3:選択した線分の長さを合計する

延長の集計は数量計算の基本ですが、1本ずつプロパティを見て足し算するのは時間の無駄です。

(defun c:SUML ( / ss n ent total)
  (princ "\n線分・ポリラインを選択してください: ")
  (setq ss (ssget '((0 . "LINE,LWPOLYLINE,ARC"))))
  (setq total 0.0 n 0)
  (if ss
    (progn
      (repeat (sslength ss)
        (setq ent (vlax-ename->vla-object (ssname ss n)))
        (setq total (+ total (vlax-get ent 'Length)))
        (setq n (1+ n)))
      (princ (strcat "\n選択数: " (itoa n)
                     " / 合計延長: " (rtos total 2 3) " m"))))
  (princ))
(vl-load-com)

末尾の(vl-load-com)は、VLA関数を使うためのおまじないです。忘れるとエラーになるので必ず書いてください。

AutoLISP学習でつまずきやすい3つのポイントと対策

30年の設計経験のなかで、周囲がAutoLISPに挫折する場面を何度も見てきました。原因はほぼ次の3つに集約されます。

カッコの対応が合わない

AutoLISPのエラーの8割はカッコの数が原因です。メモ帳ではなく、カッコを色分けしてくれる無料エディタ(Visual Studio Codeなど)を使うだけで劇的に減ります。「malformed list」と出たらカッコ、と覚えておけば十分です。

変数がグローバルのまま残る

(defun c:TH ( / ss n ent h) のスラッシュ以降が「ローカル変数」の宣言です。ここに書き忘れると、変数が図面全体に残り、他のプログラムと干渉して原因不明の不具合を起こします。使う変数はすべてスラッシュの後ろに並べる、と機械的に徹底してください。

最初から大きなものを作ろうとする

これが一番多い失敗です。いきなり「数量計算書を全自動で作るツール」を目指すと、完成しないまま終わります。まずは「3秒短縮できるコマンド」を1つ作る。それが動いた成功体験が、次のツールを生みます。

AIを使ってAutoLISPのコードを書く|2026年の現実的な進め方

ここが従来の入門記事と決定的に違う点です。今は、AutoLISPの文法をすべて暗記する必要がありません。ChatGPTやClaudeといった生成AIが、かなり実用的なレベルのコードを書いてくれます。

ただし、丸投げではまず動きません。次の3点を必ずプロンプトに含めてください。

  • AutoCADのバージョンと言語:「AutoCAD 2024・日本語版で動くAutoLISPで」と明示する
  • 入力と出力を具体的に:「ユーザーが線分を複数選択したら、合計長さをコマンドラインに小数第3位まで表示する」
  • エラー処理の要求:「選択がキャンセルされた場合も落ちないようにしてください」

そして、生成されたコードは必ず「捨ててよいテスト図面」で試すこと。いきなり本番の成果品図面で実行してはいけません。AutoLISPには元に戻せない処理もあるためです。AIへの指示の出し方については、土木設計者のためのAIプロンプト活用法で体系的にまとめています。

なお、AutoLISPで自動化できるのはあくまで「図面上の操作」です。展開図から高さを読み取って数量計算書を組み立てるような、図面と帳票をまたぐ処理までは手が届きません。そこまで踏み込みたい方は、擁壁の数量算出を自動化する専用ツールCADDON_proもあわせて検討してみてください。自作の範囲と既製ツールの範囲を見極めることも、DXを続けるうえで大切な判断です。

まとめ|AutoLISPは「小さく作って育てる」のが正解

AutoLISPは、追加投資ゼロで始められる、土木設計の自動化における最も現実的な第一歩です。要点を整理します。

  • メモ帳とAutoCADだけで始められ、準備は5分で終わる
  • APPLOADの「スタートアップ スイート」に登録すれば毎回自動で読み込まれる
  • 文字高さ一括変更・レイヤー切替・延長集計あたりが最初の題材として最適
  • エラーの大半はカッコの数とローカル変数の宣言漏れ
  • 生成AIにコードを書かせる場合は、バージョン・入出力・エラー処理を必ず指定する
  • いきなり大作を狙わず、3秒短縮のコマンドから積み上げる

1日3分の短縮でも、年間200日で10時間になります。しかも、手作業のたびに発生していた打ち間違いのリスクがゼロになる効果は、時間以上に大きいものです。まずは今日、いちばん面倒に感じている繰り返し作業を1つだけ書き出してみてください。それがあなたの最初のAutoLISPコマンドになります。


著者:AI土木研究室 / 土木設計歴30年。建設コンサルタントとしてインフラ整備に携わりながら、AI・自動化ツールの研究開発を行う。AI土木研究室(doboku-ai.jp)運営。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次