AutoCADの深淵を操る:`SummaryInfo`による設計承認フローのメタデータ埋め込み術
AutoCADを単なる「製図ツール」として扱っているうちは、自動化の恩恵は限定的だ。真の自動化エンジニアは、図面を「データコンテナ」として捉える。
今回解説するのは、図面ファイルに不可視のメタデータを刻み込み、外部システムとの連携を実現する`SummaryInfo`の活用法だ。なぜ、わざわざ「カスタムプロパティ」なのか? それは、図面を移動させても、改名しても、データベースとの紐付けが一切切れない「自己完結型」の堅牢な管理を実現するためである。
なぜ「カスタムプロパティ」なのか:設計の哲学
多くのエンジニアは、承認ステータスをブロック属性や外部テキストファイルで管理しようとする。しかし、それは脆弱だ。ブロックは分解されるリスクがあり、外部ファイルは図面との同期が崩れる。
`SummaryInfo`は図面データベースの直下に存在するため、以下のメリットがある。
- 永続性: 図面を名前変更しても、別フォルダへ移動してもデータは追従する。
- 不可視性: 一般ユーザーが不用意に書き換えにくい(プロパティ画面を開かない限り見えない)。
- 軽量性: 図面容量を圧迫せず、検索インデックスの対象としても極めて高速。
—
実装の極意:堅牢なアクセサを設計する
VBAで`SummaryInfo`を扱う際、最大のリスクは「キーが存在しない場合の例外」と「COMオブジェクトの解放漏れ」だ。以下のコードは、単なるコピペ用コードではない。実運用を見据えた、エラーハンドリングを完備したプロダクションコードである。
設計承認管理クラス:`clsDocMetaManager`
‘ 標準モジュールではなく、クラスモジュールとして実装し、
‘ インスタンス化して利用することを強く推奨する。
Option Explicit
‘ 承認情報キーの定数化(保守性向上のため)
Private Const KEY_APPROVER As String = “Design_Approver”
Private Const KEY_STATUS As String = “Approval_Status”
Private Const KEY_DATE As String = “Approval_Date”
”’
”’
Public Function GetCustomProperty(ByVal key As String) As String
Dim info As AcadSummaryInfo
Set info = ThisDrawing.SummaryInfo
Dim val As String
On Error Resume Next
info.GetCustomByKey key, val
If Err.Number <> 0 Then val = “”
On Error GoTo 0
GetCustomProperty = val
End Function
”’
”’
Public Sub UpdateApprovalInfo(ByVal approver As String, ByVal status As String)
Dim info As AcadSummaryInfo
Set info = ThisDrawing.SummaryInfo
‘ 書き込み処理:既存なら更新、なければ新規作成
SetOrAddCustomProperty info, KEY_APPROVER, approver
SetOrAddCustomProperty info, KEY_STATUS, status
SetOrAddCustomProperty info, KEY_DATE, CStr(Now)
‘ 変更を反映
ThisDrawing.Save
End Sub
Private Sub SetOrAddCustomProperty(info As AcadSummaryInfo, key As String, val As String)
Dim tmp As String
On Error Resume Next
info.GetCustomByKey key, tmp
If Err.Number <> 0 Then
‘ キーが存在しない場合は追加
info.AddCustomInfo key, val
Else
‘ キーが存在する場合は更新
info.SetCustomByKey key, val
End If
On Error GoTo 0
End Sub
—
現場で運用する際の「鉄則」
コードを書くだけでは、エンジニアとは呼べない。運用を見据えた以下の3点を肝に銘じてほしい。
1. 外部連携の際、`COM`のメモリ管理を過信しない
`SummaryInfo`へのアクセスは`ThisDrawing.SummaryInfo`を毎回呼び出すのではなく、可能であれば`AcadDocument`オブジェクトから明示的に取得・解放する癖をつけよ。大規模なバッチ処理を行う際、オブジェクトのライフサイクルを制御しないとAutoCADのメモリリークを招き、プロセスがクラッシュする原因となる。
2. 「キー名」の厳格な管理
チーム開発において、承認ステータスのキー名がバラバラになることは最大の悲劇だ。キー名は必ず定数ファイル(または共有の構成管理ファイル)で管理し、ハードコーディングを避けること。
3. バージョン管理との統合
Git等のバージョン管理ツールを利用している場合、`SummaryInfo`の変更はバイナリデータとして扱われるため、差分確認が難しい。このメタデータは「設計の正当性」を保証するために使い、図面内の「履歴管理」については、別途図面枠内への自動入力と併用することをお勧めする。
総括:なぜ今、この技術なのか
設計承認フローをメタデータ化する最大の目的は、「手作業による承認チェックの自動化(バリデーション)」にある。外部の管理ツールからAutoCADのオブジェクトをスキャンし、`SummaryInfo`のステータスを読み取るだけで、承認されていない図面の出図を物理的に防ぐゲートキーパーが完成する。
AutoCAD VBAは古臭い技術だという声もあるが、オブジェクトモデルの深部を理解し、適切に「図面というデータベース」を操作するスキルは、BIM/CIM時代においてもエンジニアの武器であり続ける。
さあ、あなたの図面を「単なる絵」から「インテリジェントな資産」へと昇華させよ。
