cad-bench は v1.1.0 に更新されています。この記事は v1.0.0(2026-08-10)に対応します。Version 1.1.0 adds a fifth task, post-hoc baseline records for all five, and the repair of a defect this repository introduced into itself. A hash freeze was added to protect the five published reference drawings; because those drawings are generated from a specification and a DXF embeds a creation timestamp and fresh object identifiers, the run script regenerated them on every run and the commit that introduced the freeze rewrote all five files it was written to protect. The geometry and every score were identical, so no reported figure moved, but bytes released under a DOI were changed by the act of checking that they should not change. The rule adopted is to hash the inputs, not the outputs: a generated artefact is verified by regenerating it to a temporary file and comparing meaning — re-scoring old against new — rather than bytes. The run script no longer regenerates the reference at all, and creates it only when absent, which closed the root cause rather than the workaround of restoring the files by hand after each run. Testing that path exposed a further gap: with the reference deleted, the freeze verifier passed, so it now fails when a task has answers but no reference.
AIはもうCADを描ける。幾何を難しくしても、腕の差はもう出ない。 30本の統制実験で点差を作ったものは、たった一つ——ライブラリの既定値だった。
間取りを spec.json で完全に与える。測るのは作図能力だけで、設計能力は測らない。
こうすると正解が spec から一意に導出でき、非公開の実図面を必要としない。
「作図注記つきの正解データが手に入らない」という、このベンチが作られてこなかった最大の理由を回避できる。
描くべき線 = (その領域 − 開口) の境界。T字接合のトリムも、開口の小口も、 斜め壁のマイターも、この定義から自動的に出る。作図者の癖が一切入らない。
| 段 | 何を問うか | 状態 |
|---|---|---|
| L0 | DXFとして開けるか | 採点 |
| L1 | 幾何が健全か(壁厚・被覆率・余計な線・レイヤ規約) | 採点 |
| L2 | 寸法が本物か(DIMENSION、作図ブロック、表示される値) | 採点 |
| L3 | 意味が合うか(開口の欠き込み・建具・室名・通り芯・面積) | 採点 |
| L4 | 法規に適合するか(令23条の階段、法28条の採光・換気) | 採点 |
| L5 | 製図の作法(文字の大きさ・線種・図面枠) | 助言のみ |
L2 は「内部の計測値」ではなく「CADが実際に描く文字」を見る。 ここを見落とすと、幾何が完璧で寸法だけ100倍の図面が満点になる。実際になった。
同じ建物で座標の与え方だけを変えた2課題(T002 は数値で全部与える/T003 は通り芯記号から導出させる)を armB で5回ずつ取った。導出させたほうが安定して高かった。設計意図と逆である。
理由は被験者10名の報告が一致していた。T002 でも、壁面・マイター・T字の切り分け・小口は一つも与えていない。
壁芯と厚さだけから全部導出させている。10名全員が45度隅の伸び 60·tan(22.5°)=24.853mm を独立に手で出した。
T003 が上乗せしたのは記号の解決と中央出しで、模型が最も得意な作業だった。
そこで重い部分そのもの——offset して union して subtract する幾何——を変えた課題 T005 を作った。
| T005 で入れた不均一 | 狙い |
|---|---|
| 外壁の厚さが揃わない(W-N だけ150、他210) | 厚さの違う壁が隅で出会うと、外面と内面のマイター点が別の位置に出る |
| 同一直線上で厚さが変わる(120→200) | x=1820 で壁面が段差になる |
| 面芯の壁 | 面が通り芯にちょうど乗り、壁は片側だけに出る |
| 2:1 勾配の斜め外壁 | 45度ではないので暗記した値が効かない |
| 小口の縮退 | 開口の端が壁の端部にちょうど一致する |
課題には歯がある。壁厚を一様と誤読した実装は 79.9%(被覆率 9.2%)まで落ちる。 同じ誤読を T002 でやっても 100.0% のままなので、この落差は T005 が新しく作ったものである。
それでも分離しなかった。
| armB n=5 | 中央値 | 平均 | 内訳 |
|---|---|---|---|
| T002 座標を数値で与える | 100.0% | 98.1% | 100.0 100.0 100.0 99.9 90.8 |
| T003 通り芯記号から導出 | 100.0% | 100.0% | 100.0 ×5 |
| T005 取り合いが一様でない | 99.8% | 98.2% | 99.9 99.9 99.8 99.8 91.5 |
T005 は T002 と区別できない。分布の形まで同じ——4本がほぼ満点、1本だけ落ちる。 そして落ちた1本の原因は幾何ではない(次節)。
厚さ違いのマイターを、5本全部が正確に解いていた。外側 (3724.787, 2805)、
内側 (3555.213, 2655)、斜め壁のオフセット 105/√5 = 46.9574。
斜め壁を x+2y=9100 と立てて法線 (1,2)/√5 で押す解き方まで一致していた。
W-N と W-D の内側マイターは x=3555.213 にあり、I4 の西面 3580 より西にある。 だから I4 は北壁ではなく斜め壁の内面で斜めに切れる——西面 y=2642.606、東面 y=2582.606。 仕様の注記は一言も触れていない。5本全員がこれを危険度1位に挙げ、 「参照解が素朴に北壁で止めていたら食い違う」と書いた。 union の定義がそのまま同じ答えを出すので、参照解も一致していた。
ezdxf.new(version, setup=True) が作る EZDXF という寸法スタイルが、
既定で dimlfac=100.0 / dimtxt=0.25 を持っている。
メートルで描いてセンチで表示する図面の想定である。仕様は mm。
dimlfac を書いていない。
ライブラリが推奨する自前のスタイルを素直に使っただけ| 結果 | 使った dimstyle |
|---|---|
| DIMLFAC=100 で失敗(5件) | EZDXF(既定のまま) |
| 通過 | 自前の dimstyle を作る/既定を疑って dimlfac=1.0 に上書き |
踏まなかった腕は明示的に書いている——「EZDXF はメートル1:100前提なので、そのまま使うと 910 が 『91000』と表示されて全滅します。ここが今回いちばん怖い」。
一方で、こちらが難しくしようとして入れたもの——45度でない斜め、厚さの不一致、面芯、小口の縮退——は 一つも点差を作らなかった。模型は解析幾何を正確にやる。
T004(法規判定つき・満点177)を3腕とも5回ずつ取った。点の高低より、失敗の形のほうが実務に効く。
| 腕 | 中央値 | 最悪 | 最悪のときに何が起きるか |
|---|---|---|---|
| armA 生DXF | 94.2% | 0.0% | 6,927行のうち1行の余分な 0 でファイルごと死ぬ。すぐ分かる |
| armB 一発 | 99.6% | 91.1% | 開くし幾何も法規も完璧で、寸法だけ100倍。印字を読むまで分からない |
| armC 検証ループ | 100.0% | 97.2% | 全損も意味の誤りも出ていない |
ライブラリは破滅的な失敗を消す代わりに、静かな意味の誤りを持ち込む。 armA の 0点は、生き残った実行が全部「自分の出力を読み返してチャンク境界を自己監査していた」のに対し、 死んだ実行だけがそれをしなかった結果だった。実行環境の無い腕にとって、唯一の検証手段は読み返しである。
| 腕 | 出力トークン/回 | ツール呼出/回 | 中央値 | 最悪値 |
|---|---|---|---|---|
| armB 一発 | 107,929 | 9.2 | 99.6% | 91.1% |
| armA 生DXF | 131,505 | 20.6 | 94.2% | 0.0% |
| armC ループ | 184,379 | 57.6 | 100.0% | 97.2% |
armC は armB の 1.7倍のトークンと 6.3倍のツール呼び出しを使う。 買っているのは中央値 0.4ポイントではなく、最悪値 91.1% → 97.2% のほうである。 「たまに寸法が100倍で出る」を「出ない」に変えるために払う額、と読むのが正しい。
この穴が本当に空いているかを潰しにいった記録。
DIMLFAC/テキスト上書き」を文書化している。
しかし自動検出は無い。DIMREASSOC も QSELECT も手動起動で、手打ち上書きしか捕まえず、
DIMLFAC は構造的に見逃すDIMLFAC=100 の図面を満点で通す(実証済み)AIはもうCADを描ける。図面の中の「数字どうし」を照合する商品はある。 しかし「数字と線」を照合するものは、まだどこにもない。
このシリーズは「参照解を自分で書かない」を掲げている。通関は税関の事前教示回答、税務は国税庁の質疑応答事例が 答えを持っている。cad は違う。答えは spec から決定論で導出されるので一意だが、 「何を検査項目に選び、何点を配るか」はわたしの判断である。そこを項目単位で開示する。
| 出自 | 配点 | 根拠 |
|---|---|---|
| 法令に直接の根拠 | 39 | 建築基準法施行令23条(階段)、法28条1項・2項(採光・換気) |
| 公的チェックリストの型 | 63 | 千葉県 照査項目 4-10(壁厚を名指し)/4-5/4-7/4-11/5-1 |
| JIS A 0150 | 20 | 10章「位置の表示」=通り芯/12.4「図に対する文字の位置」=室名 |
| JIS Z 8317-1(半分) | 5 | 3.3.2 注記2「寸法の単位は長さではミリメートル」。ただし「1:1で描く」は CAD の運用慣行 |
| 根拠が見つからない | 50 | レイヤ規約・被覆率・建具符号。JIS にレイヤという概念そのものが無い(1999年の規格) |
規格に当てにいった結果、採点器の誤りが3件出た。
「通り芯は一点鎖線」は JIS A 0150 10.1.1 が「基準線は通常、実線」と定めており、規格に反していた。
「符号は丸囲み」は条件付きを必須にしていた。「文字は2.0mm以上」は
Z 8313-10 の呼び(漢字3.5/仮名2.5)のどれにも無い値で、しかも MTEXT を見ていなかった。
この3件が、L5 における腕の差をすべて作っていた。規格どおりに直すと、 12提出と参照解の計13ファイルが完全に横並びになる——L5 は腕を1ミリも分離していない。 「手書きの腕は高くつく作法を落としている」という所見は撤回した。
| 種別 | 内容 | 見つけた経路 |
|---|---|---|
| 採点器 | 空の作図ブロック1個を全寸法で共有すると L2 が満点になる(CADには何も描かれない) | 被験者の正直な自己申告 |
| 採点器 | 通り芯の一点鎖線を要求(JIS は実線が通常) | JIS A 0150 |
| 採点器 | 符号の丸囲みを必須化(JIS は条件付き) | JIS A 0150 |
| 採点器 | 文字高 2.0mm(呼びに無い値)+ MTEXT を見ていない | JIS Z 8313-10 |
| 採点器 | resolve() が壁ごとの厚さを黙って捨てる。参照解が全部既定値で描かれていた | T005 を作って発覚 |
| 採点器 | 小口の除外に全体の壁厚を使い、それより厚い壁の小口を壁面と誤分類 | 参照解が自分の検査に落ちた |
| 主張 | 「一番弱いはずの armA が一番強い」——n=1 の 100% は分布の上端だった | n=5 |
| 主張 | 「座標を与えれば転記の課題になる」——T002 も転記ではなかった | n=5 |
点数を眺めていて出たものは、一つも無い。
作図能力は飽和している。測れるのは、図面が外の世界と食い違っていないかのほうである—— 申告した建具表と図面、ライブラリの既定値と印字される文字、規格と作法。 これは cad-bench 自身の設計思想(設計と作図を分離して作図能力だけを測る)を否定している。