【実務・中級編】【VBAからCOMアドインへの架け橋】VB.NETを用いたSolidWorks Add-inプロジェクトの基本構造とデバッグ – SolidWorks VBA解析バイブル

スポンサーリンク

VBAの限界を超えろ:SolidWorks Add-in開発が導く真の自動化エンジニアへの道

VBAでマクロを書き、ボタン一つで作業が完結する。それはエンジニアにとって最初の快感だ。しかし、やがて君は気づくはずだ。「マクロの管理が面倒だ」「UIが貧弱でエラーハンドリングが追いつかない」「他システムとの連携でCOMの境界を超えられない」という壁に。

VBAは「実験場」としては優秀だが、プロダクション(実業務)で運用するシステムとしては脆弱すぎる。今日は、VBAの箱庭を脱出し、Visual Studioを用いた「SolidWorks Add-in開発」という、一段上の領域へ踏み込むための設計思想を伝授する。

1. なぜVBAからAdd-inへ移行すべきなのか

VBAは「ファイルに依存する」という宿命を背負っている。これに対し、Add-inはSolidWorksのプロセス内に常駐する「DLL」として動作する。

  • UIの統合: リボンメニュー、プロパティマネージャー、タスクパネルをネイティブに制御できる。
  • ライフサイクルの管理: アプリケーションの起動・終了イベントをフックし、データベースとのコネクションやメモリ管理を堅牢に行える。
  • コードの資産化: バージョン管理(Git等)との親和性が高く、チーム開発において「スパゲッティコード」を脱却できる。

2. アドインプロジェクトの核:ISwAddinの実装

SolidWorks Add-in開発の入り口は、`ISwAddin`インターフェースの継承だ。ここがアプリケーションの心臓部となる。

基本構成の実装例 (VB.NET)

Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swpublished
Imports System.Runtime.InteropServices

_
Public Class SwAddin
Implements ISwAddin

Private iSwApp As SldWorks
Private addinID As Integer

‘ SolidWorks起動時に呼び出されるエントリーポイント
Public Function ConnectToSW(ThisSW As Object, Cookie As Integer) As Boolean Implements ISwAddin.ConnectToSW
iSwApp = ThisSW
addinID = Cookie

‘ APIのセットアップとUIの構築
SetupUI()

Return True
End Function

‘ アドイン終了時の処理(メモリリークを防ぐ)
Public Function DisconnectFromSW() As Boolean Implements ISwAddin.DisconnectFromSW
‘ オブジェクトの解放を明示的に行う
iSwApp = Nothing
GC.Collect()
Return True
End Function

Private Sub SetupUI()
‘ コマンドマネージャーへの登録ロジックをここに記述
End Sub
End Class

3. 実務で「落ちない」ための堅牢な設計指針

アドイン開発で最も恐ろしいのは、例外発生によるSolidWorks全体のクラッシュだ。これを防ぐための鉄則を刻んでおけ。

① 徹底した例外ハンドリング

VBAのように「動けばいい」という考えは捨てろ。API呼び出しの前後には必ず `Try-Catch` を配置し、ログを出力する仕組みを構築せよ。

② ComObjectの解放(Marshal.ReleaseComObject)

.NETのガベージコレクタは、COMオブジェクトの解放が苦手だ。`GetModelDoc2()` 等で取得したインターフェースは、使い終わったら必ず明示的に解放する癖をつけろ。

‘ 悪い例: そのまま放置
Dim swModel As ModelDoc2 = iSwApp.ActiveDoc

‘ 良い例: 明示的に解放する
If swModel IsNot Nothing Then
Marshal.ReleaseComObject(swModel)
swModel = Nothing
End If

③ データベース連携の注意点

ファイル駆動のVBAと異なり、アドインはDBと直結できる。だが、「SolidWorksのメインスレッドをDB操作で止めない」こと。重い処理は必ず `Task` や `BackgroundWorker` を使い、非同期で実行せよ。UIがフリーズした瞬間、エンドユーザーの信頼は失われる。

4. プロダクションへの最短ルート

開発環境を整える際は、以下のステップを遵守せよ。

1. Visual Studioのインストール: VB.NETを選択。
2. SolidWorks API SDKの参照: `SolidWorks.Interop.sldworks.dll` 等をプロジェクトに正しく紐付ける。
3. レジストリ登録: `RegAsm` を用いて、作成したDLLをCOMとして登録する。
4. デバッグ実行: Visual Studioの「開始外部プログラム」に `SLDWORKS.exe` を指定することで、F5キーでSolidWorksを起動し、そのままブレークポイントで止めることが可能になる。

最後に:エンジニアとしての矜持

VBAからAdd-inへの移行は、単なる言語の変更ではない。「スクリプトを書く者」から「システムを設計する者」への転換だ。

最初は難解に感じるかもしれない。だが、一度この構造を手にすれば、君が書く自動化ツールは「単なる補助」から「業務のインフラ」へと進化する。

次は「コマンドボタンのアイコンをどう配置するか」「設定ファイルをJSONで外部管理するにはどうするか」といった具体的な深淵に触れていこう。準備ができたら、まずは空のプロジェクトを立ち上げ、`ConnectToSW` で「Hello World」を表示させることから始めよ。

コードは嘘をつかない。君が書いた設計の深さが、そのまま業務効率の高さとなって返ってくるのだから。

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