【入門編】【上級プロフェッショナル向け】デジタル署名付き図面の検証と、保存時の署名維持に関するVBAの制約と対策 – AutoCAD VBA解析バイブル

スポンサーリンク

【AutoCAD VBA】デジタル署名付き図面の「魔法」を解かないために:保存と検証の極意

こんにちは。AutoCADの自動化という深淵な世界へようこそ。
マクロの記録機能で「図形を描く」段階を卒業した皆さんは、次に「図面ファイルの管理」という高い壁に直面していることでしょう。

特に、建設業や製造業の要件定義で避けて通れないのが「デジタル署名」。
「VBAで図面を自動保存した途端、署名が無効になった!」
そんな冷や汗を流す経験をしたことはありませんか?

今日は、AutoCADのセキュリティの核心に触れ、デジタル署名を壊さずに自動化を実現する「プロの作法」を伝授します。

—

1. なぜVBAで保存すると「署名」が消えるのか?

結論から言いましょう。「デジタル署名は、ファイルのバイナリデータそのものに紐付いている」からです。

VBAで `ThisDrawing.Save` や `SaveAs` を実行すると、AutoCADは内部で図面データベースを再構築・最適化しながら書き出します。この際、AutoCADが「図面の中身を少しでも書き換えた」と判断すれば、ハッシュ値が変わり、署名の整合性は即座に失われます。

つまり、「何も変更していないつもりでも、保存操作そのものが署名を破壊する」というジレンマがあるのです。

—

2. デジタル署名を維持するための「黄金律」

現場で署名を維持するための鉄則は、以下の3点です。

1. 「読み取り専用」で開き、検証のみを行う(改変禁止)。
2. 保存が必要な場合は、署名を「あとで」付与する(VBAで行うのは、署名前の状態まで)。
3. ActiveXインターフェースの限界を知る(VBAから署名付与はできません)。

コード例:安全な検証ルーチン

まずは、図面を開いた瞬間に署名が有効かどうかをチェックするコードを見てみましょう。`SecurityOptions` ではなく、オブジェクトのプロパティから状態を読み取るのがプロの初手です。

Sub CheckDigitalSignature()
Dim doc As AcadDocument
Set doc = ThisDrawing

‘ デジタル署名情報はDocumentオブジェクトのプロパティには直接ないため、
‘ AutoCADのシステム変数を利用した検証が最も確実です
Dim signStatus As Integer
signStatus = ThisDrawing.GetVariable(“DIGITALSIGN”)

‘ DIGITALSIGNの戻り値
‘ 0: 署名なし
‘ 1: 有効な署名あり
‘ 2: 署名はあるが、図面が変更されている(無効)

Select Case signStatus
Case 0
MsgBox “この図面にはデジタル署名がありません。”, vbExclamation
Case 1
MsgBox “デジタル署名は有効です。保護されています。”, vbInformation
Case 2
MsgBox “警告:デジタル署名が破損しています!”, vbCritical
End Select
End Sub

—

3. 実践:署名を壊さない運用フローの設計

「どうしても自動保存したい」という場合、VBAだけで完結させようとするのは悪手です。以下のフローを推奨します。

推奨フロー:自動化の「二段構え」

1. VBA側: 図面の加工・整理を行い、`SaveAs` で一時ファイル(署名なし)として書き出す。
2. 外部コマンド側: AutoCADの起動引数、または `AcSign.exe` (AutoCADの署名実行モジュール) をコマンドラインからキックする。

VBAから `Shell` 関数を使って、署名プロセスを外部に委託するのが、現在考えうる最も堅牢なアーキテクチャです。

—

4. 陥りやすい罠:VBAによる「不要な保存」

プログラミング初心者がやりがちなミスは、「すべての図面を閉じる際に保存するかどうか聞く」というコードです。

‘ 危険なコード例
For Each doc In Documents
doc.Close True ‘ 強制保存は署名破壊の元凶!
Next

これを行うと、署名付き図面を閉じるたびに「署名が無効化された新しい図面」が強制的に上書きされます。「署名付き図面は、一度のセッションで変更を加えない」というポリシーをVBA内に組み込んでください。

—

最後に:エンジニアとしての一歩先へ

デジタル署名の扱いは、単なる技術的な制約ではありません。「誰が、いつ、何を保証したか」というデータの真正性を守るための作法です。

VBAで自動化を行う際、「何をしないか」を決めるのが本当のプロフェッショナルです。署名を維持したいのであれば、プログラムに「署名付きファイルには触らせない」というガードレールを引く。これこそが、信頼されるシステム構築の第一歩ですよ。

この壁をクリアできれば、皆さんはもう「マクロを動かす人」ではなく、「ビジネスの信頼を守るシステムアーキテクト」です。

また次回の講義でお会いしましょう。質問があれば、コメント欄でお待ちしています。

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