結論:AIが作ったDXFは、図形の数字は合っていても、「単位の宣言」がメートルになっていることがありました
ClaudeにDXFを作らせたとき、図形の数字(100mmの板なら「100」)は合っていました。ところが、ファイルの中の単位の宣言(DXFのヘッダー変数 $INSUNITS)を調べると、mmで頼んだのに、メートルと宣言されたファイルがありました。
条件は、「単位に触れずに『100mm×50mmの板』のように、数字にmmだけ付けて頼む」です。そうして作ったDXF 23本の宣言を、ファイルから機械で読みました。
| 単位の宣言 | 本数 | 内訳 |
|---|---|---|
mm($INSUNITS=4) |
16本 | 直接書かせた方式で5本、Pythonコード方式で11本 |
| 宣言なし(変数が無い) | 5本 | 直接書かせた方式のみ |
メートル($INSUNITS=6) |
2本 | 直接1本、コード1本 |
- メートルになった2本も、図形の数字は「100」のままでした。つまり、ファイルは「100メートルの板」と宣言していることになります。
- コード方式の1本は、AIが単位を設定するコードを書かなかったのが原因でした。使ったライブラリ(ezdxf)は、何も設定しないとメートルになる既定値を持っています(確認済み)。直接書かせた方式の1本(宣言がメートル)は、AIがなぜそう書いたかは分かりません。
- インチで頼んだ場合は、4回中4回とも正しく宣言されました(インチ=
$INSUNITSが1)。図形の数字(4×2、穴は直径0.4)も合っていました。
「実際のCADで開くと、どう見えるのか」は、一部しか確認できていません(後述)。数字が合っているからと安心せず、単位の宣言も見てください。
この記事について(先にお断り)
筆者は商品開発の仕事を15年以上してきた者で、2D CAD「CADなんです」を自作して販売しています。記事の最後で触れるCADなんですは、筆者自身の製品です。
実験は、AI(Anthropic社のClaude)に実際に答えさせて記録しました。記事の文章もAIの助けを借りて下書きし、筆者が内容を確認して公開しています。図面はすべて、筆者がこのために考えた架空のものです(他社や他人の図面、個人情報は使っていません)。
「単位の宣言」って何?
DXFの中には、数字が「何の単位か」を書く欄があります。
9
$INSUNITS
70
4
この「70」の次の数字が単位です。0=指定なし、1=インチ、4=mm、5=cm、6=メートルです(DXFの仕様)。CADソフトによっては、この宣言を見て、図面を挿入するときの大きさを自動で換算します。たとえば「メートルのファイル」を、mmの図面に挿入すると、1000倍の大きさになる、という動きです(これはCADの仕様からの推で、今回の実験では確かめていません)。
実験のやり方
- ⑫の実験で、Claudeに作らせたDXF 23本(板・L字金具・M6穴の板・寸法つきの板・円周8穴・三面図)を用意しました。うち「B1(L字金具)」だけは依頼文に「単位はmm」と書いたので、数を数える対象から外しました。
- 同じ依頼(A1=100×50の板)を、直接方式とコード方式で2回ずつ取り直しました(計4本を追加)。追加した4本は上の23本に含まれています。
- ezdxfでヘッダーを読み、
$INSUNITSを数えました。 - 別に、「4インチ×2インチの板、穴は直径0.4インチ、単位はインチ」と頼んで、直接方式とコード方式を2回ずつ(計4本)作らせました。
- 単位が1と6のファイルを、無料のInkscapeでSVGに書き出して、大きさが変わるかも見ました。
AIは claude -p(ツールなし=ふつうにチャットへ頼むのと同じ条件)で動かしました。
実験結果① 「mm」と書かなくても、AIは半分以上でmmを宣言した。ただし全部ではない
単位を頼まなかった23本のうち、mmの宣言は16本(約7割)でした。Pythonコード方式では12本中11本がmmでした。AIが「doc.units = ezdxf.units.MM」と、自分から書いたためです。
一方、直接書かせた方式では、11本中5本が宣言なしでした。ファイルの形式が古い(R12=AC1009)場合、宣言が省かれがちでした。宣言がなくても、図形の数字はmmのつもりで入っているので、見た目は同じですが、CADが単位を自動で換算してくれません。
実験結果② mmで頼んだのに、メートルと宣言された2本
メートルと宣言された2本は、どちらも図形の数字は正しい(100×50の板)のに、ヘッダーだけが「メートル」でした。
- コード方式の1本(三面図):AIのコードに、単位を設定する行がありませんでした。ezdxfの
new()は、何も書かないとメートル(6)が入ることを確認しています。 - 直接方式の1本(100×50の板の取り直し):AIがヘッダーに「メートル」を書いていました。理由は、答えの文章に説明がなく、分かりません。
エラーは出ません。 図面の見た目も、ほとんどのCADで同じです。でも、「メートルの図面」を、mmの図面に挿入するときに、1000倍で入るかもしれません。ここは、確かめていません(推)。
実験結果③ インチで頼むと、4回中4回とも正しく宣言された
「インチです」と頼むと、直接でもコードでも、$INSUNITSは1(インチ)でした。図形も、4×2の板に、直径0.4の穴でした。依頼文に単位を書くと、AIは単位の宣言を付けることが多い、という結果です(今回は4回中4回。mmで頼んだB1の4本も、全部4でした)。
実際のCADでは、どう見えたのか(確認できた範囲)
- Inkscape:メートルと宣言した三面図と、mmと宣言した三面図を、それぞれSVGに書き出しました。図形の大きさ(座標の範囲)は、同じでした。少なくともInkscapeは、宣言を見て1000倍にはしていないように見えます(確認したのは2ファイルだけ=推)。
- FreeCAD:読み込みの記録に「INSUNITSを見て、1単位=1mmとした」「INSUNITSがないので、設定どおり1単位=1mmとした」という趣旨のメッセージが出るところまでは見ました(FreeCAD 1.0・宣言がmmと、宣言がない場合)。しかし、図形の取り込みは自動操作が安定せず、メートルの宣言のファイルでの結果は確認できていません。
- CADなんです(筆者の製品):⑫の23本を読み込めることは確認しました。ただ、製品が単位の宣言を見て大きさを換算するかは確認していません。同梱のreadmeを検索しましたが、
$INSUNITS(単位の宣言)についての記載は見つかりませんでした。 - AutoCAD・Jw_cad:環境がなく、試していません。
AIにDXFを作らせるときのコツ(実験から)
- 依頼文に単位を書く。 「単位はmm」「単位はインチ」。今回、これを書いたファイル(B1が4本、インチ依頼の4本)は、8本中8本で宣言が合っていました。
- 作ってもらったあとに、
$INSUNITSを確かめる。 メモ帳で開いて$INSUNITSを検索し、その次の数字を見ます(4=mm)。変数が見つからないときは、宣言なしです。 - コードを書かせるなら、「単位をmmに設定する行を入れて」と頼む。 ezdxfは何も書かないとメートルになります。
- 別のCADに挿入するときは、大きさを測る。 100mmのはずの辺が、画面で何mmか確かめます。
試していないこと・限界
- Claude 1種類。再実行は2回ずつ。ChatGPTなどは試していません。
- 実際のCADでの大きさの変化は、確認できていません(Inkscapeの2ファイルのみ)。「1000倍で入る」は推です。
- 作った図面は、筆者のダミー(単純形状)です。大きな図面や、複雑な図面は試していません。
- 日本語のDXFの文字コードの話は、AIにDXFを作らせてみたでも「未試験」としています。今回も扱っていません。
AIに作らせたDXFを、自分の目で確かめる
筆者が作った2D CAD「CADなんです」は、ブラウザだけでDXFを読み込めます。⑫の23本は、すべて読み込めました。ただし、寸法(DIMENSION)とハッチ(HATCH)は読み飛ばします(readmeに記載)。単位の宣言を見て大きさを換算するかは、確認していません。単位の確認には使えません。
AIにDXFを作らせる実験は、AIにDXFを作らせてみたとAIにDXFを修正させてみたにまとめました。
製品版は2,980円の買い切りです。DWGは読み書きできません(DXFを経由します)。できないことは、製品ページと同梱のreadmeに書いてあります。
よくある質問
Q. 「宣言なし」のDXFは危険ですか?
図形の数字は入っているので、開けば見えます。ただ、単位を換算してくれるCADでは、「単位が分からない」扱いになります。どう扱われるかはCADによって違うはずです(試していません)。
Q. ChatGPTでも同じですか?
試していません。方式は同じなので、ヘッダーの確認は有効なはずです。
Q. 単位の宣言は、メモ帳で直せますか?$INSUNITS の次の数字を書き換えれば、宣言は変わります。図形の数字は変わりません(直しても、図形が拡大・縮小されるわけではありません)。
Q. 会社の図面を作らせていいですか?
会社や取引先のルールが優先です。外部のAIに送ってよいか、先に確認してください。
まとめ
- 単位に触れずに「100mm」と頼んだDXF 23本のうち、mm宣言は16本、宣言なしは5本、メートル宣言は2本
- メートル宣言の2本は、図形の数字はmmのまま。コード方式の1本は、AIが単位の設定を書かず、ezdxfの既定値(メートル)になったのが原因
- 依頼文に単位を書くと、8本中8本で宣言が合った(mm 4本、インチ 4本)
- 実際のCADでの大きさの変化は、確認できていない(Inkscapeでは変わらなかった)。数字が合っていても、宣言も見る
