- Chrome でのみサポートされていた WebUSB API を Firefox で使えるようにする拡張機能で、Native Messaging メカニズムを通じてブラウザー外部のプログラムと通信
- 動作にはブラウザー拡張(.xpi)と ネイティブスタブ の 2 つを一緒にインストールする必要あり
- Chrome の WebUSB 実装との 互換性 を目標に設計されているが、Web Workers では使用不可 で、メインページでのみ API を公開
- Android は Native Messaging 自体がないためサポート不可
- macOS(x86_64/ARM64)、Linux(x86_64/aarch64)、Windows(AMD64/ARM64) など 6 プラットフォーム向けの事前ビルド済みバイナリを提供
- インストールスクリプト(
install.sh / install.bat)がファイルコピーと ネイティブマニフェスト の構成を自動処理
- ネイティブスタブは全面的に Rust で書かれており、クロスコンパイルを標準サポート
- システム要件: macOS 10.15+、Windows 10+、Linux カーネル 4.8+(udev が必要)
- ライセンス: 0BSD
1件のコメント
Hacker Newsのコメント
以前はWebUSB/Bluetoothを理念的な理由でかなり嫌っていたが、クライミングボードの制御アプリや、USB経由でMiniDiscに転送するnetMDのような事例を見て考えが変わった。こうした用途にネイティブアプリのインストールは大げさだと感じていたし、今ではFirefoxにも選択肢ができたのがうれしい
自分はWebUSBは本当に素晴らしいと思う。プラットフォームごとの差異をいちいち処理しなくてもハードウェアにアクセスするクロスプラットフォームアプリを配布できるし、ドライバも適度にサンドボックス化できるからだ。セキュリティをさらに強化するなら、WebUSB descriptorのあるデバイスだけをデフォルトで許可し、それ以外には追加の警告を出す方式も悪くないと思う
最近、友人のPixelにGrapheneOSをインストールしてあげたが、ブラウザでWebUSBだけ使って全工程を終えられるのはかなり驚きだった。欠点といえばChromiumを起動しなければならなかったことくらいだ
GrapheneOS、ESPHome、MeshtasticのようなプロジェクトはすでにWebUSBをうまく活用しているし、GoogleもStadiaコントローラーを一般的なBluetooth入力機器に変えるのに使った。キーボードメーカーの設定ツールも同様だ。ユーザーが機器を明示的に選択しなければならないので、セキュリティモデルも妥当だと思うし、Mozillaがこれをネイティブで拒み続ける姿勢は、この10年で見せてきた態度と同じように残念に感じる
最近では、ローカルアプリですらChrome専用のhtml & jsという形で配布されることが増えている。ブラウザがUSBにアクセスすることを好むかどうかとは別に、昔のIE強制時代のように再びChrome使用を強いられる流れのほうがもっと嫌だ
BBC Microbitのような教育用ハードウェアプラットフォームでは、WebUSBはゲームチェンジャーだった。学生にハードウェアを紹介するとき、とにかくちゃんと動くし、MakeCodeのようなWeb IDEやコード参照URLのおかげで共有やデバッグも簡単になる
この実装は優れたproof of conceptのように見える。ブラウザの横で別の実行ファイルを動かす方式が、自分の望むWebUSBの最終形ではないが、誰かが実際にこの問題を解こうとしているという事実自体はうれしい
最初の反応としては、これはひどいアイデアだという側だった。Webサイトがハードウェアにアクセスすること自体が嫌で、Webカメラへのアクセスだけでもすでに十分不快だ
自分はまだ仕様がdraft段階にあり、セキュリティ面の懸念が十分に解消されるまでは、ブラウザに入ってくるのを歓迎しない
WebUSBとWebBLEがどこでもサポートされれば、自分のIoTアプリをWebだけで配布できるので、生産性が大きく上がりそうだ。アプリストア関連の煩雑さが減る点が特に魅力的だ