9月12日、ModelRiftが「CadQuery vs OpenSCAD for AI-generated functional parts」と題した記事を公開した。自然言語から3Dプリント用部品を自律生成するプラットフォームを開発する同社が、AIエージェントに部品生成を任せる際の2大コードファーストCADツール——CadQueryとOpenSCAD——を実験的に比較した結果だ。
結論から言えば、6部品全て印刷可能な状態で完成し、能力差はほぼなかった。しかし「どう失敗するか」は正反対だった——そしてその差が、無人自動生成では致命的な意味を持つ。
背景:なぜ今、AIとコードファーストCADなのか
コードファーストCADとは、GUIではなくプログラムコードで形状を記述する設計手法だ。LLM(大規模言語モデル)はコード生成を得意とするため、AIエージェントによる部品自動生成との相性が良く、近年急速に注目を集めている。
ModelRiftはこれまでOpenSCADを採用してきたが、「本当にそれが最善か」を定期的に検証する方針を持つ。今回の比較相手はCadQuery——PythonベースのCADライブラリで、業界標準の幾何カーネルであるOpenCASCADE(OCCT)のB-rep(境界表現)方式上に構築されている。問いは明確だ。「人間が監視していない状態で、AIエージェントが正しく印刷可能な部品を生成できるのはどちらか」。
セットアップ
- モデル: Claude Opus 5(コンテキスト100万トークン)をClaude Code経由で使用
- ツールバージョン: CadQuery 2.8.0(Python 3.14)、OpenSCAD 2026.06.12(Apple Silicon Mac上)
- エージェント制約: 最大12バージョン、失敗を偽装禁止、エラーは原文のまま報告
OpenSCAD側は同社が公開しているopenscad-skillを使用。CadQuery側はその構造をそのまま移植した。
重要なのは検証方法だ。最終的なSTLファイルはツールの自己報告を信用せず、独自パーサーで三角形数・バウンディングボックス・体積・ウォータータイト性・非多様体エッジ・反転面・接続コンポーネントを直接検査した。この判断が後に決定的な意味を持つ。
3つのテストタスク
- T1(簡単): 壁掛けシェルフ用Lブラケット。三角ガセット・皿頭ネジ穴・内角フィレット付き
- T2(中難度): 50×26mm PCB向け2パーツスナップフィットエンクロージャ。M2ポスト4本、USB-Cカットアウト、スナップ付きリッドが実際にフィットすること
- T3(難): M24×2ねじ付きホースバーブアダプタ。六角フランジ、真のらせん状ねじ山(積み重ねリング禁止)、12mm内径ホース用バーブ3本、貫通チャンネル
結果サマリー
| 項目 | OpenSCAD | CadQuery |
|---|---|---|
| バージョン数(合計) | 11 | 11 |
| コード行数 | 473 | 573 |
| ツールが検出したエラー | 2 | 5 |
| サイレントな誤ジオメトリ | 5 | 4 |
| 所要時間(合計) | 2061秒 | 2406秒 |
| トークン消費 | 297k | 347k |
| ジオメトリ再計算 | 16ms | 1.9秒 |
| 最終STL判定 | 全Clean | 全Clean |
「Clean」とは、ウォータータイト・単一接続コンポーネント・非多様体エッジゼロ・反転面ゼロを意味する。6部品全てが印刷可能で完成した。能力差はほぼなかった。差が出たのは「どう失敗するか」だった。
最も重要な発見:失敗モードが正反対
CadQueryは大声で早期に失敗する
T1でCadQueryのエージェントは .fillet(3.0) を実行した際に BRep_API: command not done というエラーに当たった。エッジも半径も特定しない貧弱なメッセージだが、例外でビルドは止まる。止まった部品は誤って出荷されない。
OpenSCADはサイレントに、遅れて失敗する
T2でOpenSCADは約45回の呼び出しにわたってエラーも警告も出さず、マウントポスト消去・スロット位置ずれ・破損エクスポートを「No Error」と報告し続けた。「無人生成においてサイレントな成功は最もコストの高い失敗だ」と記事は指摘する。
T3でのCadQuery:外観は完璧、中身は空洞

CadQuery T3バージョン1。ねじ部がコアなしで浮遊する状態
T3でCadQueryが生成したねじ部品は、外観上は完璧に見えた。エージェントも4回レンダリングを確認して気づかなかった。しかし union() がコアシリンダーをサイレントに廃棄していた。らせん曲線上での完全接線が原因で、OCCTが無言でソリッドを削除したのだ。それを検出したのは体積測定だった。期待値10323mm³に対して7073mm³——しかもその破損部品は valid=True・solids=1 を報告していた。
OpenSCADも同様の問題を抱える。T2でManifoldバックエンドが Status: NoError を返したSTLには、非多様体エッジ4本・ゼロ面積三角形60枚が含まれていた。どちらのツールの自己報告も最終判定にはならない。
CadQueryはジオメトリに問い合わせができる
CadQueryにはB-rep上でジオメトリを直接クエリできる能力がある。T1のエージェントは皿穴の半角をB-repから読み取って90度・直径9mmを証明し、それをアサートに組み込んでビルドのたびに再検証した。OpenSCADにはこの手段がなく、エージェントはバイナリSTLパーサーを独自に実装して測定を行った——モデル本体と同規模のコードになり、しかもエクスポート後のメッシュしか見られない。
T3でのOpenSCAD:1バージョン、43ms、ライブラリなしで完成
OpenSCADはスイープ操作を持たないため、エージェントは1回転96セクション・生の頂点と面の演算でらせんを記述した。ISO歯形が1ピッチ内に収まる問題(連続するルートフラットが共面になり union が壊れる古典的な罠)も事前に予測し、掃引プロファイルをマイナー半径以下に沈めてコアと交差させることで回避。ガードレールは一切ない状況で、1発で正解した。
まとめ:どちらを選ぶかより「検証」が鍵
記事が導き出した主な知見を整理する。
- レンダリングは役に立たない: 印刷を台無しにするような欠陥は体積・角度・干渉テストといった数値が発見した
- 速度差は実用上ノイズ: 再計算は30〜100倍の差(16ms vs 1.9秒)があるが、モデル推論が支配するエージェントループ内では誤差の範囲
- 無人生成ではCadQueryのアサート機構が強力: ただしサイレントなBoolean失敗には注意が必要
- どちらのツールの自己報告も信頼してはならない: 独立したメッシュ検証が必須
なお、記事によればModelRiftは現時点でOpenSCADの採用を継続しつつ、CadQueryのクエリ能力を組み合わせる方向を模索しているという。どちらかを選ぶ前に、両ツールの外側に独立した検証レイヤーを置く設計こそが、無人部品生成の現実解のようだ。

両ツールの完成したねじ断面。クレストが半ピッチずれているのが真のシングルスタートらせんの証明
詳細はCadQuery vs OpenSCAD for AI-generated functional partsを参照していただきたい。