【テクニカル・上級編】【実務中級者向け】図面保存時の「ISAVEPERCENT」最適化:ファイルサイズと保存速度のトレードオフをVBAで制御 – AutoCAD VBA解析バイブル

スポンサーリンク

【AutoCAD VBA掌握】図面保存時の「ISAVEPERCENT」最適化:ファイルサイズと保存速度のトレードオフを制御するセーブ戦略

図面ファイル(DWG)の肥大化と、それに伴うネットワークトラフィックの圧迫、そして保存処理によるフリーズ。大規模なプラント図面やインフラ設計データを扱う現場において、この問題に直面しないシニアエンジニアはいない。

AutoCADの標準動作である「増分保存(Incremental Save)」は、保存速度を劇的に向上させるための優れた機能だが、その代償として図面内に不要なゴミデータ(パージ前の残骸や削除されたオブジェクトの空間)を蓄積し続ける。

今回は、システム変数 `ISAVEPERCENT` をVBAから動的に制御し、「ネットワーク負荷の軽減」 と 「ファイル破損リスクの最小化」 を高次元で両立させるための実践的アーキテクチャを解説する。

—

1. 増分保存のメカニズムと `ISAVEPERCENT` の罠

AutoCADは図面を上書き保存する際、ファイル全体をゼロから書き出す「完全保存(Full Save)」ではなく、変更された差分データのみをファイルの末尾に追記する「増分保存」をデフォルトで行う。

この増分保存の許容度を制御するのがシステム変数 `ISAVEPERCENT` である。

  • 初期値: `50` (ファイル全体に対する未使用領域の割合が50%を超えるまで増分保存を続ける)
  • 動作: 未使用領域が指定割合を超えると、自動的に完全保存に切り替わり、ファイルが最適化(デフラグ)される。

なぜこれが実務で問題になるのか?

1. ファイルサイズの肥大化: 50%という値は、数十MBを超える大容量図面において、数MB〜数十MBの無駄な空間を常に抱え込むことを意味する。
2. ネットワーク保存時の破損リスク: 冗長化したファイル構造を持つDWGをVPN経由や共有サーバー(NAS)上で直接増分保存すると、パケット損失やタイムアウト時にファイルが致命的に破損(Fatal Error / Drawing file is not valid)する確率が跳ね上がる。
3. PDM/PLM連携の不整合: ファイルサイズが意図せず変動するため、ハッシュ値ベースのバージョン管理やドキュメント管理システム(EDM)において無駄な差分検知を引き起こす。

—

2. シニアエンジニアが採るべきセーブ戦略

実務における最適解は単純だ。
「日常の作業中は増分保存でパフォーマンスを維持し、サーバーへ最終保存(チェックイン)する瞬間、あるいは一日の終わりのバッチ処理において、`ISAVEPERCENT` を強制的に `0`(完全保存)にしてクリーンな状態で書き出す」

これを手動で行うのはヒューマンエラーの元である。図面オープン時およびセーブ実行時のイベント、あるいはバッチ処理マクロに組み込み、完全に自動化しなければならない。

—

3. 実装コード:VBAによる動的制御と安全な完全保存

以下のコードは、図面保存時に自動的に完全保存を強制し、処理完了後に元の環境変数へ復元する堅牢なプロシージャである。オブジェクトのライフサイクルとエラーハンドリングを考慮した、実戦投入可能なコードだ。

Option Explicit

‘ AutoCADのセーブ処理を安全にラップするモジュール
‘ —————————————————————–
‘ Author: Chief Architect (Automation Division)
‘ Description: ISAVEPERCENTを一時的に制御し、ファイル最適化と破損防止を両立する
‘ —————————————————————–

Public Sub SafeOptimizedSave()
Dim originalIsavePercent As Integer
Dim doc As AcadDocument
Set doc = ThisDrawing

On Error GoTo ErrorHandler

‘ 1. 現在のISAVEPERCENTの値を退避
originalIsavePercent = ThisDrawing.GetVariable(“ISAVEPERCENT”)

