08 / STEP HOLE INVENTORY
CADを開かずに、STEPから穴情報を自動取得。
CAD・設計データ|ツール開発・検証
STEPデータを直接解析し、丸穴の径、長孔の幅・全長、XYZ位置・貫通長を一覧化してCSVへ出力。CADを起動して穴を調べ、転記する手作業を減らし、確認・集計・帳票作成などの周辺業務へ活用できるかを検証しました。
今回のブラケットでは、丸穴5か所に加えて長孔6か所を確認し、一つの画面・CSVにまとめました。形状と一覧を照らし合わせながら、穴ごとの情報を確認できます。Excel帳票の生成やシステム連携は追加実装の範囲です。
01
設計情報を調べるためだけにCADを開いていませんか
取引先からSTEPを受け取り、CADを起動してファイルを開く。穴径や穴位置を確認し、Excelや帳票へ転記して、別システムにも入力する。設計変更をするわけではなく、必要な情報を調べるためにCADを開いている作業はありませんか。
- 部品ごとに穴を探し、径・位置を一つずつ確認する。
- 同じ情報をExcel、確認帳票、社内システムへ繰り返し入力する。
- 転記した値が正しいか、元の形状と照らし合わせる。
仮に1部品あたり数分の作業でも、受領する件数が増えると繰り返しの負担になります。まず見直したいのは、情報を取得するためだけに行っている確認と転記です。
02
今回試したこと:丸穴5か所・長孔6か所を一つの一覧へ
公開されているブラケットのSTEPを、CAD本体を起動せずに解析しました。立ち上がり面の丸穴5か所と、底面の長孔6か所を確認し、種類ごとの寸法・位置・貫通長を取得しました。まず丸穴の結果を、続いて長孔の結果をご紹介いたします。
| 取得できた円形貫通穴 | 穴径 | 箇所数 | 貫通長 |
|---|---|---|---|
| 周囲の小さい丸穴 | φ3.3 mm | 4か所 | 3 mm |
| 中央の大きい丸穴 | φ32 mm | 1か所 | 3 mm |
| 合計 | — | 5か所 | すべて3 mm |
一覧には穴ごとのXYZ位置も含まれます。図のH1〜H5と照らし合わせて、どの穴の値なのかを確認できます。貫通長は、穴が部品の中を通る長さです。
長孔も、幅・全長・位置まで取得
底面の長孔は、両端が半円になった、まっすぐで一定幅の貫通穴です。6か所すべてで、幅4.5 mm・全長7.5 mm・貫通長3 mmを取得しました。全長は半円の端から反対側の端まで、貫通長は穴が板を通り抜ける方向の長さです。
| 取得した長孔 | 幅 × 全長 | 長手方向 | 貫通長 |
|---|---|---|---|
| S1・S2・S5・S6(4か所) | 4.5 × 7.5 mm | 元STEPのY方向 | 3 mm |
| S3・S4(2か所) | 4.5 × 7.5 mm | 元STEPのX方向 | 3 mm |
形状と一覧を対応させ、転記前の確認をしやすく
研究ツールでは、丸穴を黄系、長孔を青緑で表示します。穴番号・内壁・一覧の行を選ぶと、対応する形状と行を強調します。「この寸法はどの穴の値か」を確かめながら、丸穴と長孔をまとめたCSVを保存できます。
例えば、受領したブラケットの穴情報を一覧にしてから担当者が形状と照合し、集計や帳票へ渡す使い方を想定しています。穴を一つずつ測って転記する工程の一部をまとめるための実装です。実際の削減時間や、御社の部品での対応率はPoCで確認いたします。
確認できたのは、丸穴5か所と長孔6か所の計11か所です。認識条件に合わない穴まで漏れなく検出した保証ではありません。画面・CSVともに「確認した数」と「部品全体の穴数は未確定」を分けて残します。
03
Before / After:確認・転記の流れをどう変えられるか
STEPから必要な情報を取り出せれば、CADを開いて穴を探し、寸法を転記する工程の一部をまとめられる可能性があります。確認結果と判定できなかった箇所を人に返す、次のような流れを想定しています。
Before
手作業で確認・転記する流れの例
- STEP受領
- CAD起動
- ファイルを開く
- 穴を探す
- 寸法確認
- Excel等へ転記
- 元データとチェック
After
STEP直接解析を組み込む運用イメージ
- STEP受領
- 解析ツールへ入力
- 穴情報を自動抽出
- CSV出力 → Excel等で利用
- 必要な部分を人が確認
目指すのは、CADを開く必要のない確認作業を減らし、担当者が例外や重要な箇所に時間を使える流れです。どこまで人の確認を残すかは品質要件に合わせて決めます。今回の検証では、作業時間の削減率や導入効果はまだ測定していません。
04
CAD本体の自動化と、STEP直接解析の使い分け
CAD自動化は、CAD内部の操作から、その外側での設計データ活用まで広げられます。 CATIA VBAやCAD APIは、CADの機能を使った設計操作に適した選択肢です。STEP直接解析は、書き出された形状から情報を取り出して、確認・集計・連携に使う選択肢になります。
| 比較する項目 | CAD本体のAPI・マクロ | STEP直接解析(今回の方式) |
|---|---|---|
| CAD操作 | 対象CADの機能をAPI経由で操作。実行形態は製品・APIによる | CAD本体を起動せず、STEPを独立した処理で解析 |
| CAD固有APIへの依存 | 対象CADのAPI・データモデルに合わせて実装 | CAD固有APIは不使用。STEP読込ライブラリと対応形状に依存 |
| 複数CAD由来のデータ | 各CADのAPIや読込機能に合わせて対応 | STEPとして共通処理を検討できる。出力元・設定ごとの確認が必要 |
| Excel / CSV / DB連携 | APIで取得した情報に連携処理を実装 | CSV出力を検証済み。Excel帳票・DB接続は追加実装 |
| CAD内部の設計操作 | 対応APIで、モデル・パラメーター・図面等を操作 | 今回の穴解析では、元CADの設計操作や履歴復元は行わない |
| 形状情報の抽出 | CAD APIが公開する形状・属性情報から取得 | STEPに含まれる形状から計測・認識。失われた情報は復元できない |
例えば、CATIAの既存マクロでSTEPを書き出し、後段のPython処理で穴一覧をCSVにする組み合わせも検討できます。CAD内部の設計処理を継続しながら、その後の転記や集計を別の処理へ切り出す考え方です。
CATIA、NX、SOLIDWORKSなどを使う案件でも、まず「CAD内でしか得られない情報」と「STEPから取り出せる情報」を分けます。今回の結果は、これらのCADや出力形式を網羅して動作確認したものではありません。複数CADへの対応可否は、実際のSTEPと出力条件で確認します。
05
設計データを外部クラウドへ送らない構成
今回の穴解析ツールはローカルPC上で動き、STEPを外部クラウドへアップロードせずに処理します。穴を見つけるために、設計データを外部の生成AIへ送る構成も使っていません。
設計データを社外へ持ち出せない業務では、処理をどこで実行し、結果をどこへ保存するかが重要です。社内PCでの利用に加え、オンプレミスや閉域環境での構成も、導入先の要件に応じて検討できます。
今回確認したのはローカルでの解析です。組織向けの認証・権限管理・監査ログや、オンプレミス・閉域環境での運用を実装・検証済みという意味ではありません。配布・更新方法も含めて、案件ごとに設計する範囲です。
06
自動認識できる範囲と、人が確認する範囲
今回取得できたのは、条件を満たす円形貫通穴と、両端が半円の直線状・一定幅の貫通長孔です。曲がった長孔、途中で幅や径が変わる段付き形状、ねじ穴、複雑な止まり穴などは対象外です。開口の縁にフィレット(丸め)があるものや、内壁の面が分割されたものも今回の長孔認識では扱いません。
判定できない形状が残る場合は、確認できた穴と未確定の状態を分けて返します。このブラケットでは「丸穴5か所・長孔6か所を確認、部品全体の穴数は未確定」です。見つけられなかった穴を「穴がない」とは扱いません。
実務では、こうした保留を人の確認へ戻す運用を組み合わせます。穴の種類・出力条件ごとに、自動取得できる範囲と、個別の確認が必要な範囲を決めておくことが重要です。単純な板の平底の止まり穴については、別の照合条件で扱える範囲があり、詳細をページ後半に記載しています。
07
実案件では、まず対象形状を絞って自動化率を測る
実案件では、まず対象形状を絞り、自動化率と残る確認作業を測ります。例えば次の順で小さなPoC(実データを使った実現性の検証)を進めます。
-
実際のSTEPを数十点確認
よく届く形状に加えて、処理が難しそうな例も選びます。CADの種類、出力設定、必要な項目、現在の作業時間を整理します。
-
自動取得可能な形状を分類
丸穴・長穴・段付き穴などを分け、今回の方法で取得できるものと、追加対応や人の確認が必要なものを整理します。
-
自動化率と例外条件を測定
目視や既存の確認結果と照合し、正しく取得できた項目、誤取得・見逃し、判定保留を分けて記録します。解析に使わなかった別のサンプルでも確認します。
-
ROIが見込める範囲を決定
実測した削減時間と月間件数から効果を見積もり、開発・保守・例外処理の費用と比較します。投資対効果が出る対象から実装範囲を決めます。
-
必要なツールへ実装
確認画面、CSV・Excel帳票、Webシステム、DB連携など、後続業務で必要な形に組み込みます。導入後の確認方法と例外時の扱いも決めます。
自動化率は、例えば「必要な情報を正しく取得し、決めた確認条件を満たす部品の割合」と定義して測ります。処理を通せた割合だけでは評価しません。最初から100%を目標に固定せず、効果が出る範囲から段階的に広げます。ここで示す手順は、今後の案件での進め方の提案です。
08
こんな相談からPoCできます
完成した仕様書がなくても、いまの作業と必要な出力が分かれば、検証する問いを絞れます。例えば、次のような相談から始められます。
| ご相談の例 | 最初に確かめること |
|---|---|
| 客先から届くSTEPから穴一覧を自動作成したい | 対象にする穴の種類、必要項目、出力条件ごとの取得可否 |
| CADを開いてExcelへ転記している作業を減らしたい | 現在の転記項目と件数、元データとの照合方法、残す確認作業 |
| STEPの特徴量を見積処理につなぎたい | 形状から得られる情報と、材質・工程・公差など別途必要な情報 |
| CADデータと社内システムを連携したい | 部品を識別する方法、CSVやAPIの受渡し形式、連携先の条件 |
| CATIAマクロでは扱いにくい周辺処理を切り出したい | マクロ内に残す操作と、STEP出力後に分離できる確認・集計処理 |
| 顧客の実データで自動化できるか先に知りたい | 数十点のサンプルによる取得可否、例外条件、追加開発の範囲 |
見積処理や既存システムへの連携は、今回の穴取得ツールに実装済みの機能ではありません。必要な判断材料と接続条件を整理し、実現性から確かめる相談例です。
09
Inefficiency Labが対応できる範囲
Inefficiency Labは、既存CADを使い続けながら、CADと業務システムの間に残る手作業を減らすための技術調査・PoC・小規模ツール開発をご支援します。
| 対応を相談できる範囲 | 支援内容 |
|---|---|
| 調査・PoC | STEP / CADデータの解析、自動化可能範囲の調査、実データによる評価と例外条件の整理 |
| 形状処理・帳票出力 | Pythonによる形状処理、Excel / CSV自動生成、確認用の小規模ツール開発 |
| 画面・システムへの組込み | Webシステム、DB・既存システム連携。環境と接続条件を確認して実装範囲を決定 |
製造業企業からの直接相談に加え、SIer・開発会社からの技術検証や部分開発にも対応します。「CADマクロの開発は自社で担当し、STEP解析とデータ連携の部分を相談したい」といった切り分けも可能です。
実際のSTEPで自動化できるか、まず確認してみませんか
「既存のCAD周辺業務を整理したい」「PoCだけお願いしたい」という段階からご相談いただけます。使用CAD、毎月の件数、いま確認している項目、欲しい出力を分かる範囲でお知らせください。
問い合わせ時点で設計データの添付は不要です。実データの共有方法は、機密条件に合わせて相談します。
10
技術詳細・検証条件
営業・業務の検討に必要な範囲は上で整理しました。再現方法や導入可否を詳しく確認する方のために、入力、数値、判定条件、取得できなかった例を残しています。
丸穴・長孔の統合結果と検証条件(v1.11.0)
v1.11.0は、丸穴と長孔の認識を画面・Python API・CLI・CSVへ統合した版です。丸穴と長孔の形状判定の閾値は変更していません。同じ公開STEP6件(5系列)を3回ずつ評価し、各入力の認識結果・測定値・診断情報は一致しました。ブラケットでは丸穴5か所・長孔6か所、ほか5件では条件を満たす行を取得できず、6件とも全体の穴数は未確定です。
長孔は、2つの開口がそれぞれ「同じ半径の半円2本+平行な直線2本」で囲まれ、同じ部品内の4つの内壁でつながっていることなどを確認します。開口境界の長さ・重心から幅・全長・位置を求める別経路でも、6長孔の両端にある計12開口を照合しました。これは同じ形状計算ライブラリ(OCCT)内での整合性確認で、元図面や別CADによる独立した精度保証ではありません。
CSVは判定を記録するsummary 1行と、丸穴5行・長孔6行です。長孔の径、丸穴の幅・全長など、該当しない寸法は空欄です。確認数11はrecognized_hole_countへ、丸穴5・長孔6は内訳へ保存し、全体数hole_countは空欄にします。画面から保存したCSVと、Python API・CLI・HTTPでの出力の一致は研究側の検証記録で確認されています。
長孔の位置は、表示用に選んだ開口の中心です。元STEPの座標をmmへ変換して保持し、自動で原点へ移動しません。S番号はこの入力内の識別用です。別ファイルとの同一性や加工方向を示すものではありません。
| 長孔 | 開口中心 X / Y / Z(mm) | 長手方向 |
|---|---|---|
| S1 | 10 / -14 / 3 | Y方向 |
| S2 | 10 / 14 / 3 | Y方向 |
| S3 | 20 / -15.5 / 3 | X方向 |
| S4 | 20 / 15.5 / 3 | X方向 |
| S5 | 30 / -14 / 3 | Y方向 |
| S6 | 30 / 14 / 3 | Y方向 |
6か所の貫通方向は(0, 0, −1)、反対側の開口中心は同じX・YでZ = 0 mmです。形状の位置・向きと測定値の関係を確かめるために記録しています。
入力2 MB以下、局所検証は最大512面、プレビューは最大256面の制限を引き継ぎます。他部品が穴をふさいでいるかは確認しません。使用した公開部品は開発時にも参照した固定入力であり、未知の一般部品に対する認識精度の評価ではありません。一括処理やExcel形式の帳票生成も今回の実装には含みません。
丸穴のみの検証記録(v1.9.0・従来結果)
Python 3.12・cadquery-ocp 7.9.3.1.1のLinux環境で検証しました。入力は出所・リビジョン・SHA-256・ライセンスを固定した公開STEP6件(5系列)で、ブラケットは1部品・42面です。研究ツールのバージョンはv1.9.0です。
局所検証では、一周した内向き円筒、両端の平面上の円形内周、径・中心・軸・面積の一致を確認します。円筒壁の内外48点と軸上5点の材料状態も補助的に調べます。面は単一の部品に属することを条件としています。
長さの判定許容差(tolerance)は0.00001 mm。局所検証では面・辺の許容差がこれを超える場合、または半径・深さがその100倍以下の場合は保留します。開口の円周長・重心による別経路の照合許容差は0.000001 mmで、観測した最大差は約7.56 × 10⁻¹⁴ mmでした。いずれも同じ形状計算ライブラリ内での照合であり、実物の測定精度や図面公差の保証ではありません。
入力上限は2 MB、局所検証は最大512面、プレビューは最大256面です。対応する単位をmmへ変換し、同じ実スケールの複数単位定義・複数部品を読み込みます。外部参照は取得しません。元CADの公称寸法・公差・設計履歴は復元せず、組立の他部品が穴をふさいでいるかも確認しません。
ネイティブの形状処理は同一プロセスで動作し、CPU・メモリの強制上限を備えた隔離実行ではありません。別OSでの動作や、業務での時間削減率をこの検証から保証するものではありません。
以下は研究ツールv1.9.0での検証記録です。
円筒面から求めた径・位置を、平面上の開口の円周長と重心から求める別の測定経路でも照合しました。両端の計10開口は、設定した照合許容差0.000001 mm以内で一致しました。ただし両経路は同じ形状計算ライブラリを使います。図面との独立照合や実物の測定精度を保証する結果ではありません。
v1.8では、穴一覧の入口を「単一のmm単位定義・単体・最大24面」などに限定していました。公開STEP6件はその条件で止まり、穴の有無を判定する段階に進んでいませんでした。ダウンロードを拒否された、という意味ではありません。
v1.9では、既存の形状検査用の読込処理を穴一覧に接続しました。対応する単位定義を参照してmmへ変換し、複数の部品を読み込みます。同じ6ファイルを再評価し、すべて読込と円形穴の検証まで進めました。
| 公開STEP | 部品数 | 面数 | 確認した円形穴 | 全体の穴数 |
|---|---|---|---|---|
| CadQuery 組立 | 2 | 9 | 0 | 不明 |
| build123d ブラケット | 1 | 42 | 5 | 不明 |
| build123d ねじ | 1 | 28 | 0 | 不明 |
| u-blox SAM(AP203) | 3 | 98 | 0 | 不明 |
| u-blox SAM(AP214) | 3 | 98 | 0 | 不明 |
| u-blox EMMY | 54 | 399 | 0 | 不明 |
各ファイルを3回ずつ実行し、判定と測定値が一致しました。ブラケット以外の5件では、条件を満たす円形貫通穴を確認できていません。これは「穴がない」という判定ではありません。EMMYは399面すべてを検査していますが、3D表示用の上限256面を超えるためプレビューを省略します。
6ファイルは5つの部品系列で、SAMの2形式は同じ系列です。今回はこの入力を見ながら実装を調整した後の検証です。未見の部品での認識精度や、実務全般への対応率は測っていません。
従来の自作15条件と公開6件によるv1.8の評価も残しています。自作の一覧取得8件・保留7件、公開6件の読込拒否という記録は、当時の読込経路の結果です。今回の結果と混ぜずに公開しています。
円筒面があるだけでは穴と数えません。局所検証では、一周した内向きの円筒壁、両端の円形開口、面のつながり、壁の内外の材料状態などを照合します。長孔の半円部分や、ねじ・突起の外側の円筒を円形穴として数えないためです。
| 判定 | 一覧に載せるもの | 全体の穴数 |
|---|---|---|
| 一覧取得 | 板全体と穴の再構成が一致した全穴 | 確定値。穴なしなら0 |
| 部分確認 | 条件を満たした円形貫通穴だけ | 不明 |
| 形状保留・読込拒否 | 判定理由 | 不明 |
このv1.9.0の記録は丸穴5か所のみを対象にしたものです。長孔6か所を加えた現在の結果は、上のv1.11.0の記録に分けて示しています。どちらも部品全体の穴数を確定した結果ではありません。
CSVは先頭のsummary行に判定状態を保存し、その後にhole行を並べます。部分確認ではrecognized_hole_countに5、hole_countは空欄です。部品番号・元ファイル名・SHA-256も記録します。
段付き穴の内部段差を開口と誤認しないため、開口面の外周まで円形になっている場合も保留します。この規則ではワッシャー形状なども対象外になります。単純な長方形の板にある平底の止まり穴は、従来どおり板全体の再構成が一致した場合に扱います。
| 今回確認したこと | 今回確定していないこと |
|---|---|
| 公開6件の読込と解析、ブラケットの円形貫通穴5個 | 一般部品での認識精度、未対応形状を含む全体の穴数 |
| 両端が平面に開く完全な円筒壁の局所検証 | 段付き穴、円錐底、ねじ穴、分割された円筒面 |
| 2 MB以下、対応単位をmmへ変換、局所検証は最大512面 | 未対応の単位表現、大規模形状、他部品による穴のふさがり |
丸穴5か所のXYZ位置・軸方向・貫通長
| 穴 | 径 mm | 開口X mm | 開口Y mm | 開口Z mm | 深さ mm |
|---|---|---|---|---|---|
| H1 | 3.3 | 3 | -15.5 | 14.5 | 3 |
| H2 | 3.3 | 3 | -15.5 | 45.5 | 3 |
| H3 | 32 | 3 | 0 | 30 | 3 |
| H4 | 3.3 | 3 | 15.5 | 14.5 | 3 |
| H5 | 3.3 | 3 | 15.5 | 45.5 | 3 |
単位はmmです。X・Y・Zは元のSTEPでの位置を表し、図のH番号と対応しています。
座標はmmへ変換した元STEPの座標です。穴の軸方向は5個とも(−1, 0, 0)。2つの開口のうち表示用の規則で選んだ側を示しており、加工方向を推定した値ではありません。
検証用STEP・CSV・JSONと操作手順
同じ部品で結果を確かめたい方向けに、STEPファイルと測定結果を公開しています。ZIPの入力6件は従来と同じもので、このブラケットと出所・ライセンスを含みます。丸穴のみのv1.9.0の結果は従来記録として残し、丸穴・長孔を統合したv1.11.0の結果は上のリンクから確認できます。
公開STEP6件と出所・ライセンス(ZIP) / 従来の丸穴検証6件の結果CSV / 従来の丸穴測定値・条件JSON
CadQueryとbuild123dにはApache-2.0、build123dにはNOTICE、u-bloxには配布元の許諾原文と出所記録を同梱しています。研究ツール本体はPolyForm Noncommercial 1.0.0で、商用利用は別契約です。各利用条件をご確認ください。
実験方法と制限 / 画面とCLIの操作手順 / 出所・固定リビジョン・ライセンス
技術担当の方向け:再実行コマンド
Python 3.12・cadquery-ocp 7.9.3.1.1のLinux環境で確認しました。研究リポジトリを取得し、v1.11.0の固定コミットに切り替えたディレクトリで実行します。
python -m pip install -e ".[geometry]"
python -m research_notes.unified_hole_benchmark --output-dir output/unified-check --repeats 3
python -m research_notes.hole_inventory fixtures/public-step-corpus/sources/build123d_bracket.step --public --output-dir output/bracket-holes
python -m research_notes.cad_web
画面は http://127.0.0.1:8767/holes です。CLIはholes.csv・inventory.json・holes.svgを出力します。完全な一覧取得は終了コード0、部分確認・保留・拒否は2です。部分確認でも測定した行は保存されます。--publicを付けないCLIは、v1.8の厳しい読込条件を維持します。
CSVはUTF-8 BOM付きです。v1.11.0ではブラウザーの保存操作で取得したCSVが、検証用CSVとバイト単位で一致したことも確認されています。--public --circular-onlyを指定すると、丸穴だけの測定範囲を選べます。
Python APIの利用例
Pythonからも同じ解析とCSV出力を呼び出せます。次は研究リポジトリ内での利用例です。部分確認数11と、全体数未確定を分けて受け取ります。
from pathlib import Path
from research_notes.hole_inventory import analyze_step, inventory_csv
source = Path("fixtures/public-step-corpus/sources/build123d_bracket.step")
result = analyze_step(source.read_bytes(), source.name, inspection=True)
Path("bracket-holes.csv").write_bytes(inventory_csv(result))
print(result["recognized_hole_count"], result["hole_count"]) # 11, None
CAD APIの公式参考資料
CAD本体を操作するAPI・マクロの説明は、各社の公式資料も参照しています。今回のSTEP解析の対応範囲は、上記の実測記録で確認してください。