Firefox の WebUSB エグステンション

2026/04/20 20:51

Firefox の WebUSB エグステンション

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

要約

Japanese Translation:

Firefox の WebUSB 拡張機能は、デスクトップオペレーティングシステム(Windows、macOS、およびさまざまな Linux ディストリビューション)で専用ネイティブヘルパープログラムである「stub」を利用して、直接の USB ハードウェアアクセスを提供します。この実装では標準的なブラウザ API と異なり、メインページスレッドだけで動作し、Android やバックグラウンド Web Worker をサポートしません。インストールには、プリビルトバイナリのダウンロードまたはソースからのビルド(x86_64、ARM64/aarch64 に対応)を行い、その後ネイティブマニフェスト JSON ファイルを登録するためのインストーラースクリプト(例:

install.sh
または
install.bat
)を実行する必要があります。Windows の場合、特定のレジストリキーを設定する必要があります。stub は Rust で書かれておりクロスコンパイルをサポートしていますが、利用者は以下のシステム要件に注意する必要があります:macOS 10.15 以上、Windows 10 以上、Linux カーネル 4.8 以上です。開発者が直面する可能性のある制限としては、Windows での MSVC ツールチェーンの非対応(mingw-w64 を推奨)、macOS でのベンダ SDK に関するリンク問題、Linux での未テスト Glibc ビルドなどがあります。また、インストーラーは異なる CPU アーキテクチャ間での共有ホームディレクトリのような uncommon な構成で失敗する可能性もあります。したがって、この解決策は Chrome の実装に似た強力な接続性を提供しますが、標準的な Web 機能とは異なる設定プロセスが必要であり、アーキテクチャドキュメントに詳述された特定の展開制約を課します。

本文

Firefox の WebUSB 拡張機能
本拡張機能はネイティブメッセージングを活用することで、Firefox に WebUSB の機能を追加します。この機能を利用するには、ブラウザ内に拡張機能をインストールするのと同時に、お使いのコンピューターにブラウザとは別個の小型プログラムをインストールする必要があります。この追加プログラムは「ネイティブスタブ」と呼ばれます。

対応機能
本拡張機能は Chrome の実装と互換性があることを目指して開発されています。ソフトウェアが正常に動作しない原因となった差異については、必ずご報告いただけますようお願い申し上げます。ただし、Chrome とは異なり、この API はメインページのみで公開されており、Web Worker からは利用できません。また、Android ではネイティブメッセージングの機能がないため対応することはできません。

インストール手順
本拡張機能は、GitHub の「Releases」セクション(右側のカラム)からバイナリをダウンロードするか、ソースから自分でビルドすることでインストールできます。

拡張機能のインストール
署名されたバージョンの拡張機能をインストールするには、.xpi ファイルをダウンロードし、それを Firefox で開きます。Firefox Developer Edition にテスト用のバージョンをロードするには、「about:debugging」を開き、左側のリストで「この Firefox」を選択した後、「Load Temporary Add-on…(仮加載…)」をクリックし、拡張機能/ ディレクトリ内の manifest.json ファイルを指定します。

ネイティブスタブのインストール
事前構築済みバイナリを使用している場合は、すべてのファイルを解凍した上で、Linux/macOS では ./install.sh、Windows では install.bat を実行してください。これらのインストーラーは、適切と思われる場所に相关文件を自動的にコピーし、ブラウザがそれを見つけるようネイティブマニフェストを設定します。

以下のプラットフォームに対して事前構築済みバイナリを提供しています:

  • macOS x86_64 および ARM64
  • Linux x86_64 および aarch64
  • Windows AMD64 および ARM64

事前構築済みバイナリを使用しない場合は、以下をご覧ください。

「特殊な」構成
デフォルトのインストーラーは、以下のような不寻常な構成では問題が生じることが確認されています:

  • 異なる CPU アーキテクチャを持つ複数のコンピューターで共有されている *nix ホームディレクトリ
  • 異なる CPU アーキテクチャを持つ複数のコンピューター間で roaming ユーザープロファイルを使用している Windows など

根本原因は、「ネイティブマニフェスト」メカニズムが絶対パスなどの理由により、これらの状況を十分に考慮していない設計になっていることです。こうした状況に該当する場合は残念ながら、適応的なワークアラウンド策を自分で考案する必要があります。

システム要件
このネイティブスタブは何もしすぎないように心がけていますが、開発およびテストのリソース制約のため、「比較的新しい」デスクトッププラットフォームに焦点を当てています。

macOS
Firefox のシステム要件に合わせ、macOS 10.15(Catalina)以降が必要です。ただし、より古いシステムについては十分に検証されておらず、macOS 12(Monterey)以上の環境を基準とすると実用上かなり合理的でしょう。

Windows
Rust プラットフォームのサポート要件により、Windows 10 以降が必要です。これ 또한 Firefox のシステム要件とも一致しています。Windows 8/8.1 へのポートバックは理論上可能かもしれませんが、それ以前は WinUSB の制限により動作しないことが想定されます。