‘ 2. サーバー環境やネットワーク保存を想定し、一時的に完全保存(0%)へ強制変更
‘ ※ 0を指定することで、次回の保存は必ず完全保存(デフラグ済みのクリーンな状態)になる
ThisDrawing.SetVariable “ISAVEPERCENT”, 0

‘ 3. ユーザーに処理状況を通知(ステータスバー)
doc.Utility.Prompt vbCrLf & “【最適化セーブ】完全保存モードで図面を書き込んでいます…” & vbCrLf

‘ 4. 保存実行
doc.Save

‘ 5. ステータスバーのクリアと完了通知
doc.Utility.Prompt vbCrLf & “【最適化セーブ】完了しました。ファイル構造が最適化されています。” & vbCrLf

Cleanup:
‘ 6. 【重要】例外発生時でも必ず元のシステム変数を復元する(環境汚染の防止)
On Error Resume Next
ThisDrawing.SetVariable “ISAVEPERCENT”, originalIsavePercent
Exit Sub

ErrorHandler:
MsgBox “図面の保存中に致命的なエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “セーブ制御システム”
Resume Cleanup
End Sub

—

4. バッチ処理・大量図面一括処理への応用

単体図面だけでなく、夜間バッチなどで数百枚のDWGファイルを処理する場合、このアプローチはさらに威力を発揮する。
以下は、ファイルを開き、`ISAVEPERCENT = 0` で強制保存した上で `AUDIT`(パージ・エラーチェック)を走らせるルーチンの骨子である。

Public Sub BatchOptimizeDrawings(targetFolder As String)
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim targetDoc As AcadDocument

Set fso = CreateObject(“Scripting.FileSystemObject”)
Set folder = fso.GetFolder(targetFolder)
フレームワーク制御:

Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each file In folder.Files
If LCase(fso.GetExtensionName(file.Name)) = “dwg” Then
‘ ドキュメントコレクションを開く
Set targetDoc = Application.Documents.Open(file.Path)

‘ 完全保存の設定
targetDoc.SetVariable “ISAVEPERCENT”, 0

‘ 必要に応じて監査(Audit)を実行してデータベースを修復
‘ targetDoc.AuditInfo True ‘ 必要に応じて有効化

‘ 最適化保存
targetDoc.Save

‘ メモリ解放のためにドキュメントを閉じる
targetDoc.Close False
Set targetDoc = Nothing
End If
Next file

Application.ScreenUpdating = True
Application.DisplayAlerts = True

MsgBox “一括最適化処理が正常に終了しました。”, vbInformation
End Sub

—

5. チーフアーキテクトからの実践的提言

1. ネットワーク直保存の禁止: いかに `ISAVEPERCENT` を制御しようとも、WANや高遅延なVPN経由で直接DWGを上書き保存する行為は、CADエンジニアリングにおける「禁忌」である。必ずローカルドライブ(例: `C:\Temp`)に一度保存、あるいは処理してから、Robocopyやバックグラウンドスクリプトでサーバーへ同期するパイプラインを構築せよ。
2. メモリリークの排除: AutoCAD VBAにおける `AcadDocument` や選択セット等のCOMオブジェクトは、参照を明示的に `Nothing` に解放しないと、プロセスがメモリ内に残存し、次回の自動処理やCADの安定性に深刻な悪影響を及ぼす。オブジェクトのライフサイクル管理は徹底すること。
3. 監査(Audit)との組み合わせ: 定期的な `ISAVEPERCENT = 0` での保存は、図面データベースの断片化を防ぐ最良の手段だが、図面自体の論理エラー(ハンドルの破損等)を完全に修復するわけではない。週に一度、あるいは重要なマイルストーンの保存時には `Audit` コマンドの自動実行を組み合わせるべきである。

インフラの安定性とデータの整合性は、こうした泥臭いシステム変数の制御の積み重ねによってのみ守られる。本稿の知見を即座に自社の開発環境・マクロ群へ組み込み、トラブルの芽を断ち切ってほしい。

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