【AutoCAD VBA】全社配布の悪夢を終わらせる:VBAプロジェクトの「自己更新」アーキテクチャ
AutoCADの業務自動化において、最も頭を悩ませる問題は「配布」ではない。「配布した後のバージョン管理」だ。
設計者100人にマクロを配布した後、バグが見つかったり仕様変更が生じたとき、100台のPCを回って`.dvb`ファイルを差し替えるのか? そんな非効率な運用は、エンジニアとして許容できる限界を超えているはずだ。
今日解説するのは、AutoCADが起動するたびにサーバー上の最新ロジックを読み込み、自らのコードを書き換えて最新版へと昇華する「自己更新型アーキテクチャ」だ。
—
1. なぜ「外部参照」では不十分なのか
多くの初学者は「ネットワーク上の共有フォルダにある`.dvb`を読み込めば良い」と考える。だが、それは危険な賭けだ。ネットワークの切断、読み取り専用ロック、さらにはAutoCADのセキュリティ設定(VBAマクロの実行制限)に阻まれる。
我々が目指すべきは、「ローカルに配置された堅牢なエンジンが、起動時にサーバーの司令塔と同期し、必要に応じて自身のモジュールを再構築する」というライフサイクル管理だ。
2. 核心:`VBProject`オブジェクトの掌握
VBAには、自身のソースコードを操作するための強力かつ危険なAPI、`VBIDE(Visual Basic Extensibility)`が存在する。これを使うことで、プログラムは自身の「身体」を書き換えることができる。
注意点: これを動かすには、AutoCADのセキュリティ設定で「VBAプロジェクトへのアクセスを信頼する」を有効にする必要がある。これは全社配布のグループポリシー等で制御すべきインフラ領域の話だ。
3. 実装:自己更新マクロの心臓部
以下は、指定されたサーバー上の`.bas`ファイルを読み込み、プロジェクト内の古いモジュールを差し替えるコードだ。
‘ 必要な参照設定: Microsoft Visual Basic For Applications Extensibility 5.3
Public Sub UpdateSelfMacro()
Dim vbp As VBIDE.VBProject
Dim vbc As VBIDE.VBComponent
Const SERVER_PATH As String = “\\Server\Scripts\LatestTool.bas”
Const MODULE_NAME As String = “CoreLogic”
Set vbp = ThisDrawing.VBProject
‘ 1. 既存のモジュールを削除(最新版に入れ替えるため)
On Error Resume Next
Set vbc = vbp.VBComponents(MODULE_NAME)
If Not vbc Is Nothing Then
vbp.VBComponents.Remove vbc
End If
On Error GoTo 0
‘ 2. サーバーから最新のファイルをインポート
‘ ここでエラーが出たらサーバーとの接続断と判断する
On Error GoTo ErrHandler
vbp.VBComponents.Import SERVER_PATH
MsgBox “ツールが最新版に更新されました。再起動してください。”, vbInformation
Exit Sub
ErrHandler:
MsgBox “サーバーから最新版を取得できませんでした。オフラインモードで実行します。”, vbExclamation
End Sub
4. 堅牢な設計のためのアーキテクチャ・プラクティス
この仕組みをプロダクション環境に投入する場合、以下の3点を必ず設計に盛り込め。
- 「司令塔」と「実働部隊」の分離:
`ThisDrawing`内に全てのロジックを書くな。自己更新を行う「更新用モジュール」と、実際の業務を行う「業務モジュール」を完全に分離せよ。更新中に業務モジュールを削除・再インポートしても、メインのフローが壊れないようにするためだ。
- ハッシュ値によるバージョン判定:
毎回全てのコードをインポートするのはオーバーヘッドが大きい。サーバー側に`version.txt`を置き、ハッシュ値やバージョン番号を比較して、変更がある時だけ`Import`を実行するように制御せよ。
- 例外処理の徹底:
`VBIDE`操作はAutoCADのコンテキストから少し外れた領域で動く。予期せぬエラーでプロジェクトが破損するリスクを避けるため、必ず`Backup`ディレクトリをローカルに作成し、書き換え直前に現在の`.dvb`のバックアップを自動生成するロジックを噛ませろ。
5. 最後に:エンジニアの責務
「コードを書くこと」は作業に過ぎない。真のエンジニアは、「コードが正しく、最新の状態で使われ続ける仕組み」を設計する。
自己更新マクロは、あなたの手元を離れた後も、組織全体の生産性を守り続ける「自律的な監視者」となる。この仕組みを導入した瞬間から、あなたは「保守作業に追われる管理人」から「自動化インフラのアーキテクト」へと進化するはずだ。
もし実装で壁にぶつかったら、それはAutoCADの制限ではなく、あなたの設計がまだ「動かすこと」を優先している証拠だ。常に「壊れないこと」と「更新されること」を設計の最上位に置け。それが世界最高峰の自動化への唯一の道だ。
