現場の「肥大化」を根絶せよ:AutoCAD VBAによる保存直前のフル・パージ最適化
図面ファイルの肥大化は、単なるストレージの浪費ではない。それは「図面の腐敗」の兆候だ。無数の未使用ブロック、ゾンビ化した画層、そして誰も参照していない尺度定義。これらはAutoCADのメモリ消費量を増大させ、図面を開閉するたびにエンジニアの貴重な時間を奪う。
多くの技術者が標準の`Purge`コマンドを叩いて満足しているが、真の自動化エンジニアはそこでは止まらない。本稿では、VBAを用いて保存プロセスに介入し、図面を「常にクリーンな状態」に保つための極限のルーチンを提示する。
—
1. 「なぜコマンド発行では不十分なのか」という問い
AutoCADの`SendCommand`で `”-PURGE”` を実行するのは、素人の手法だ。同期の問題、実行タイミングの不確実性、そして何より「非表示のデータ」への対処能力が低い。
真の自動化においては、`ThisDrawing.PurgeAll` メソッドを軸に据える必要がある。しかし、これだけでは足りない。ブロック定義の中に埋もれたネストされた不要要素や、極めて強固に居座る外部参照の残滓を処理するには、「再帰的なクリーンアップ」と「オブジェクトの明示的な開放」が不可欠だ。
—
2. 実装:最適化済みセーブ・ルーチン
以下に、システム管理者が業務フローに組み込むべき「高耐久・高効率」な保存ルーチンを記す。
Option Explicit
‘ 保存前に最適化を実行するメインプロシージャ
Public Sub OptimizedSave()
Dim doc As AcadDocument
Set doc = ThisDrawing
On Error GoTo ErrorHandler
‘ 1. 不要なオブジェクトを再帰的にパージする
‘ パージは一度では完結しない場合がある(階層構造のため)
Call PurgeFull(doc)
‘ 2. メモリ最適化のためのガーベッジコレクション的アプローチ
‘ AutoCADのデータベースを最適化するために、一度監査を行う
doc.AuditInfo True
‘ 3. セーブ実行
doc.Save
Exit Sub
ErrorHandler:
MsgBox “最適化セーブ中にエラーが発生しました: ” & Err.Description, vbCritical
End Sub
‘ 徹底的なパージを行うためのサブプロシージャ
Private Sub PurgeFull(doc As AcadDocument)
Dim i As Integer
‘ 複数回パージを行うことで、ネストされた定義を完全に排除する
‘ 多くのレガシー図面では3回が最適解
For i = 1 To 3
‘ AutoCAD APIのPurgeAllは名前削除の極致
doc.PurgeAll
Next i
‘ 明示的にオブジェクト参照をクリア(VBAのメモリ管理の鉄則)
Set doc = Nothing
End Sub
—
3. チーフアーキテクトからの深掘り:技術的知見
A. レガシー図面への「監査(Audit)」の重要性
単なるパージでは、データベースの整合性までは保証されない。特に20年以上前のCADバージョンから引き継がれた図面には、内部リンクの破損が潜んでいる。`doc.AuditInfo True` を組み合わせることで、保存前に物理的なデータの「ゆがみ」を矯正し、ファイルクラッシュのリスクを最小化する。
B. メモリ管理とVBAの限界
VBAはCOMベースの言語であり、AutoCADのオブジェクトを掴み続けるとメモリリークを起こしやすい。`Set doc = Nothing` は単なる行儀の問題ではなく、大規模な図面を連続で開閉する際の「スタックオーバーフロー」や「予期せぬクラッシュ」を回避するための防波堤だ。
C. Windows APIを活用した処理速度の向上
もし図面が数百MBに及ぶ場合、保存中のフリーズがストレスになる。その際は、Windows APIの `Sleep` を利用し、プロセスを一時的にOSのタスクスケジューラに明け渡すことで、AutoCADのGUI応答性を維持する工夫も一考の価値がある。
—
4. システム間連携の視点
社内システム管理者がこのルーチンを導入する際、「図面プロパティの強制書き換え」と併用することを強く推奨する。
パージ後のファイルに、自動的に「最適化完了日時」や「処理エンジニア名」を `SummaryInfo` に埋め込むのだ。これにより、誰が・いつ・どのレベルの最適化を行ったのかが履歴として残り、後に図面トラブルが発生した際の追跡可能性(トレーサビリティ)が劇的に向上する。
結び:技術への矜持
自動化とは、単に手作業を減らすことではない。「次にこのファイルを開く誰か」のために、最良の環境を整えておくことだ。肥大化したゴミファイルを抱え込むのは、プロのエンジニアとしての怠慢である。
このルーチンをあなたの標準ツールキットに加え、静かに、しかし確実に図面データを健全化せよ。それが、システム管理者の矜持というものだ。