Linux
Linux カーネル バージョン 4.8 以降が必要です(より具体的には、コミット 5cce438 および USBDEVFS_CAP_REAP_AFTER_DISCONNECT を含むカーネルと、USBDEVFS_DISCONNECT_CLAIM をサポートするカーネルの両方が強く推奨され、かつ /dev および /sys がマウントされている必要があります)。USB デバイスの接続を検出するためには、udev またはそれと互換のあるデーモンが動作するユーザースペースが必要です。具体的には、NETLINK_KOBJECT_UEVENT グループ 2 で 0xfeedcafe フォーマットの手書きメッセージをブロードキャストするデーモンが必要です。

ソースからのコンパイル
原則として、このネイティブスタブは完全に Rust で書かれており、native-stub ディレクトリ内で cargo build を実行することでビルドできます。クロスコンパイルもサポートされており、対応プラットフォームではデフォルトで構成されています。

これが「ただ動作しない」という場合は、以下の注記が役立ちます:

macOS
このシステムであればほぼ問題なく動作するはずです。リポジトリには最終バイナリをリンクするために必要なすべての .tbd ファイルのバインド済みコピーが含まれています。それでも何らかの問題を引き起こす場合、.cargo/config.toml の該当するエントリを無効にしてください(その場合は macOS SDK がインストールされている必要があることにご注意ください)。

Linux
Linux の事前構築済みバイナリは、Rust のデフォルトである静的リンキングを使用するように musl libc を設定されています。目的はどのディストロでも動作するバイナリを生成することです。これを望まない場合、適切な RUSTFLAGS を変更する必要があるかもしれません。glibc ビルドも動作する可能性がありますが、テストされていません。

Windows
Windows の事前構築済みバイナリは、UCRT をターゲットとした mingw-w64 を使用してビルドするように設定されています。これは Rust における *-windows-gnullvm ターゲットに対応します。Windows では主に Windows 以外のプラットフォームからクロスビルドしてテストされており、Windows 上での直接ビルドも理論上は動作するはずです。ただし、rust-mingw コンポーネントの追加が必要になる場合があります。詳細については rustc のドキュメントを参照してください。Windows 以外のシステムからビルドする場合は、mingw-w64 .lib ファイルを取得する必要があります(Dockerfile 内の手順をたどるなど)。.cargo/config.toml にハードコードされたパスを確認・変更し、これらのライブラリを見つける必要があります。MSVC ツールチェーンを使用したビルドはサポートしていません(根本的な問題があるわけではなく、単にテストされていないだけです)。

ネイティブマニフェストの設定
ブラウザがコンパイルされたバイナリを見つけるためには、コンピューターの特定の場所に「マニフェスト」ファイルをインストールする必要があります。マニフェストとは、オペレーティングシステムに応じて特定のパターンを持つ短い JSON(JavaScript -object-notation)ファイルです。以下にドキュメントに関連する行を繰り返します:

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(ユーザーローカル)

以下のスクリーンショットは、正しく構成されたレジストリエントリの例を示しています:

ネイティブマニフェストの内容
JSON ファイルには以下の内容を含める必要があります:

{
  "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」を参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/04/21 5:39

ジョン・テルナス氏、次期アップル CEO に就任

## Japanese Translation: 欠落している要素は、キーポイントリストからの具体的なデータポイントおよび製品の詳細を組み込んだ改良されたバージョンを採用する価値があり、ソース資料の包括的な反映を確保するためには十分な重大さがあります。 **改善されたサマリー:** Apple は、John Ternus が 2026 年 9 月 1 日に CEO に就任し、Tim Cook を後継することを含む大規模なリーダーシップ移行を公式に確認しました。取締役会はこの計画を全会一致で承認し、Cook が 2011 年に CEO に就任してから歴史的な業績を認識しています。彼は社員の市場価値を約 3500 億ドルから 4 兆ドルへと成長させ、収益を 2011 会計年度の 1080 億ドルから 2025 会計年度の 4160 億ドル以上までほぼ四倍に拡大しました。Cook は日常業務から退き、執行議長として務める一方で、夏の間は CEO を辞任せず、円滑な引き継ぎを確保します。彼の指導の下、Apple は Apple Watch、AirPods、Vision Pro という象徴的な新カテゴリーを導入し、自社設計のシリコンに移行し、200 カ国以上および地域に店舗を持つ 500 店以上の小売網を拡大しました。また、チームメンバーが 100,000 名以上増加し、現在稼働している 25 億台超のデバイスベースを支援しています。 John Ternus は、2001 年に製品設計チームの一員として Apple に加入し、2021 年にハードウェアエンジニアリング担当副社長となり、2026 年 9 月 1 日に CEO の役職を引き継ぎ、取締役会に就任します。彼の指導の下、MacBook Neo、iPhone Air、フルモデルの iPhone 17 シリーズ、アクティブノイズキャンセレーション搭載のアバンスド AirPods、Apple Watch Ultra 3 に用いられた再生アルミニウムや 3D プリンティング钛など、重要なハードウェア革新を監督しました。さらに、Arthur Levinson は 2026 年 9 月 1 日に非執行会長からリードインディペンデントダイレクターへ移行します。この戦略的なシフトは、Apple の長期的なビジョンを固めるものであり、ハードウェア革新と持続可能性への深いコミットメントを持つ内部人材へのリーダーシップの引継ぎによって実現され、新鮮でありながら親しみのあるリーダーシップの下での継続性を確保します。

2026/04/21 6:32

「楽しさと利益のためのジュージ・メガマージ」

## 日本語訳: 記事は、JUJUTSU で導入される簡素化されたバージョン管理ワークフロー「megamerge」について紹介しています。これは、オクトパス合併(3 つ以上の親を持つ合併)を用いて、複数の開発ブランチを単一のローカルのベースコミットに統合します。不安定なブランチの先頭に直接作業を行う代わりに、開発者は関連する上流ブランチ(機能追加、バグ修正、設定など)を親とする空の megamerge コミットを作成し、作業コピーが常にすべての変更を統合してコンパイル可能になるように確保するとともに、タスクを変更する際に予期せぬリモート合併競合を排除します。 megamerge を開始するには、`jj new x y z` を実行した後に `jj commit --message "megamerge"` を実行し、指定されたブランチを親とする空のコミットを作成します。すべての書き込みは、このベース(WIP ス tack)の上で実施され、megamerge がローカルに留まることで安定性を保ちます。個々の機能ブランチは遠隔リポジトリへ通常通り公開し続けますが、megamerge 自体はプッシュされません。 `jj absorb` を用いて上流の変更を自動的に統合するワークフローでは、約 90% の更新を後続的可変コミットに圧縮して同定します。新しい作業で独自のコミットが必要になる場合は、bookmark を更新しながら WIP を megamerge の下に移動するために `jj rebase --revision y --after x --before megamerge` を使用します。並列ス tack の管理には revset アリヤス(例: `"closest_merge(to)" = "heads(::to & merges())"`)および `stack` コマンドを用い、`stage = ["stack", "closest_merge(@).. ~ empty()"]` というようにのアリヤスで一度にステージリングし、その後 `jj stage` を実行します。 メインブランチ(`trunk()`)との同期を維持するには `jj rebase --onto trunk()` を使用でき、これは自分が所有するコミットに対して動作し、他者によるブランチは保護されます。Mutable コミットのみを安全に trunk へ rebase するための場合は、`restack = ["rebase", "--onto", "trunk()", "--source", "roots(trunk()..) & mutable()"]` というようなアリヤスを使用します。全体として、このアプローチは合併による面倒を大幅に削減し、新しい作業が堅牢な統合された基盤の上に自然と構築されるような円滑で協力的なサイクルをサポートします。

2026/04/21 4:51

『Soul Player C64 ―1MHz のコモドール64で動作する本物のトランスフォーマー』

## Japanese Translation: Soul Player C64 は、未修正の Commodore 64 でネイティブ速度(約 1MHz)で完全動作する縮小版变压器モデルを実行し、画期的な成果を達成しました。このシステムは、2 レイヤーのdecoder-only アーキテクチャを実装するため、手書きの 6502/6510 アセンブリ言語を使用しており、リアルなマルチヘッド因果的自己注意機構、RMSNorm、および ソフトマックス(128 エントリのルックアップテーブル経由で)を備えており、すべてが 1 つのフロッピーディスクに収まります。主要な技術的突破口としては、6502 プロセッサの精度限界を克服しつつ有意義な重みを保つために、標準の 17 ビットではなく 14 ビットのみで注意スコアをシフトすることなどが挙げられます。 ChatGPT のような現代の巨人と並んでモデルは動作しますが、約 25,000 int8 パラメータという厳格な制約下にあります:単語書式は 128 トークン(大文字を未知として扱う)、埋め込み次元は 32、最大トレーニングコンテキストウィンドウは 20 トークンです。推論にはトークンあたり約 60 秒かかりつつも、レガシーハードウェアでのローカル機械学習の探求へのアクセシブルなパスを提供します。 このプロジェクトには、ユーザーがカスタムモデルをトレーニングするための包括的なツールが含まれています:`train.py` は Quantization-Aware Training (QAT)、FakeQuantI8、およびラベルスムージングをサポートし、重みをコンパクトなバイナリ形式にエクスポートします;`build.py` は C64 バイナリをコンパイルします;`test.py` はほぼ 90 の厳密な検証テストにより安定性を確保します。リリースパッケージにはソースファイルと即座に実行可能なビルドの両方が含まれており、高度な AI コンセプトがハードウェア変更なしでビンテージシステム上で機能することを示しています。