Web開発
Show HN: ブラウザで動くKiCad
Show HN: KiCad in the Browser (demo.pcbjam.com)
要約
Emergence Engineeringは、PCB設計ソフトウェアKiCadをWebブラウザ上で動作させるプロジェクト「PCBJam」のMVP(Minimum Viable Product)を発表しました。EmscriptenやWebGLなどの技術を駆使し、ブラウザ上での動作の遅延やバグといった多くの課題を克服し、ネイティブに近い体験を目指しています。将来的には、コラボレーション機能やAI連携などを追加した商用製品化も視野に入れています。
全文翻訳
KiCad、PCB EDAスイートがブラウザで動作するようになりました。リンク先で試すことができ、デモプロジェクトがあるか、独自のプロジェクトを持ち込むこともできます。Firefoxが最適で、Chromeは良好、Safariは「動作中」です。
私たちはEmergence Engineering、ハンガリーの開発会社で、主にリッチテキストエディタやCRDTsを扱っています。PCBJamは私(CTO、元電気技師のViktor)の趣味のプロジェクトとして始まりましたが、時間が経つにつれてより多くのエネルギーを注ぎ込み、頭の中で製品の形ができてきました。ここ数ヶ月でこのプロジェクトに少し集中するようになり、これが最初のMVP的な成果です。
このプロジェクトは、たくさんの楽しみ、たくさんの学び、そして数えきれないほどの改善をもたらしました。
- PCBキャンバスのOpenGLコードをWebでエミュレートする方法があるはずだと考えました。そして、その方法はたくさんありましたが、どれも非常にバグがありました。適切な中間デバッグステップを追加すれば、KiCadのGraphics Abstraction Layerと連携するWebGLコードを書く方が速いことがわかりました。私(Claudeと共に)は各ステップで機能を実装し、ネイティブと比較しましたが、アプリが初めてロードされたときに動作しました。それ以前は、奇妙なエミュレーションバグを数週間かけて追いかけていました。
- 古いwxWidgetsのWebポートが出発点として役立ち、KiCadが必要とするレベルに引き上げるのは長い(そしてまだ進行中の)タスクです。ahilssに感謝します!
- Web上のPthreads: Emscriptenを使用すると、マルチスレッドアプリケーション(DRC、ソフトウェア3Dレンダラーで使用)をポートできます。Emscriptenの多くの機能(Asyncify、Pthreads、ネイティブ例外)は互いに競合していますが、可能です。
- Asyncifyとネイティブ例外: Asyncify(WASMコードを中断させてJSランドを呼び出すために使用され、WASMを直接書き換えることでブロッキングC++呼び出しをエミュレートする)はネイティブ例外と互換性がありません。最新のBinaryenバージョンでも、catchアーム内で中断できません。新しいBinaryenパスを記述すれば可能になり、バンドルサイズが30-40%削減され、アプリのロード時間が10秒から1秒になります。
- バンドルサイズの最適化は楽しいゲームです。Open CASCADEを別の遅延ロードされるWASMモジュールに移動し、180MBから130MB(Brotliで24MB)に削減しました。まだ-O1です。-O2 / -Ozなどは見た目よりも多くの作業が必要です。
そして、上記のような問題が毎日山ほどあります。
数ヶ月前、ほとんどロードされず遅延し、少しでも間違った見方をするとクラッシュするpcbnewがありましたが、今ではアプリケーション全体が動作しています。まだバグはかなりありますが、ネイティブに近い感覚になってきました。
リリースしたい知識/コードがたくさん蓄積されています。ブログ記事として公開したり、Binaryen / KiCad / wxWidgetsに変更をマージしたりしたいのですが、まずはリリースに集中したいです。私たちのwxWidgetsポートはコアに非常に近く、KiCadはコアファイル約150個(主にビルドスクリプト、一部コード変更も)です。目標は、メインラインにできるだけ近づけ、最終的にマージすることです。
無料ティアはもちろん提供し、大規模/クローズドプロジェクト向けには月額約30ドル、将来的にはオプションでAI連携/セルフホスティング/エンタープライズ機能/ネイティブ&モバイル版も提供する予定です。
目標は、Red HatがかつてLinuxで行ったように、KiCadの上に製品(コラボレーション、AI連携、共有、統合)を構築することです。私たちは機能性を確保するために全力を尽くしており、約1ヶ月で最初のバージョンを公開する予定です。
そしてもちろん、KiCadとwxWidgetsを作った人々の肩の上に立っており、できる限り貢献したいと思っています。どのように貢献するのが最善かアイデアがあれば教えてください。私はいくつかのそこそこ成功したオープンソースプロジェクトをリリースしましたが、コントリビューターになったことはありません。フロントエンドコードはすべてGPL(そうしなければならない)であり、もし望むならこのプロジェクトを実行できます。
ソースコードは以下で見つけられます: https://github.com/emergence-engineering/pcbjam。
私たちの会社サイトはこちらです:
https://emergence-engineering.com/
私たちのしょぼいLPはこちらです:
https://www.pcbjam.com/