iLogic x AI
~ AI を使用して iLogic ルールを生成 ~
今回のテーマは「iLogic x AI」!
何かカスタマイズする場合、サンプルがないものを一から作成するのはとても時間がかかります。そんなとき、今話題の 生成AI(以降 AI)を使ってプログラムを手軽に作成できたら夢のようですよね!
でも、3D-CAD のカスタマイズってどうやって AI に指示したらいいのでしょう?…
「どう指示しらたいいか見当もつかない」「不具合があった時の修正に期間がかかりそう」そんなことを思ったことはありませんか?
今回はそんな方へ、AI(汎用的な無料の生成AI)を使用して iLogic ルール(プログラム)を生成し、実際に使えるようにするまでの一連の情報をお届けします。少しでも参考になれば幸いです。
1. 今回使用したモデル

2. 先ずは AI に iLogic ルールの作成を依頼する時の指示方法を聞いてみた!
【AI からの回答】 <カスタマイズ依頼するときの「テンプレート」を Get!>
あなたは Autodesk Inventor の iLogic 専門家です。以下の仕様から iLogic ルールを生成してください。
【目的】
<何の設計ルールか、何を自動化するか>
【対象環境】
- Autodesk Inventor <バージョン>(言語:日本語)
- 単位系:
- iLogic:形状/フィーチャ/パラメータ操作を使用
【入力パラメータ(ユーザ編集)】
<パラメータ名:説明> の形式で列挙
- :<説明>
- :<説明>
…
【出力(計算・設定する)パラメータ/フィーチャ】
- :<説明>
- :<説明>
- 対象フィーチャ名:<例:RectPattern1 など>
【ロジック仕様(条件分岐・数式)】
- 条件分岐:<例:Select Case LengthX …>
- 数式:<例:KukeiDisX = (LengthX – KukeiStaX * 2) / (KukeiQuaX – 1)>
- 端数処理:<切り捨て/四捨五入 の指定>
- 境界値の扱い:<= / >= のどちらで包含するか
【制約・品質】
- パラメータ存在チェック(ない場合はエラー表示)
- ゼロ除算回避、負値回避
- Inventorドキュメント更新(Regenerate)を実行
- コメントを日本語で詳しく付与
- マジックナンバーは定数化
- 想定外入力時は安全値でフォールバックしメッセージ表示
【出力形式】
- iLogic ルール名:”<ルール名>”
- 完全な VB.NET iLogic コードのみをコードブロックで出力
- 先頭に概要コメント(目的/入出力/注意点)
【テスト観点(生成後、AIに自己レビューさせる項目)】
- サンプルケース:<複数の LengthX/LengthY 例を列挙>
- 端・境界値:<60, 90, 20, 50 など>
- 異常系:
- 計算結果の整合性(負値/ゼロ除算の防止)
3. 取得したテンプレートを元に 2 つの AI に iLogic ルールの作成を依頼
【テンプレートを元に今回のプロンプトを作成】 <ボス&リブ設定ルール用 プロンプトを作成>
あなたは Autodesk Inventor の iLogic 専門家です。以下の仕様で「ボス&リブ設定ルール」を生成してください。
【目的】
外形サイズ(X/Y)に応じて、矩形パターンの個数・間隔・開始位置(端面からの距離)を自動設定する。
【対象環境】
- Autodesk Inventor 2025 以降(日本語)
- 単位:mm
- 対象フィーチャ:矩形パターン
【入力パラメータ(ユーザ編集)】 - LengthX:外形 X方向 長さ(mm)
- LengthY:外形 Y方向 長さ(mm)
- KukeiStaX:矩形パターン X方向 端面からの距離(mm)
- KukeiStaY:矩形パターン Y方向 端面からの距離(mm)
【出力(計算する)パラメータ】 - KukeiQuaX:矩形パターン X方向 個数(整数)
- KukeiDisX:矩形パターン X方向 間隔(mm)
- KukeiQuaY:矩形パターン Y方向 個数(整数)
- KukeiDisY:矩形パターン Y方向 間隔(mm)
【ロジック仕様】 - X方向:
Select Case LengthX
Case <= 60 : KukeiQuaX = 2 Case >= 90 : KukeiQuaX = 4
Case Else : KukeiQuaX = 3
KukeiDisX = (LengthX – KukeiStaX * 2) / (KukeiQuaX – 1) - Y方向:
Select Case LengthY
Case <= 20 : KukeiQuaY = 1 KukeiStaY = LengthY / 2 Case >= 50 :
KukeiQuaY = 3
KukeiDisY = (LengthY – KukeiStaY * 2) / (KukeiQuaY – 1)
Case Else :
KukeiQuaY = 2
KukeiDisY = (LengthY – KukeiStaY * 2) / (KukeiQuaY – 1)
【制約・品質】 - パラメータ存在チェック(ない場合はエラーダイアログ)
- KukeiQuaX/Y は 1 以上の整数
- (KukeiQuaX/Y – 1) が 0 の場合は間隔計算をスキップして安全値を設定
- (Length – KukeiSta*2) が負になる場合は KukeiSta を自動補正 or 間隔=0 として警告
- 計算後にドキュメント更新(Regenerate)
- コメントは日本語で詳述
- 定数・閾値はコード上部で定義
【出力形式】 - iLogic ルール名:”ボス&リブ設定ルール”
- 完全な VB.NET iLogic コードだけをコードブロックで出力
【テスト観点】 - 正常:LengthX=55/75/95、LengthY=15/35/55
- 境界:LengthX=60/90、LengthY=20/50
- 異常:KukeiStaX=LengthX/2 より大(負間隔)、KukeiStaY 未設定など
以上に従って iLogic を生成してください。
4. AI からの回答(iLogic ルールが自動生成された)
'===========================================================
' ボス&リブ設定ルール
' 目的: 外形サイズに応じて矩形パターンの個数・間隔・開始位置を自動設定
' 入力: LengthX, LengthY, KukeiStaX, KukeiStaY
' 出力: KukeiQuaX, KukeiDisX, KukeiQuaY, KukeiDisY
' 注意: ゼロ除算・負値回避、境界値(<=, >=)の明示、最終的にモデル更新
'===========================================================
'--- 安全閾値・定数
Const MIN_QUA As Integer = 1 ' 個数の最小値
Const SAFE_DIS As Double = 0.0 ' フォールバックの間隔
'--- パラメータ存在チェック(存在しなければエラーを出して終了)
Dim requiredParams As String() = {"LengthX","LengthY","KukeiStaX","KukeiStaY","KukeiQuaX","KukeiQuaY","KukeiDisX","KukeiDisY"}
For Each p In requiredParams
If Not Parameter.Exists(p) Then
MessageBox.Show("パラメータ '" & p & "' が存在しません。スケッチまたはユーザパラメータを確認してください。","ボス&リブ設定ルール - エラー")
Return
End If
Next
'--- 値の取得
Dim lx As Double = CDbl(Parameter("LengthX"))
Dim ly As Double = CDbl(Parameter("LengthY"))
Dim sx As Double = CDbl(Parameter("KukeiStaX"))
Dim sy As Double = CDbl(Parameter("KukeiStaY"))
'========================
' X方向の設定
'========================
Dim qx As Integer
If lx <= 60 Then
qx = 2
ElseIf lx >= 90 Then
qx = 4
Else
qx = 3
End If
' 個数は最低1
If qx < MIN_QUA Then qx = MIN_QUA
' 間隔計算のため有効幅を算出
Dim effX As Double = lx - sx * 2
Dim dx As Double
If qx - 1 <= 0 Then
' 個数が1の場合、間隔は不要(安全値)
dx = SAFE_DIS
Else
' 有効幅が負なら、開始距離を自動補正して0以上にする
If effX < 0 Then
sx = Math.Max(0, lx / 2) ' 中央寄せの安全補正
effX = lx - sx * 2
End If
dx = effX / (qx - 1)
If dx < 0 Then dx = SAFE_DIS
End If
' 反映
Parameter("KukeiQuaX") = qx
Parameter("KukeiDisX") = dx
Parameter("KukeiStaX") = sx ' 補正が入った可能性があるため書き戻す
'========================
' Y方向の設定
'========================
Dim qy As Integer
Dim dy As Double
If ly <= 20 Then
qy = 1
sy = ly / 2 ' 仕様通り中央配置
dy = SAFE_DIS ' 個数1なので間隔不要
ElseIf ly >= 50 Then
qy = 3
Else
qy = 2
End If
' 個数は最低1
If qy < MIN_QUA Then qy = MIN_QUA
' 個数が2以上のときのみ間隔計算
If qy - 1 > 0 Then
Dim effY As Double = ly - sy * 2
If effY < 0 Then
sy = Math.Max(0, ly / 2) ' 安全補正
effY = ly - sy * 2
End If
dy = effY / (qy - 1)
If dy < 0 Then dy = SAFE_DIS
Else
dy = SAFE_DIS
End If
' 反映
Parameter("KukeiQuaY") = qy
Parameter("KukeiDisY") = dy
Parameter("KukeiStaY") = sy
'========================
' 更新 & 確認メッセージ(必要なら)
'========================
iLogicVb.UpdateWhenDone = True
InventorVb.DocumentUpdate()
'MessageBox.Show( _
' "X: 個数=" & qx & ", 間隔=" & Math.Round(dx,3) & ", 開始=" & Math.Round(sx,3) & vbCrLf & _
' "Y: 個数=" & qy & ", 間隔=" & Math.Round(dy,3) & ", 開始=" & Math.Round(sy,3), _
' "ボス&リブ設定ルール - 設定結果")
MessageBox.Show("【Copilot】ボス&リブ設定ルールの計算が完了しました。", "完了", MessageBoxButtons.OK, MessageBoxIcon.Information)
5. iLogic ルールの修正
AI にエラーを指摘して、コードを直してもらうこともできると思いますが、今回はコードを手修正しました。手修正した部分は色分けして表示しています。
・コメント(無効)にした行:文字背景薄いピンク&打消し線(例: ABCDE )
・追加した行:背景緑(例: ABCDE )
'===========================================================
' ボス&リブ設定ルール
' 目的: 外形サイズに応じて矩形パターンの個数・間隔・開始位置を自動設定
' 入力: LengthX, LengthY, KukeiStaX, KukeiStaY
' 出力: KukeiQuaX, KukeiDisX, KukeiQuaY, KukeiDisY
' 注意: ゼロ除算・負値回避、境界値(<=, >=)の明示、最終的にモデル更新
'===========================================================
'--- 安全閾値・定数
Const MIN_QUA As Integer = 1 ' 個数の最小値
Const SAFE_DIS As Double = 0.0 ' フォールバックの間隔
'--- パラメータ存在チェック(存在しなければエラーを出して終了)'Dim requiredParams As String() = {"LengthX","LengthY","KukeiStaX","KukeiStaY","KukeiQuaX","KukeiQuaY","KukeiDisX","KukeiDisY"}
'For Each p In requiredParams
' If Not Parameter.Exists(p) Then
' MessageBox.Show("パラメータ '" & p & "' が存在しません。スケッチまたはユーザパラメータを確認してください。","ボス&リブ設定ルール - エラー")
' Return
' End If
'Next
'--- 値の取得'Dim lx As Double = CDbl(Parameter("LengthX"))
'Dim ly As Double = CDbl(Parameter("LengthY"))
'Dim sx As Double = CDbl(Parameter("KukeiStaX"))
'Dim sy As Double = CDbl(Parameter("KukeiStaY"))
Dim lx As Double = CDbl(LengthX)
Dim ly As Double = CDbl(LengthY)
Dim sx As Double = CDbl(KukeiStaX)
Dim sy As Double = CDbl(KukeiStaY)
'========================
' X方向の設定
'========================
Dim qx As Integer
If lx <= 60 Then
qx = 2
ElseIf lx >= 90 Then
qx = 4
Else
qx = 3
End If
' 個数は最低1
If qx < MIN_QUA Then qx = MIN_QUA
' 間隔計算のため有効幅を算出
Dim effX As Double = lx - sx * 2
Dim dx As Double
If qx - 1 <= 0 Then
' 個数が1の場合、間隔は不要(安全値)
dx = SAFE_DIS
Else
' 有効幅が負なら、開始距離を自動補正して0以上にする
If effX < 0 Then
sx = Math.Max(0, lx / 2) ' 中央寄せの安全補正
effX = lx - sx * 2
End If
dx = effX / (qx - 1)
If dx < 0 Then dx = SAFE_DIS
End If
' 反映
Parameter("KukeiQuaX") = qx
Parameter("KukeiDisX") = dx
Parameter("KukeiStaX") = sx ' 補正が入った可能性があるため書き戻す
'========================
' Y方向の設定
'========================
Dim qy As Integer
Dim dy As Double
If ly <= 20 Then
qy = 1
sy = ly / 2 ' 仕様通り中央配置
dy = SAFE_DIS ' 個数1なので間隔不要
ElseIf ly >= 50 Then
qy = 3
Else
qy = 2
End If
' 個数は最低1
If qy < MIN_QUA Then qy = MIN_QUA
' 個数が2以上のときのみ間隔計算
If qy - 1 > 0 Then
Dim effY As Double = ly - sy * 2
If effY < 0 Then
sy = Math.Max(0, ly / 2) ' 安全補正
effY = ly - sy * 2
End If
dy = effY / (qy - 1)
If dy < 0 Then dy = SAFE_DIS
Else
dy = SAFE_DIS
End If
' 反映
Parameter("KukeiQuaY") = qy
Parameter("KukeiDisY") = dy
Parameter("KukeiStaY") = sy
'========================
' 更新 & 確認メッセージ(必要なら)
'========================
iLogicVb.UpdateWhenDone = True
InventorVb.DocumentUpdate()
'MessageBox.Show( _
' "X: 個数=" & qx & ", 間隔=" & Math.Round(dx,3) & ", 開始=" & Math.Round(sx,3) & vbCrLf & _
' "Y: 個数=" & qy & ", 間隔=" & Math.Round(dy,3) & ", 開始=" & Math.Round(sy,3), _
' "ボス&リブ設定ルール - 設定結果")
MessageBox.Show("【Copilot】ボス&リブ設定ルールの計算が完了しました。", "完了", MessageBoxButtons.OK, MessageBoxIcon.Information)
6. 作成した iLogic ルールの実行結果
iLogic ルール 実行前

iLogic ルール 実行後

7. iLogic x AI に関して現時点での考察
- プロンプトの作成に時間がかかる
- AI は常に学習している、または気まぐれなところもあるので、同じプロンプトでも結果が毎回同じとは限らない
- 指示するプロンプトによって、生成されるロジックが変わる
- 同じプロンプトでも、AI ツールによって生成されるロジックが変わる(クセがある感じ)
- どの AI ツール でも結局手直しが必要!(結局 iLogic を知っている人しか完成させられない)
- パラメータ値の事前チェックやチェックリスト等を作ってくれる為、プログラムの品質がアップする
8. まとめ
今回、シンプルなパーツモデルを使って 3D-CAD のパラメトリック変形用の iLogic ルールを自動生成させてみましたが、今の AI だと、ある程度それっぽいロジックは作ってくれるものの、そのまま使えるレベルにはならず、結局は人の手で調整が必要になります。
なので現状では「AI に骨組みだけ作ってもらって、仕上げは人間がやる」という使い方が一番現実的かもしれません。
CAD x AI の完全自動化は、まだもう少し先になりそうですね。今後の Autodesk AI に期待したいところです!


