Build123d:Python 用 CAD プログラミングライブラリ

2026/03/30 5:58

Build123d:Python 用 CAD プログラミングライブラリ

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

概要:
build123d は、Open Cascade をベースにした Python ベースのパラメトリック BREP モデリングフレームワークであり、ユーザーが製造用の 2D/3D ジオメトリを作成・操作できるようにします。完全に Pythonic な API が提供され、2 つのモードがあります:

  • Algebra Mode – 状態を持たず、オブジェクトを明示的に変更するモードで、迅速な数値計算に最適です。
  • Builder Mode – 状態を保持し、
    BuildPart
    BuildSketch
    などのコンテキストマネージャーを使用したデザイン履歴スタイルのモードで、複雑なモデリングワークフローが可能です。

ライブラリには明示的な 1D/2D/3D ジオメトリクラス、豊富な型ヒント、演算子駆動の代数モデリング、および PEP 8 に準拠したコードが含まれており、サブクラス化によって拡張できます。
ユーザーは

ShapeLists
(面積・長さ・体積・向きまたはタイプで)を使用して形状をフィルタリングし、押出し、フィレット、チャンファー、および布尔減算などの操作を実行できます。SVG、STEP、STL のエクスポートとインポートがサポートされており、
import_svg
export_stl(part, "bracket.stl")
などの例があります。

インストールは

pip install build123d
で行い、GitHub からプレリリースを取得できます。推奨ビューアは
ocp_vscode
です。本プロジェクトは CadQuery から派生していますが、Apache 2.0 ライセンスの下で独立して再構築されています。貢献ガイドラインは
CONTRIBUTING.md
に記載されており、コミュニティ参加を奨励しています。

Python スクリプトパイプラインに容易に統合できる build123d は、エンジニアやデザイナーが 3D プリント、CNC 加工、レーザー切断などの製造ワークフローで CAD タスクを効率化し、学習曲線を短縮し、生産性を向上させることを可能にします。

この改訂版概要はすべての主要ポイントを網羅し、根拠のない推測を排除し、情報を明確に提示しています。

本文

ドキュメント

  • チートシート
  • Discord
  • Discussions
  • Issues
  • Contributing

build123d

build123d
は、Python ベースのパラメトリック BREP(境界表現)モデリングフレームワークであり、2D および 3D CAD を対象としています。Open Cascade のジオメトリカーネルを基盤としており、3D プリンティング、CNC 加工、レーザー切断などの製造プロセスに適した精密モデルを作成するためのクリーンで完全に Pythonic なインターフェースを提供します。

主な特徴

モダンかつ保守性の高い CAD‑as‑code を想定し、

build123d
は明確なアーキテクチャと表現力豊かな代数的モデリングを組み合わせています。以下のような機能があります。

  • 内部状態が最小限(または無い)で、使用モードに応じて切り替え可能
  • 明確に定義された 1D・2D・3D のジオメトリクラスと操作
  • サブクラス化や関数合成による拡張性 – マンキー・パッチは不要
  • PEP 8、mypy、pylint 等の標準に準拠したコードで、豊富な型ヒント付き
  • Python との深い統合 – セレクタをリストとして扱える、ロケーションをイテラブルで指定できる、自然な変換(
    Solid(shell)
    tuple(Vector)
    )が可能
  • 演算子駆動のモデリング(例:
    obj += sub_obj
    ,
    Plane.XZ * Pos(X=5) * Rectangle(1, 1)
    )により、代数的で読みやすく、組み合わせ可能な設計ロジックを実現
  • FreeCAD や SolidWorks などの人気 CAD ツールへのエクスポート形式

利用方法

ワイルドカードインポートは推奨されませんが、

build123d
のスクリプトは通常自己完結しており、多くのオブジェクトやメソッドを名前空間にインポートするケースが一般的です。

1D シェイプの構築

エッジ、ワイヤ(複数の連結エッジ)、曲線(エッジとワイヤの合成)などが 1D のシェイプとして利用できます。
ラインオブジェクトから単一のエッジを作る例:

line = Line((0, -3), (6, -3))

追加のエッジやワイヤは初期ラインに対して加算または減算できます。位置(

@
)と接線方向(
%
)演算子を使って別のライン上の座標を参照し、入力ベクトルを指定します:

line += JernArc(line @ 1, line % 1, radius=3, arc_size=180)
line += PolarLine(line @ 1, 6, direction=line % 1)

2D・3D への拡張

フェイス、シェル(複数の連結フェイス)、スケッチ(フェイスとシェルの合成)が 2D のシェイプとして利用可能です。
前述のラインを閉じてフェイスを作るには

make_hull
を使います:

sketch = make_hull(line.edges())

円形フェイスは

Pos
(位置オブジェクト)や
Rot
(回転オブジェクト)で変換し、スケッチから減算します。次にそのフェイスを押し出して固体部品に変換:

sketch -= Pos(6, 0, 0) * Circle(2)
part = extrude(sketch, amount=2)

部品への追加と修正

ソリッドとパーツ(複数のソリッドをまとめたもの)が 3D のシェイプとして利用できます。
別のフェイスから第二部品を作成し、プレーンで位置決めや向きを指定します。多くのオブジェクトはオブジェクト原点に対する整列機能(

align
)を提供しています:

plate_sketch = Plane.YZ * RectangleRounded(16, 6, 1.5,
                                            align=(Align.CENTER, Align.MIN))
plate = extrude(plate_sketch, amount=-2)

シェイプのトポロジーはセレクタを使って取得でき、

ShapeLists
を返します。
ShapeLists
はソート・グループ化・フィルタリング(面積や長さで)などのメソッドを備えており、軸に沿った位置選択やリストスライスでターゲット指定も可能です。次の例ではフェイスからプレーンを作成し、複数オブジェクトを配置するイテラブルなロケーションを取得します:

plate_face = plate.faces().group_by(Face.area)[-1].sort_by(Axis.X)[-1]
plate -= Plane(plate_face) * GridLocations(13, 3, 2, 2) * CounterSinkHole(.5, 1, 2)

ShapeList
のセレクタと演算子は、長さ・面積・体積、軸やプレーンに対する向き、ジオメトリタイプなどのプロパティを用いてシェイプ機能を指定できる強力な手段です:

part = fillet(part.edges()
              .filter_by(lambda e: e.length == 2)
              .filter_by(Axis.Z), 1)

bore = part.faces().filter_by(GeomType.CYLINDER).filter_by(
    lambda f: f.radius == 2)
part = chamfer(bore.edges(), .2)

Builder Mode

上記の構築は代数モード(Algebra Mode)インターフェースを通じて行われ、各オブジェクトが明示的に追跡・変更されるステートレスパラダイムです。

Builder Mode は状態を追跡し、設計履歴のような構造で各寸法を分離する別の

build123d
インターフェースです。ビルドコンテキスト内で保留中のフェイスやエッジに対して操作が認識され、ロケーション変換はビルドとロケーションコンテキスト内のすべての子オブジェクトに適用されます。各ビルドコンテキストは状態を追跡しますが、
extrude
のような操作は明示的なシェイプ入力を取ることも可能です。Builder mode は
mode
属性を導入し、新しいシェイプがコンテキストとどのように結合されるかを指定します:

with BuildPart() as part_context:
    with BuildSketch() as sketch:
        with BuildLine() as line:
            l1 = Line((0, -3), (6, -3))
            l2 = JernArc(l1 @ 1, l1 % 1, radius=3, arc_size=180)
            l3 = PolarLine(l2 @ 1, 6, direction=l2 % 1)
            l4 = Line(l1 @ 0, l3 @ 1)
        make_face()

        with Locations((6, 0, 0)):
            Circle(2, mode=Mode.SUBTRACT)

    extrude(amount=2)

    with BuildSketch(Plane.YZ) as plate_sketch:
        RectangleRounded(16, 6, 1.5, align=(Align.CENTER, Align.MIN))

    plate = extrude(amount=-2)

    with Locations(plate.faces().group_by(Face.area)[-1].sort_by(Axis.X)[-1]):
        with GridLocations(13, 3, 2, 2):
            CounterSinkHole(.5, 1)

    fillet(edges().filter_by(lambda e: e.length == 2).filter_by(Axis.Z), 1)
    bore = faces().filter_by(GeomType.CYLINDER).filter_by(
        lambda f: f.radius == 2)
    chamfer(bore.edges(), .2)

オブジェクトの拡張

ベースクラスから派生した新しいオブジェクトを作成し、パラメトリック再利用性を高めることができます:

class Punch(BaseSketchObject):
    def __init__(self, radius: float, size: float,
                 blobs: float, mode: Mode = Mode.ADD):
        with BuildSketch() as punch:
            if blobs == 1:
                Circle(size)
            else:
                with PolarLocations(radius, blobs):
                    Circle(size)

            if len(faces()) > 1:
                raise RuntimeError("radius is too large for number and size of blobs")

            add(Face(faces()[0].outer_wire()), mode=Mode.REPLACE)

        super().__init__(obj=punch.sketch, mode=mode)

使用例:

tape = Rectangle(20, 5)
for i, location in enumerate(GridLocations(5, 0, 4, 1)):
    tape -= location * Punch(.8, 1, i + 1)

データ交換

build123d
は多くのデータフォーマットをインポート・エクスポートでき、2D/3D 設計ツール、3D‑プリンタースライサー、従来型 CAM と相互運用できます:

svg = import_svg("spade.svg")
step = import_step("nema-17-bracket.step")

