世界を動かす技術を、日本語で。

Firefox用WebUSB拡張機能

2026年4月20日原文(github.com)

概要

  • WebUSB拡張機能 をFirefoxで利用可能にする方法の解説
  • ネイティブメッセージング を活用し、追加プログラム(native stub)の導入が必要
  • Chromeとの互換性 を目指すが、一部制限あり
  • インストール手順・システム要件・ビルド方法 など詳細解説
  • マニフェスト設定方法 も具体例付きで案内

WebUSB拡張機能 for Firefox 概要

  • WebUSB機能 をFirefoxで利用可能にする拡張機能
  • ネイティブメッセージング を利用し、ブラウザ外に「native stub」プログラムのインストールが必要
  • Chrome実装との互換性 を目指しているが、Web WorkersではAPI非対応
  • Android非対応 (ネイティブメッセージング機能がないため)
  • 不具合や互換性の違い はGitHubで報告推奨

インストール手順

  • GitHubのReleasesセクション からバイナリをダウンロード、またはソースコードからビルド可能
  • 拡張機能のインストール方法
    • 署名済みバージョン:.xpiファイルをダウンロードしFirefoxで開く
    • テスト用バージョン:Firefox Developer Editionでabout:debuggingから「Load Temporary Add-on…」を選択し、extension/ディレクトリ内のmanifest.jsonを指定
  • native stubのインストール方法
    • プリビルドバイナリ使用時:全ファイルを解凍し、Linux/macOSは./install.sh、Windowsはinstall.batを実行
    • インストーラが自動で必要ファイル配置&ネイティブマニフェスト設定
    • 対応プラットフォーム
      • macOS:x86_64, ARM64
      • Linux:x86_64, aarch64
      • Windows:AMD64, ARM64

非標準的な構成への注意

  • 特殊な環境 (例:異なるCPUアーキテクチャ間で*nixホームディレクトリ共有、Windowsのローミングユーザープロファイル)では、インストーラが正常動作しない場合あり
  • 原因 はネイティブマニフェストの絶対パス利用など設計上の制約
  • 該当する場合は独自のワークアラウンドが必要

システム要件

  • macOS
    • macOS 10.15以降必須(Firefoxの要件に準拠)
    • macOS 12以降が推奨ベースライン
  • Windows
    • Windows 10以降必須(Rustプラットフォーム要件・Firefox要件に準拠)
    • Windows 8/8.1へのバックポートは理論上可能だが、サポート外
  • Linux
    • Linuxカーネル4.8以降必須
    • /devおよび/sysのマウントが必要
    • udevまたは互換デーモン必須(NETLINK_KOBJECT_UEVENTグループ2で0xfeedcafe形式メッセージ送信対応)

ソースコードからのビルド方法

  • native stubはRust製、cargo buildでnative-stubディレクトリ内でビルド可能
  • クロスコンパイル もデフォルト対応
  • macOS
    • 基本的にそのままビルド可能
    • 問題発生時は.cargo/config.tomlの該当エントリを無効化し、macOS SDKの用意が必要
  • Linux
    • musl libc+静的リンクで配布、ディストリ間の互換性重視
    • glibcビルドも理論上可能だが未検証
  • Windows
    • mingw-w64+UCRTターゲットでビルド
    • cross-buildが主な検証方法
    • Windows上でのビルドはrust-mingwコンポーネント追加が必要な場合あり
    • MSVCツールチェーンは未サポート(技術的な理由ではなく、単に未検証)

ネイティブマニフェストの設定

  • マニフェストファイル はJSON形式で、OSごとに配置先が異なる
  • macOS
    • グローバル:/Library/Application Support/Mozilla/NativeMessagingHosts/awawausb_native_stub.json
    • ユーザーローカル:~/Library/Application Support/Mozilla/NativeMessagingHosts/awawausb_native_stub.json
  • Linux
    • グローバル:/usr/lib/mozilla/native-messaging-hosts/awawausb_native_stub.json
    • グローバル:/usr/lib64/mozilla/native-messaging-hosts/awawausb_native_stub.json
    • ユーザーローカル:~/.mozilla/native-messaging-hosts/awawausb_native_stub.json
  • Windows
    • 任意の場所に配置可能、レジストリキーでパス指定
    • HKLM\SOFTWARE\Mozilla\NativeMessagingHosts\awawausb_native_stub(グローバル)
    • HKCU\SOFTWARE\Mozilla\NativeMessagingHosts\awawausb_native_stub(ユーザーローカル)

