SolidWorks APIの「負の遺産」を殲滅せよ:2011から2024へ繋ぐ、堅牢なリファクタリング戦略
SolidWorksのバージョンが2011から2024へ進化する間、APIは単なる「機能追加」の歴史ではなく、非効率なコードを葬り去る「淘汰の歴史」でもありました。
もしあなたが今、動いているからという理由だけで2011年当時の書き方を放置しているなら、それは時限爆弾を抱えているのと同じです。本稿では、レガシーコードを最新のSolidWorks環境で「高速・安全・メンテナンスフリー」に動かすための、極限の移行術を伝授します。
—
1. なぜ「昔のコード」が動かなくなるのか?
古いAPI(特に `ISldWorks` や `IModelDoc2` 周り)は、COM(Component Object Model)のポインタ管理が甘く、SolidWorksのメモリを無駄に消費します。特に以下の3点が現代の開発でボトルネックとなります。
- インターフェースの肥大化: 古いコードは型を `Object` で宣言しがちですが、これは実行時の遅延バインディングを招き、予期せぬ実行時エラーの温床となります。
- イベント駆動の欠如: 非同期処理が考慮されておらず、大規模アセンブリでフリーズする。
- 廃止されたメソッド: `SelectByID` などの旧来の選択メソッドは、最新のモデル構造では一貫性を保証できません。
—
2. リファクタリングの鉄則:型を制する者がAPIを制す
「とりあえず動くコード」から「プロダクション環境で耐えうるコード」へ昇華させるための3つのステップを提示します。
Step 1: 参照設定と早期バインディングへの完全移行
`Object` 型の使用を禁止してください。必ず `SldWorks.ModelDoc2` のように、具体的なライブラリの型を明示します。これにより、IntelliSenseが有効になり、コンパイル時点で型不一致を排除できます。
Step 2: 選択の「モダン化」
旧APIで最もバグを生むのは「選択(Selection)」です。古いコードで多用される「名前による選択」は、言語設定やフィーチャ名変更で即座に崩壊します。現在は `ISelectionMgr` を通じたオブジェクトベースの選択が必須です。
—
3. 実践:モダンなパーツ新規作成とフィーチャ生成コード
以下は、2024環境でも安定して動作する、堅牢なパーツ作成のテンプレートコードです。
Option Explicit
‘ 早期バインディングにより、実行速度とデバッグ効率を最大化する
Private Sub CreateModernPart()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swFeatMgr As SldWorks.FeatureManager
Set swApp = Application.SldWorks
‘ 新規パーツ作成:テンプレートパスは環境に合わせて動的に取得すべき
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\…\Part.prtdot”, 0, 0, 0)
If swModel Is Nothing Then
Err.Raise vbError, “CreateModernPart”, “ドキュメント生成に失敗しました。”
End If
‘ プロダクション環境では、必ずFeatureManagerを介して操作する
Set swFeatMgr = swModel.FeatureManager
‘ フィーチャ生成:旧来のメソッドではなく、最新のパラメータ定義を用いる
‘ ※例:押し出しフィーチャの生成(パラメータは適宜調整)
Dim swFeat As SldWorks.Feature
Set swFeat = swFeatMgr.FeatureExtrusion2(True, False, False, 0, 0, _
0.05, 0.05, False, False, False, False, 0, 0, False, _
False, False, False, True, True, True, 0, 0, False)
‘ メモリ解放の明示(VBAでは推奨される習慣)
Set swFeat = Nothing
Set swModel = Nothing
End Sub
—
4. 運用上の注意点:データベースとファイル連携の罠
レガシーなツールを最新環境に移行する際、最もトラブルが多いのが「ファイルパスの扱い」と「データベースの書き込み権限」です。
1. パスの完全修飾: `App.Path` などの相対パスは、SolidWorksのバージョンアップに伴うインストール先変更で動作しなくなります。Windowsの環境変数や、専用の設定ファイル(INI/JSON)からパスを読み込む設計にしてください。
2. エラーハンドリング: `On Error Resume Next` でエラーを握りつぶすのは、プロのエンジニアがすることではありません。`On Error GoTo` を使い、どのフィーチャでどのAPIが失敗したかをログファイル(CSV推奨)に出力する仕組みを組み込んでください。
—
5. 最後に:伝説のエンジニアからのメッセージ
VBAは、決して「使い捨てのスクリプト言語」ではありません。適切に設計されたVBAコードは、SolidWorksの内部APIを直接叩く強力な武器となります。
今回の移行で一番大切なのは、「過去の成功体験を疑うこと」です。2011年に書かれたコードが2024年でも動くのは、SolidWorksが互換性を維持しているからに過ぎません。しかし、その内部で発生しているメモリリークや非効率な計算は、間違いなく今のあなたの生産性を削いでいます。
今日から、すべての `Object` 型を適切な型に書き換え、エラーハンドリングを再定義してください。それが、あなたの自動化ツールが「レガシーの墓場」から「最新の業務基盤」へと生まれ変わる第一歩です。
さあ、コードをリライトしましょう。それが、エンジニアとしての責任です。