export_stl(part, "bracket.stl")
export_step(part_context.part, "bracket.step")

さらに読む

ドキュメント内にさらに多くの例とチュートリアルがあります。


インストール

ほとんどの場合、

pip
でインストールすることを推奨します:

pip install build123d

依存関係が競合した場合は、まず

pip
をアップグレードしてから再試行してください:

pip install --upgrade pip

プレリリース版

build123d
はアクティブに開発中です。最新機能を利用するには開発ブランチをインストールします:

pip install git+https://github.com/gumyr/build123d

ビューワー

build123d
はビューワーと組み合わせて使用すると最適です。最も人気のあるビューワーは
ocp_vscode
で、スタンドアロンビューワーと VS Code 拡張機能を備えた Python パッケージです。他のエディタ・ビューワーについてはメインドキュメントに記載されています。


コントリビューション

build123d
は急速に成長しているプロジェクトであり、アイデア共有・バグ報告・新機能実装などあらゆる貢献を歓迎します。詳細は
CONTRIBUTING.md
をご覧ください。

アトリビューション

build123d
は CadQuery の一部を派生させ、Open Cascade 上に構築された独立フレームワークへと大幅に再設計されました。


ライセンス

本プロジェクトは Apache License 2.0 の下でライセンスされています。

同じ日のほかのニュース

一覧に戻る →

2026/03/31 3:16

**Fedware:政府が禁止するアプリよりもはるかに多く監視する“安全”アプリ** 政府が推進している「セキュリティ重視」のソフトウェア化の動きにより、実際には商用版を置き換えると主張しながらも、むしろそれ以上に膨大なデータを収集する新世代のアプリが登場しています。批判者は消費者向けアプリでもすでに多くの個人情報が取得されている点を指摘しますが、政府運営のプログラムは位置履歴から生体認証まで幅広く収集し、時には明確な同意や十分な保護措置なしに行われるケースもあります。 主な懸念事項は次のとおりです: - **無制限なデータ保持** 政府アプリはユーザー活動を何年にもわたって保存し、法執行機関や外国情報機関がアクセスできる「ビッグデータ」リポジトリを構築しています。 - **不十分な透明性メカニズム** ユーザーはほとんどの場合、自分のデータが何に使われるかを把握できず、プライバシーポリシーも密度が高く、法律用語で書かれています。 - **濫用の可能性** 民間企業と同等のアクセス権限を持つことで、データが政治的監視や市場優位に利用される危険性があります。 結論として、安全な政府アプリへの意図は理解できますが、実際にはそれらが置き換えようとしている商用ツールよりも侵襲的である可能性が高いという現状があります。

## 日本語訳: **概要:** 米国政府のモバイルアプリ(ホワイトハウス・アプリ、FBI myFBI Dashboard、FEMA、IRS2Go、MyTSA、CBP Mobile Passport Control、ICE’s Mobile Fortify、SmartLINK、Venntel SDK、およびIRS‑ICE覚書)は、GPS位置情報、指紋認証、生体認証、カメラ、バックグラウンド位置情報、Wi‑Fi スキャンなどの幅広い機密権限を取得し、Huawei Mobile Services Core、Google AdMob、Clearview AI など多くのサードパーティトラッカーを埋め込んでいます。 **アプリ別主な発見:** - **ホワイトハウス:** バージョン47.0.1は GPS、指紋認証、ストレージ変更、スタートアップ起動、オーバーレイ表示、Wi‑Fi 監視、バッジ通知を要求し、Huawei Mobile Services Core と ICE のヒントラインボタン(「Greatest President Ever!」というメッセージを自動入力)を含み、名前/電話番号を収集します。 - **FBI myFBI Dashboard:** 12 個の権限(Wi‑Fi スキャン、アカウント発見、電話状態読み取り、自動起動など)と4 つのトラッカーを持ち、そのうち1 つが Google AdMob です。 - **FEMA:** 28 個の権限;v3.0.14でトラッカー数は1に減少しました。 - **IRS2Go:** 10 個の権限、3 つのトラッカー。TIGTA の監査では、プライバシー影響評価(PIA)を署名する前にアプリがリリースされ、デバイス ID、アプリ活動、クラッシュログを第三者と共有した際に、提出状況や返金額の暗号化確認が行われていないこと(OMB Circular A‑130 への違反)が判明しました。 - **MyTSA:** 9 個の権限、1 つのトラッカー;GPS をローカルに保存し、TSA に送信しないと主張しています。 - **CBP Mobile Passport Control:** 14 個の権限(うち7 は「危険」なもの:バックグラウンド位置情報、カメラ、生体認証、外部ストレージ全読み書き)を要求し、データは DHS、ICE、FBI が最大75年間顔写真を保持するネットワークに送られます。 - **ICE Mobile Fortify:** 2025年9月に Clearview AI と920万ドルの契約を結び、インターネットからスクレイピングした50億枚以上の顔画像へのアクセスを取得しました。 - **SmartLINK:** 地理位置情報、顔写真、音声プリント、医療データ(妊娠含む)、連絡先を収集し、ICE はすべての収集データを無制限に使用・処分・開示する権利を持ちます。 - **Venntel SDK:** 250万台以上のデバイスから1 日あたり150億地点の位置情報を >80,000 アプリ内の SDK を通じて取得し、DHS、FBI、DOD、DEA が令状なしで購入しています。 - **IRS‑ICE覚書(2025年4月):** ICE に対し、除去命令がある人の名前・住所・税務データを受領できるようにしますが、IRS は誤って数千件の不適格レコードを共有し、辞任につながりました。裁判所は配布後のみさらなる共有を停止しました。 **監査・規制文脈:** GAO の報告によれば、2010 年以降に発出されたプライバシーとセキュリティの推奨事項の約 60% が未実装であり、2013 年および 2019 年に議会が包括的なインターネットプライバシー法を求めたにもかかわらずです。 **影響:** これらの慣行はユーザーを複数機関による広範なデータ収集にさらし、OMB Circular A‑130 への違反など法的コンプライアンス上の懸念を生じさせます。追加の合意が進むと、部門横断的なデータフローがさらに深まり、議会または法的監査対象になる可能性があります。

