なぜ「Excel依存」から脱却すべきなのか?SolidWorks自動化の次世代アーキテクチャ
SolidWorksの自動化において、未だに「Excelをデータベース代わりにする」手法が横行している。だが、現場のチーフアーキテクトとして断言しよう。それは「技術的負債の墓場」への片道切符だ。
ExcelはGUIであり、DBではない。バージョン互換性、COMオブジェクトの肥大化によるメモリリーク、そして何より「仕様変更のたびに壊れるVBAの参照設定」。これらに振り回されるのは今日で終わりにしよう。
今回は、FileSystemObject (FSO) と JSON を活用した、堅牢かつ軽量な「パラメータ駆動型パーツ生成基盤」を伝授する。
—
1. なぜJSONなのか:設計の「非依存性」という強み
JSONを採用する理由は明確だ。
- 構造化データ: 階層構造を持つ仕様書をそのまま記述できる(アセンブリの親子関係など)。
- 可搬性: SolidWorksがインストールされていない環境でも、テキストエディタ一つで仕様を確認・修正できる。
- 高速性: Excelを起動せず、ストリームとしてデータを読み込むため、処理速度が桁違いに速い。
このアーキテクチャでは、「設定ファイル(JSON)」「エンジン(VBA)」「実行環境(SolidWorks)」を完全に疎結合にする。 これこそが、保守性の高いエンジニアリングの極意だ。
—
2. 実装の核心:プロダクションコード
VBAでJSONをパースするには、標準のライブラリだけでは力不足だ。VBA-JSON(`JsonConverter.bas`)を導入してほしい。その上で、以下の設計パターンを実装する。
構成案
1. `config.json`: 寸法、材質、プロパティ情報を記述。
2. `BuildEngine.bas`: ファイルを読み込み、APIを叩くメインロジック。
config.json (仕様書)
{
“PartName”: “Shaft_001”,
“Dimensions”: {
“Length”: 150.5,
“Diameter”: 25.0
},
“Material”: “AISI 304”,
“CustomProperty”: “Project-A”
}
BuildEngine.bas (SolidWorks API)
‘ 必要なライブラリ: Microsoft Scripting Runtime, JsonConverter
Sub GeneratePartFromJson()
Dim fso As New FileSystemObject
Dim jsonStr As String
Dim json As Object
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
‘ 1. JSON読み込み (FSOの安定性)
Set fso = New FileSystemObject
jsonStr = fso.OpenTextFile(“C:\Designs\config.json”, ForReading).ReadAll
Set json = JsonConverter.ParseJson(jsonStr)
‘ 2. SolidWorks接続
Set swApp = Application.SldWorks
Set swModel = swApp.NewDocument(“Part”, 0, 0, 0)
‘ 3. パラメータ駆動のビルド処理 (エラーハンドリングを怠るな)
On Error GoTo ErrorHandler
‘ 寸法操作: パラメータをAPIへ流し込む
UpdateDimension swModel, “Length@Sketch1”, json(“Dimensions”)(“Length”)
‘ 材質適用: 堅牢なビルドのためにフルパス指定が鉄則
swModel.SetMaterialPropertyName2 “Default”, “C:\SolidWorks\data\materials.sldmat”, json(“Material”)
‘ カスタムプロパティ追加
swModel.AddCustomInfo3 “”, “Project”, swCustomInfoText, json(“CustomProperty”)
Exit Sub
ErrorHandler:
MsgBox “ビルド失敗: ” & Err.Description, vbCritical
End Sub
Private Sub UpdateDimension(swModel As ModelDoc2, dimName As String, val As Double)
Dim swDim As SldWorks.Dimension
Set swDim = swModel.Parameter(dimName)
swDim.SystemValue = val / 1000 ‘ メートル変換を忘れないこと
End Sub
—
3. 現場で「死なない」ためのアーキテクチャの鉄則
① 単位系の呪縛を解く
SolidWorksのAPIは内部的に「メートル・キログラム・秒 (MKS)」で動作する。JSON側はミリメートルで記述し、APIに渡す直前に必ず変換(`/ 1000`)するインターフェース層を設けること。これを直書きすると、後で計算ミスを見つけるのが地獄になる。
② ファイルロックとFSOの作法
FSOを使用する際、ファイルを読み込んだら必ず閉じる癖をつけろ。不意のクラッシュでファイルハンドルが残ると、自動化ツールが二度と動かなくなる。`Set fso = Nothing` を明示的に呼び出し、スコープを最小限に絞るのがプロの作法だ。
③ ログの出力
「なぜ失敗したか」をGUIのMsgBoxで出すのはアマチュアだ。必ず処理結果をテキストログとしてファイル出力せよ。何時何分に、どのJSON設定でエラーが起きたのか。この履歴こそが、次回の開発スピードを加速させる最大の資産になる。
—
最後に:エンジニアとしてのマインドセット
自動化とは、単にマウス操作を代替することではない。「設計の意図をコードに翻訳し、再現性という名の信頼を積み上げること」だ。
JSONを用いたデータ駆動型のアプローチは、将来的にWeb APIやローカルDBへの移行も容易にする。Excelという殻を破り、設計自動化の真の領域へと踏み出してほしい。君たちが書くコード一つひとつが、未来の製造プロセスの礎になるのだから。
質問があればいつでも来い。次のステージの設計図を一緒に描こう。
