Rust によるパラメトリック CAD(Computer-Aided Design)――パラメータ駆動型設計を実装するためのツールやライブラリを Rust で開発すること。

2026/01/28 5:36

Rust によるパラメトリック CAD(Computer-Aided Design)――パラメータ駆動型設計を実装するためのツールやライブラリを Rust で開発すること。

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

要約

Japanese Translation:

## 要約

vcad は、構築的固体幾何(CSG)を使用してプログラムでパラメトリック CAD モデルを作成できる Rust ライブラリです。  
プリミティブ(立方体、円柱など)、ブーリアン演算子(`+`、`-`、`&`)、変換、およびパターン関数を公開しています。  
例のコードでは、L 型ブラケット、ボルトサークル付きフランジドハブ、およびディスクから切り取られた放射状ベントパターンを作成する方法が示されています。生成された部品は STL に書き込むか、PBR 材質が TOML で定義された glTF(GLB)ファイルとしてエクスポートできます。

```rust
let plate = Plate { name: "plate".into(), width: 100.0, thickness: 5.0 };
plate.write_stl("plate.stl").unwrap();

すべてのジオメトリは完全にパラメトリックであり、1 つの数値を変更すると GUI のクリックや元に戻し/やり直しなしで自動的に再コンパイルされます。

基盤となる幾何エンジンは、マニフェスト性とワットレートメッシュを保証する Rust ラッパー付き C++ コアです。
テスト(

cargo test
)ではボリューム、表面積、境界箱、およびエクスポート・インポートの往復が検証されます。
cargo clippy
は型関連のエラー(例:直径の代わりに半径を渡すなど)を捕捉します。

vcad は AI コーディングエージェント向けに設計されています。API ドキュメント、クックブックレシピ、および Blender MCP 統合により、エージェントはジオメトリを生成し、エクスポートして Blender にインポートし、照明を設定し、プレビューを自動的にレンダリングできます。

ドキュメントは docs.rs で公開され、vcad.io のウェブサイトでも閲覧可能です。プロジェクトは GitHub(github.com/ecto/vcad)で MIT ライセンスが適用されています。
現在のバージョンは 0.1 であり、将来のリリースではフィレット、面取り、ねじ、およびインタラクティブな Web GUI が追加されます。

本文

私はいつもロボット用の部品――モーターマウント、センサーブラケット、ホイールハブ――を設計しています。ワークフローは毎回同じで、GUI CADプログラムを起動して1時間ほどクリックし、STL をエクスポートし、ボルトパターンが2 mm オフだと気付いて再度やり直すというサイクルです。

部品設計もファームウェアのように Rust で書きたい――型を持ち、バージョン管理できて、数値を1つ変えるだけで全体を再生成できる――と考え、vcad を作りました:

cargo add vcad

アイデア

部品は名前付きのジオメトリにすぎません。プリミティブを作り、布尔演算で組み合わせてエクスポートするだけです。

use vcad::{centered_cube, centered_cylinder, bolt_pattern};

let plate = centered_cube("plate", 120.0, 80.0, 5.0);
let bore   = centered_cylinder("bore", 15.0, 10.0, 64);
let bolts  = bolt_pattern(6, 50.0, 4.5, 10.0, 32);

let part = plate - bore - bolts;
part.write_stl("plate.stl").unwrap();

マイナスは実際の布尔差分です;

+
はユニオン、
&
は交差。演算子オーバーロードにより CSG が算術的に扱えるようになります。

上記のプレートは中央にボアがあり、4 つの角にマウント穴、6 ボルト円形パターンを持っています――12 行コードで 1 ファイルの STL を生成できます。


作れるもの

API は意図的に小さく設計されています:プリミティブ、布尔演算、変換、パターン。これが言語全体ですが、組み合わせると強力です。

両面にマウント穴のある L‑ブラケット

let base   = centered_cube("base", 60.0, 40.0, 4.0);
let wall   = centered_cube("wall", 60.0, 4.0, 36.0)
    .translate(0.0, -18.0, 20.0);
let bracket = base + wall - base_holes - wall_holes;

ボルト円形パターン付きフランジハブ

let hub     = centered_cylinder("hub", 15.0, 20.0, 64);
let flange  = centered_cylinder("flange", 30.0, 4.0, 64)
    .translate(0.0, 0.0, -10.0);
let part    = hub + flange - bore - bolt_pattern(6, 45.0, 3.0, 8.0, 32);

円盤から切り出した放射状ベントパターン

let slot   = centered_cube("slot", 15.0, 2.0, 10.0);
let vents  = slot.circular_pattern(20.0, 8);
let panel  = centered_cylinder("panel", 35.0, 3.0, 64) - vents;

すべての部品はパラメトリックです。ボルト数、半径、壁厚を変えると全体が再生成されます。クリックや Undo は不要で、再コンパイルだけで済みます。


マルチマテリアルエクスポート

STL は 3D プリンティングに適していますが、材質情報は失われます。可視化のため、

vcad
は PBR 材質を TOML で定義した glTF シーンをエクスポートします:

let materials = Materials::parse(r#"
    [materials.body]
    color     = [0.32, 0.72, 0.95]
    metallic  = 0.1
    roughness = 0.5

    [materials.antenna]
    color     = [0.95, 0.3, 0.35]
    metallic  = 0.3
"#).unwrap();

let mut scene = Scene::new("mascot");
scene.add(body, "body");
scene.add(antenna_ball, "antenna");
export_scene_glb(&scene, &materials, "mascot.glb").unwrap();

これは完全に CSG で作られたマスコットです。丸い立方体と球の交差でボディ、球で目、円柱で腕を表現しています。8 種類の材質、17 個の部品、1 ファイルの GLB。


Rust を選んだ理由

ジオメトリエンジンは多様性があり、布尔演算からウォータートレイトなメッシュを保証します。Rust バインディングにより C++ コアへのゼロコスト抽象化が実現し、演算子オーバーロードは直接多様性呼び出しへとコンパイルされます。ガベージコレクションの遅延も浮動小数点でのスクリプト層の不具合もありません。

しかし本当の理由はツールチェーンです:

  • cargo test
    でボリューム、表面積、境界箱、エクスポートのラウンドトリップを検証する 21 のユニットテストが走ります。
  • cargo clippy
    が問題を事前に捕捉し、穴がある部品になる前に警告します。
  • 型が半径と直径の混同を防ぎます。

CAD ファイルはコードです。コードにはテスト、レビュー、差分、CI が付き、STL は単なるバイト列に過ぎません。


エージェント向け設計

ほとんどの CAD ツールが無視している点:vcad は AI コーディングエージェントで使えるように設計されています。README には完全な API テーブル、コピー&ペースト可能なレシピ集、Blender MCP 統合セクションがあります。エージェントはドキュメントを読み取り、部品を生成し、エクスポートし、Blender にインポートしてカメラ配置とレンダリングまで 1 回の対話で完了できます。

この投稿のすべてのレンダーはそのように作られました:Claude が

vcad
でジオメトリを生成し、各 STL/GLB を MCP 経由で Blender にインポートし、スタジオ照明を設定して PNG をレンダリング。Blender は人間の手が触れたことはありません。

フィードバックループは次の通りです:

  1. 部品を説明
  2. コードが生成
  3. メッシュをエクスポート
  4. プレビューをレンダー
  5. 反復

すべてターミナルで完結します。


試してみる

cargo add vcad

MIT ライセンスです。初版は 0.1 で、フィレット、チャムファー、ねじ、インタラクティブ Web GUI 等の追加予定がありますが、コアは確実に構築済みです:プリミティブ、布尔演算、変換、エクスポート。クリックをやめてコードを書き始めましょう。

何か作ってみませんか?

同じ日のほかのニュース

一覧に戻る →

2026/01/28 4:20

Chrome Canary でテキスト拡大・縮小のサポートをお試しください。

## 日本語訳: --- ## 要約 Chrome Canary は、ウェブページ上でオペレーティングシステムのテキストサイズ設定を尊重するようブラウザに指示する新しいメタタグ `<meta name="text‑scale">` の利用をユーザーが選択できるようになりました。 この機能はまだ実験的で、オプトインフラグによって制御されています。 2024 年夏に CSS Working Group に提案され、CSS Fonts 5 仕様に追加されたもので、サイトがシステムテキストスケーリングを尊重するよう設計されていることを示します。 モバイルユーザーの約三分の一(Android 約 37%、iOS 約 34%)が OS テキストサイズを調整していますが、ほとんどのブラウザはこれらの設定を無視しています。 Safari と Chrome はスキップし、Firefox for Android はページズームを使用します。 グローバルサポートを有効にするとデスクトップレイアウトが壊れる可能性があります(例:フォントサイズが倍になると LinkedIn のページが崩れます)。 したがって慎重な実装が必要です。 **開発者向けベストプラクティスチェックリスト:** 1. **初期 CSS `font-size` を上書きしないでください。** デフォルトを medium(約 16 px)に設定するか、パーセンテージ値を使用します。 2. **コンテンツ要素にはフォント相対単位(em, rem)のみを使用してください。** 必要がない限り、マージン・パディング・ギャップには使用しません。 3. **開発者ツールで 320 px ビューポートに 200 % テキストスケールをシミュレートし、`env(preferred-text-scale)` 関数を使ってテストしてください。** 未解決の質問があります:大きな見出しは本文より低い倍率で拡大すべきでしょうか(例:32 px → 64 px)? ブラウザは今年後半に `<meta name="text‑scale">` をサポートする可能性がありますが、他のエンジンについては確認されたタイムラインはありません。 追加議論とドキュメントは CSS Day 2026(6 月)で予定されています。 広く採用されれば、デザインを壊すことなくアクセシビリティ設定に対応できるようになります—ただしレイアウトの崩れを防ぐためにスペーシング単位を管理する必要があります。

2026/01/28 5:35

タイムステーション・エミュレータ

## Japanese Translation: > ## 要約 > タイムステーションエミュレーターは、スマートフォンやタブレットを低周波ラジオ送信機に変換し、ほとんどの原子時計や腕時計の同期に使用できる時間信号を放送します。NTP スタイルのアルゴリズムを用いて ±24 h のオフセットを許容し、自動的に夏時間変更と DUT1 うるう秒補正(適宜)を適用することで、BPC、DCF77、JJY、MSF、および WWVB の5つの公式局をエミュレートします。ツールは WebAssembly を介してブラウザ上で完全に動作し、インストールやデータ収集は不要です。また、44.1 kHz PCM 出力以上の DAC サポートがあれば十分です。 > > パフォーマンスは内蔵スピーカーで最も優れています。有線ヘッドホンでも動作しますが、Bluetooth やオーディオフィーバー機器では搬送波のサブハーモニック変調に必要な高周波共振子を歪めることがあります。2024 年初頭時点で iOS の Safari と Android の Firefox は不具合があり、機能しません。ユーザーは希望する局を選択し時計パラメータを設定した後、電話のスピーカーを時計のアンテナに近づけます。音声波形は、搬送波周波数のサブハーモニック変調によって実際のタイムステーション放送を模倣する RF ノイズを生成するよう設計されています。 > > エミュレーターは最大ボリュームで再生すると永久的な聴覚障害を引き起こす可能性があるため、スピーカーを直接聞くことを避けるよう警告します。ホストサイトは <https://timestation.pages.dev/> であり、そのソースコード(Unicode とアイコン資産を含む)は MIT ライセンスに準拠し、適切な帰属要件が課されています。

2026/01/28 3:57

レナート・ポッタリングとクリスチャン・ブラウナーは新しい会社を設立しました。

## Japanese Translation: まとめはすでにKey Pointsリストと完全に一致しているため、変更の必要はありません。