【テクニカル・上級編】【実務中級者向け】保存直前に「名前削除(Purge)」を自動実行:ファイルサイズを最適化してセーブする – AutoCAD VBA解析バイブル

スポンサーリンク

現場の「肥大化」を根絶せよ: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` に埋め込むのだ。これにより、誰が・いつ・どのレベルの最適化を行ったのかが履歴として残り、後に図面トラブルが発生した際の追跡可能性(トレーサビリティ)が劇的に向上する。

結び:技術への矜持

自動化とは、単に手作業を減らすことではない。「次にこのファイルを開く誰か」のために、最良の環境を整えておくことだ。肥大化したゴミファイルを抱え込むのは、プロのエンジニアとしての怠慢である。

このルーチンをあなたの標準ツールキットに加え、静かに、しかし確実に図面データを健全化せよ。それが、システム管理者の矜持というものだ。

タイトルとURLをコピーしました