AutoCAD VBAの深淵:デジタル署名付き図面を「壊さない」ための境界線
AutoCADのオートメーションにおいて、最も軽視されがちなのが「ファイルの真正性」だ。大規模プロジェクトや機密性の高いインフラ設計では、デジタル署名が図面の正当性を証明する鍵となる。
しかし、多くの開発者はVBAから機械的に`SaveAs`を叩き、無意識のうちにその「鍵」を破壊している。今日は、VBAのコードが署名に与える物理的な影響と、それを回避するためのアーキテクチャについて、現場の知見を共有する。
—
1. なぜVBAの保存で署名が消えるのか
デジタル署名は、「ファイルの内容(バイナリデータ)」と「署名情報」が完全に一致した状態を保証する仕組みだ。VBAで`Document.SaveAs`を実行し、図面を更新(保存)するという行為は、以下のプロセスを強制的に発生させる。
1. データベースの再構築: AutoCADは保存時にデータベースを整理・再構築する。
2. バイト列の再生成: 内部的なファイル構造が再計算され、バイナリの内容が(たとえ図形が同じでも)微細に変化する。
3. 署名の無効化: 署名証明書は「保存前のバイナリ」を指しているため、内容が書き換わった瞬間に「改ざんされた」と判定され、署名は強制的に破棄される。
「VBAで自動処理しつつ、署名を維持する」ことは、論理的に不可能である。 したがって、プロフェッショナルな設計において取るべきアプローチは「署名を壊さないこと」ではなく、「署名のライフサイクルをワークフローの一部として再設計すること」である。
—
2. 信頼性を担保するワークフローの設計
署名付き図面を扱う自動化ツールを組む場合、以下の「サンドボックス・アーキテクチャ」を推奨する。
- 受領(署名済み): 署名付きのマスター図面(参照専用)。
- 作業(自動化): マスターのコピーを作成し、VBAで編集を行う。
- 承認(再署名): 編集完了後、人間が内容を確認し、最終プロセスとして専用の署名ツール(またはAutoCADの標準署名機能)で再署名する。
「VBAで自動処理したものを、あたかも署名が維持されているように見せる」ようなハックは、セキュリティ監査において致命的な脆弱性となる。 絶対に行うべきではない。
—
3. 実践コード:安全に保存するためのベストプラクティス
以下は、署名環境を意識した、堅牢な保存プロセスを管理するVBAのテンプレートだ。単に保存するのではなく、「読み取り専用チェック」と「バックアップ生成」を組み合わせたプロダクション・コードである。
‘ @brief 署名付き図面の運用を考慮した安全な保存管理関数
‘ @param doc 保存対象のDocumentオブジェクト
‘ @param newPath 保存先のフルパス
Public Sub SecureSaveAs(ByRef doc As AcadDocument, ByVal newPath As String)
On Error GoTo ErrorHandler
‘ 1. ファイルの整合性チェック
‘ 署名付き図面はReadOnlyで開かれることが多いため、属性を確認する
If GetAttr(doc.FullName) And vbReadOnly Then
Err.Raise vbObjectError + 1001, , “当該図面は読み取り専用です。署名が保護されている可能性があります。”
End If
‘ 2. 保存前の検証(Auditの実行)
‘ 破損した図面を保存すると署名以前の問題が発生するため、必ずAuditを通す
doc.AuditInfo True
‘ 3. 名前をつけて保存
‘ ac2018_dwgなど、プロジェクト規定のバージョンを指定すること
doc.SaveAs newPath, ac2018_dwg
Debug.Print “Save successful: ” & newPath
Exit Sub
ErrorHandler:
MsgBox “保存処理でエラーが発生しました: ” & Err.Description, vbCritical
End Sub
—
4. 開発者が肝に銘ずべき「境界線」
現場のリーダーとして伝えておきたい。VBAで自動化を行う際、以下の3点を徹底してほしい。
1. 「署名検証の自動化」は行わない: VBAからデジタル署名の有無を判定し、条件分岐させることは可能だが、その判定結果を信頼して図面を上書きすることはビジネスリスクだ。
2. メタデータの活用: 図面内のカスタムプロパティ(`SummaryInfo`)を使い、いつ、どの自動化ツールが編集したかのログを必ず残すこと。
3. バイナリ・バリデーション: 本当にセキュリティ要件が厳しい場合、VBA単体で完結させず、外部の署名検証コマンドラインツールを`Shell`関数で呼び出し、保存直後の図面が要件を満たしているかを確認する「検証工程」をパイプラインに組み込むこと。
結論
AutoCAD VBAは強力だが、OSレベルのセキュリティ機能(デジタル署名)を上書きする権限はない。この「制約」を理解した上で、いかに人間の承認プロセスをワークフローの中に組み込むか。それが、真に信頼される業務自動化エンジニアの仕事である。
技術は手段であり、目的は「図面の信頼性を守ること」にある。この本質を見失わない限り、君が作るツールは現場のエンジニアにとって最高の武器になるはずだ。
