W3C WebUSB API。Web ブラウザから USB デバイスに直接アクセス可能な JavaScript API、ファームウェアアップデート / 専門機器設定 / IoT デバイス制御 Web アプリで活用、Chrome / Edge 標準対応。
WebUSB API(ウェブ ユーエスビー エーピーアイ)は、W3C Web USB Community Group が 2017 年から策定 + 2017 年 9 月に Chrome 61 で初実装公開、その後 Edge / Opera 等の Chromium 系ブラウザで標準対応された、Web ブラウザから USB デバイス(USB 1.x / 2.0 / 3.x / Type-C)に直接アクセス可能な JavaScript API です。仕様策定は Google が主導し、Reilly Grant(Google Chrome チーム)が編集者を務めています。
技術背景として、従来の Web ブラウザはセキュリティ + サンドボックス機能のため、ハードウェアへの直接アクセスが厳しく制限されていました。USB デバイスを Web 経由で操作するには、(1)ネイティブアプリのインストール + ローカル HTTP サーバ + ブラウザからのリクエスト経由・(2)ChromeOS Native Client(NaCl、廃止済み)・(3)ハードウェアベンダーの専用ドライバ + ブラウザ拡張機能、などの煩雑なアプローチが必要でした。
WebUSB はこれを根本的に解決します。navigator.usb.requestDevice({filters: [{vendorId: 0x1234}]}) のような JavaScript 呼出で、ユーザーの許可を得て USB デバイスにアクセス可能で、その後 interface.transferIn() / interface.transferOut() で USB バルク転送 / 制御転送 / 割込転送を実行できます。これによりハードウェアベンダーは Web ブラウザ経由で自社製品の管理 / 設定 / ファームウェア更新を実装でき、ユーザーは追加ソフトウェアインストールなしでハードウェア制御が可能になります。
セキュリティ + プライバシー面では、(1)HTTPS 必須(セキュアコンテキストでのみ動作)・(2)ユーザー明示許可(デバイス選択ダイアログでユーザーが明示的に選択)・(3)Origin Allowlist(ベンダーが Web USB Allowed Origins ヘッダで信頼 Origin を制限可能)・(4)Same-origin policy(別ドメインから同じデバイスへの不正アクセスを防止)・(5)カスタム HID / 標準クラスアクセス制限(キーボード / マウス等の標準クラスは制限)などの安全機構が組み込まれています。
主な用途は、(1)ファームウェアアップデート(Arduino IDE Web / DFU-util / Pro Trinket 等のフラッシュ書込 Web、micro:bit Web Editor)・(2)専門機器設定(オシロスコープ / アナライザ / カメラ / 計測機器の Web 設定)・(3)IoT デバイス制御 + キャリブレーション(IoT センサ + アクチュエータ)・(4)USB Audio + USB MIDI Web 制御(ニーズが少ないが可能)・(5)USB-C 専用機器の Web 制御(USB Power Delivery、USB Display 拡張など)・(6)EOTBR(Electron OTA via Browser、エレクトロン OTA 経由ブラウザ)・(7)決済端末 + IC カードリーダ / プリンタ等の業務機器、などです。
実装状況は、Chrome 61+(2017 年 9 月)/ Edge 79+(Chromium ベース)/ Opera 48+ で標準対応していますが、Firefox / Safari は実装されていません。Firefox は WebUSB の実装意向を保留(セキュリティ懸念)、Safari は Apple の方針で実装見送り(プライバシー優先)というスタンスを取っています。
主要採用サービスは、Arduino IDE Web Editor(2018 年から WebUSB 対応)・micro:bit Web Editor(BBC 教育用マイコン)・Adafruit Web Tools(Pro Trinket / Circuit Playground 等のファームウェア書込)・Espruino Web IDE(Espruino IoT デバイス)・Web Bluetooth + WebUSB の各種 IoT サービス・LightBurn(レーザー彫刻 Web インターフェース)などです。Project Fugu(Google の Web Platform 拡張プロジェクト)の中核 API として、Web ブラウザがハードウェア統合プラットフォームへ進化する流れを支える重要技術です。
navigator.usb.requestDevice() + device.transferIn() / transferOut()。| API | 対象 | 公開年 | 実装ブラウザ |
|---|---|---|---|
| WebUSB | USB デバイス | 2017 | Chrome / Edge |
| WebSerial | シリアルポート | 2020 | Chrome 89+ |
| WebHID | HID デバイス | 2020 | Chrome 89+ |
| WebBluetooth | Bluetooth | 2016 | Chrome 56+ |
| WebNFC | NFC タグ | 2020 | Chrome Android |
| WebMIDI | MIDI 楽器 | 2015 | Chrome 43+ |
| Web Audio | オーディオ | 2014 | 全ブラウザ |
WebUSB は自作 PC ユーザー + DIY エレクトロニクス愛好家にとって極めて魅力的な技術です。Arduino / Raspberry Pi Pico / micro:bit 等のマイコンボードのファームウェア書込が、追加ソフトウェアインストール不要で Chrome / Edge ブラウザから直接実行可能になります。Arduino Web Editor(create.arduino.cc)・Web DFU(USB DFU プロトコル経由のファームウェア書込ライブラリ)などのサービスで実体験できます。
注意点として、WebUSB は Chromium 系(Chrome / Edge / Opera)でしか動作しません。Firefox / Safari ユーザーは利用できないため、対応サイトを設計する場合は Chromium 系限定と明記する必要があります。また、HTTPS 必須のため、自宅でテスト開発する場合も HTTPS サーバ + 証明書 + Origin 設定が必要です。Chrome 拡張機能の「Web USB Permissions」で開発時のデバッグが容易になります。
Q1: WebUSB は安全ですか? A: 設計上は安全に作られています。HTTPS 必須 + ユーザー明示許可 + Origin Allowlist + 標準クラスアクセス制限により、悪意のある Web サイトがユーザーの USB デバイスを乗っ取ることが困難な仕組みです。ただし、Firefox / Safari がプライバシー懸念で非対応であることから、完全に安全とは言えない側面もあります。
Q2: Firefox / Safari は WebUSB を実装しますか? A: 短期的には実装される見込みは低いです。Mozilla はセキュリティ + プライバシー懸念から WebUSB の実装意向を保留しており、Apple は Safari でハードウェア API 全般に消極的なスタンスです。WebUSB を活用するサイトは Chromium 系(Chrome / Edge)限定の対応が現実的です。
Q3: WebSerial / WebHID と何が違いますか? A: WebSerial はシリアルポート(COM)、WebHID は HID デバイス(キーボード / ゲームパッド / 専用ボタン)、WebUSB は USB 全般のより低レベルアクセスです。USB ベンダ独自プロトコルや汎用 USB バルク / 制御転送が必要な場合は WebUSB が必須です。