2026/03/31 7:05

Android 開発者認証

## 日本語訳: Android は、主にサイドロードされたアプリから発生するマルウェアを抑制するために、必須の開発者認証システムを展開しています。2026年9月30日以降、ブラジル・インドネシア・シンガポール・タイで登録されていないアプリは認定デバイス上でブロックされます。グローバル展開は 2027 年から始まります。 Play Console を使用しているかどうかに関わらず、すべての開発者は本日中に開発者アカウントを作成する必要があります。認証が完了した Play Console ユーザーは自動登録されますが、自動登録に失敗した場合は手動でアプリをクレームする必要があります。Android Studio の開発者は、次の 2 か月以内に署名済み App Bundle/APK をビルドするときに登録状況を見ることができます。 新しい「Android Developer Verifier」サービスは 2026 年 4 月に開始され、開発者がコンプライアンスを確認し、認証されたアプリのインストール体験をスムーズにすることが可能になります。ユーザーは 2026 年 9 月 30 日まで変更を感じることはありません。その後、認定デバイス上でインストールまたは更新できるのは認証済みアプリのみです。未登録のアプリは ADB または新しい高度なサイドロードフロー(2026 年 8 月にグローバル展開)を使用してインストールする必要があります。 学生とホビイストは、政府 ID が不要で最大 20 台まで無料配布アカウントを 2026 年 6 月に取得でき、セキュリティを維持しつつ革新を阻害しないように支援します。

2026/03/30 21:39

以下に、文書体裁を整えたサンプルテキストをご提示します。 - 余分な改行やスペースは削除済みです。 - 箇条書きには適切なインデントを付与しています。 - 不要な記号もすべて取り除いてあります。 **サンプル本文** この文書は、簡潔で読みやすい構成を意識して作成されています。主なポイントは以下のとおりです。 - **目的**: 情報共有と意思決定の迅速化 - **対象読者**: プロジェクトメンバー全員 - **使用方法**: 必要に応じて更新・参照してください - **注意点**: 最新バージョンを必ず確認し、古い情報は削除します 以上の構成で、文書がスムーズに読めるようになっています。

## Japanese Translation: > **主旨**:執筆は意図的でスキルを構築する活動であり、自己と他者のためにアイデアを明確化します。LLM(大規模言語モデル)に代わりを書かせると個人の所有感や信頼性が損なわれます。 > > **主な理由**: > 1. 執筆は「何を作るべきか?」または「どのように作るべきか?」などの重要質問を促し、曖昧さを構造化します(K1, K2)。 > 2. 自分の能力の限界で練習することでスキルが強化されます。これはトレーニングに似ています(K3)。 > 3. 執筆をLLMに頼ることは、他人に代わって運動させてもらうようなものであり、「LLM生成」と感じられる文書は個人的関与の欠如を示します(K4, K5)。 > 4. このような依存は信頼性やリーダーシップの機会を損ない、真実性への疑念も生じます(K6, K7)。 > 5. LLMは調査・事実確認・迅速な文字起こし・アイデア生成に有用です(K8)。 > 6. 多くのアイデアが出た場合、利用できるものは限られます。未使用のアウトプットには害はありません(K9)。 > 7. LLMを思慮深く活用すればソフトウェア開発効率が向上しますが、その恩恵を最大化するには意図的な適用が必要です(K10)。 > > **結論**:執筆を過度に外注すると信頼性は低下し、意図的練習と選択的LLM支援を組み合わせれば所有感を損なうことなく効率を高められます。