【実務・中級編】【外部データ連携】FileSystemObject(FSO)とJSONファイルを活用した柔軟なパラメータ駆動型パーツ自動生成基盤 – SolidWorks VBA解析バイブル

スポンサーリンク

なぜ「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という殻を破り、設計自動化の真の領域へと踏み出してほしい。君たちが書くコード一つひとつが、未来の製造プロセスの礎になるのだから。

質問があればいつでも来い。次のステージの設計図を一緒に描こう。

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