ネイティブマニフェスト内容例

{
  "name": "awawausb_native_stub",
  "description": "Allows WebUSB extension to access USB devices",
  "path": "/path/to/awawausb-native-stub",
  "type": "stdio",
  "allowed_extensions": ["awawausb@arcanenibble.com"]
}
  • Windowsではフルパス不要 (例:"awawausb-native-stub.exe"のみで可)

開発者向けドキュメント

  • 詳細設計やアーキテクチャ情報 はDocumentation/architecture.mdを参照

Hackerたちの意見

いいえ、結構です。セキュリティの問題が解決されて、仕様がドラフトじゃなくなったら、ブラウザで受け入れます。

それと、日常的に使ってるFirefoxが変な動きした時用に、Chromeのインスタンスを立ち上げるだけです。2026年に基本的なことすら実装しないなんて、マジで勘弁してほしいよね :'(

WebUSBがないと、USBデバイスと接続するたびに信頼できないネイティブドライバーをインストールしなきゃいけないっていうセキュリティの問題があります。

ネイティブプログラムをダウンロードすること(例えばスマホをフラッシュするために必要なもの)に対して、どんなセキュリティの問題があるの?

仕様はまだドラフトのままなんだ。Appleが前に進めるのを拒否してるから。WebUSBやWebBluetooth、他のAPIが彼らのアプリストアと競合するからね。アプリ内での購入から利益を得ることを優先してる。セキュリティとは関係なくて、WebUSBはユーザーが明示的にアクセスを許可しない限り、どのデバイスともやり取りできないんだ。他のブラウザAPIと同じセキュリティレベルだよ。

これは素晴らしいコンセプトの証明になりそうですね。ブラウザと一緒にスタンドアロンの実行ファイルを動かすのは、WebUSBの理想的な使い方じゃないけど、誰かが取り組んでるのを見るのはいいことです。

ブラウザで直接動かすのは、USBの使い方としてはあまり好ましくないな。

最近、友達のためにPixelにGrapheneOSをフラッシュしたんだけど、WebUSBを使ってブラウザからこのプロセス全体ができることに驚いたよ。唯一の欠点は、Chromiumを立ち上げる必要があったことかな。

Pixelから別のPixelにGrapheneOSをフラッシュできるし、PCもいらないよ。何度もやったことがあって、これがWebUSBの便利さを実感させてくれた。GOSデバイスがあれば、Chromeを避けたい場合はGOS独自のChromium、Vanadiumを使えるよ。

WebUSBとWeb Bluetoothは素晴らしいね。前者は素晴らしいWeb MiniDiscに使ったし、後者は安いXiaomiのBluetooth LE温度計/湿度計デバイスにカスタムファームウェアをフラッシュするのに使った。Home Assistantが認識できるから、本当に新しい可能性が開けたよ。怪しいスクリプトやローカルバイナリを動かすのはちょっと不安だったからね。 [1] https://web.minidisc.wiki/ [2] https://github.com/pvvx/ATC_MiThermometer

Firefoxは2回うまく使えたよ。ルーターにNextDNSを設定してるけど、それが役立ったかは分からない。

WebUSBはめっちゃいいね。ハードウェアデバイスにアクセスするクロスプラットフォームアプリを、プラットフォームの細かいことを気にせずに出せるし、ドライバーのサンドボックスもちゃんとしてる。無知なユーザーからの「セキュリティ」を高めるためには、WebUSBのデバイスはWebUSBのディスクリプタを持ってるものだけに限定するのがいいと思う。そうすれば「オリジン」チェックもできるし。

Hacker Newsで議論の続きを見る