WebUSB APIとは

WebUSB APIはブラウザ標準で、ウェブページがネイティブドライバやデスクトップアプリケーションをインストールすることなく、USBデバイスと直接通信できます。Chrome 61で導入され、マイクロコントローラー、開発ボード、MIDIインターフェース、その他のUSB周辺機器などのハードウェアへの制御されたアクセスをウェブサイトに提供します。

従来のUSBアクセス(カーネルレベルのドライバが必要)とは異なり、WebUSBはブラウザサンドボックス内で完全に動作します。ユーザーはブラウザの組み込みデバイスピッカーを通じて各デバイスへのアクセスを明示的に許可する必要があり、これによってウェブサイトがハードウェアから無断で読み取ったり書き込んだりすることはできません。

ツール説明

このツールを使用すると、WebUSB APIを通じてブラウザに許可されたUSBデバイスを列挙できます。読み込み時に、以前に許可されたデバイスが自動的にリストされます。ブラウザのネイティブUSBピッカーを開いて新しく接続されたデバイスへのアクセスを許可することもできます。また、いつでもリストを更新できます。

各デバイスについて、このツールは製品名、メーカー、ベンダーID、プロダクトID、シリアル番号、およびUSBプロトコルバージョンを表示します。

機能

  • ページを開いた時に以前に許可されたUSBデバイスを自動的に読み込み
  • ブラウザのネイティブUSBデバイスピッカーを開いて新しいデバイスへのアクセスを許可
  • ベンダーIDとプロダクトIDを標準的な16進数表記で表示(例:0x1A2B
  • デバイス識別フィールドと共にUSBプロトコルバージョン(例:2.03.1)を表示
  • ソート可能な結果テーブルとCSV、JSON エクスポート機能

動作原理

デバイスを追加をクリックすると、ブラウザはnavigator.usb.requestDevice()を呼び出し、接続されたUSBデバイスをリストするシステムレベルのピッカーを表示します。デバイスを選択すると、ブラウザはそのオリジンの許可を保存します。その後のアクセス時(または更新をクリック後)、navigator.usb.getDevices()は再度プロンプトを表示することなく、以前に許可されたすべてのデバイスを返します。

ベンダーIDとプロダクトIDは4桁の大文字16進数(例:0x04D8)でレンダリングされます。これはUSBレジストリとデータシートで使用される標準形式です。

ユースケース

  • ファームウェア開発者は、接続されたマイクロコントローラーまたは開発ボード(Arduino、STM32、RP2040など)がWebUSBベースのフラッシングツールを作成する前にブラウザで正しく列挙されていることを素早く確認できます。
  • ウェブアプリ開発者は、WebUSB対応アプリケーションが初期段階のプロトタイピング中に予想されるデバイス識別フィールドを認識することを確認できます。

制限事項

  • WebUSBはChromiumベースのブラウザ(Chrome、Edge、Opera)でのみサポートされています。FirefoxとSafariはこのAPIを実装していません。
  • ページはHTTPS(またはlocalhost)で提供される必要があります。WebUSBは通常のHTTPオリジンではブロックされます。
  • 一部のオペレーティングシステムとブラウザの組み合わせでは、権限が付与されている場合でも特定のデバイスクラス(HID、マスストレージなど)へのアクセスを制限します。
  • このツールはデバイスメタデータのみを読み取ります。USBインターフェースを開いたり、デバイスとの間でデータを転送したりすることはありません。