Firefox用WebUSB拡張機能
17時間前原文(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を参照