IT分野・プログラミング

WebUSBとは?これから流行るかもしれないGoogleの新技術を触ってみる

webusb

みなさん、WebUSBってご存じですか?

まる太
まる太
私は最近、WebUSBなるものを知りました。

きっかけは、同僚が「クラウドベースのFPGA環境”WebFPGA”というプロジェクトがkickstarterに登場してる!」って興奮していたからです。

WebFPGA: Rapid FPGA Development System by Ryan Jacobs — Kickstarter

そして紹介ページにこんな一文がありました。

Our software toolchain uses a recent browser technology called WebUSB to program the FPGA, without any software required other than a modern web browser (Chrome/Opera/Edge75 supported for now).

引用元:Kickstarter

WebUSBを使っており、ブラウザのみによるFPGAプログラミングが可能です。」

WebUSB・・・?始めて聞くぞ。何だ?興味あるな

ってことで、調べてみました。

私的には、画期的な技術だと感じましたので、概要を解説したいと思います。

WebUSBとは何か

Googleのエンジニアが定めた、Chromium系ブラウザ(ChromeやOperaなど)で利用できる新しい規格(API)のことです。

ブラウザなので、javascriptで記載するAPIです。

現在標準化されているらしく、すでにChromeで使用可能です。
※Chromiumベースで開発中の新Edgeがあるらしく、現在プレビュー版のEdgeでもWebUSBが使用できました。以下からダウンロードできます。

Microsoft Edge Insider

 

以下のページがWebUSBの公式ページ(公式ドキュメント?)のようです。

WebUSB API

まる太
まる太
ほぼ毎日更新されているようですが、履歴がないのでどこが更新されたかよくわからないのが困りごとです。

WebUSBで何ができるか?デバイスドライバーが不要になるかも

WebUSBは、Chromeなどのブラウザから直接USB機器を制御することができます。

USB機器って普通はドライバーが必要ですよね。マウスなどは汎用ドライバーがあるのでUSBポートに差すだけで使えるようになりますが、プリンターとかカメラとかスキャナーなどは各メーカー専用のドライバーをインストールしないと動作できません。

ところが、このWebUSBという技術を使うと、ブラウザから直接USB機器を制御できるので、ドライバーが不要になるかもしれないんです。

超画期的じゃないですか?

どういうことかというと、例えばWindowsとAndroidとMacでUSB機器を使い回したい場合、WindowsにもMacにもAndroidにも専用のドライバーやアプリをインストールしないと使えないですよね。

全部にインストールするのって面倒ですよね。それに、容量食うし。

その点、WebUSBならブラウザさえあればUSB機器を動かせるんです。専用のWebページにアクセスするだけで、OS関係なく、ドライバーをインストールせずとも動作するんです。

まる太
まる太
WebUSB(javascript)がドライバー代わりになっているイメージですね。

超画期的じゃないですか?(二回目)

 

WebUSBを試してみる

実装には、こちらのページが参考になります。

Webブラウザからハードウェアにアクセス!WebUSB APIを使ってログイン認証を実装してみよう | HTML5Experts.jp

実際に私は手持ちのプリンターで試してみましたが、認識するところまでは無事に作用しました。

試したソースコードはほぼ上のサイトのまんまなので公開するほどのものはないんですが、

私が詰まった点やよくわからなかった点、新たに分かったことを以下に記載しておきます。

WindowsのChromeでWebUSBを動作させるにはflagsの変更が必要

Windowsの場合はChromeでflagsの変更が必要です。

Chromeから、アドレスバーに”chrome://flags”と入力し、検索窓から”usb”で検索すると “Enable new USB backend”という項目が見つかるので、”Enabled”に変更します。

chrome://flags

WindowsではWinUSB.sysドライバーをロードしているデバイスしかWebUSBでアクセスできない

今回検証したプリンターはメーカー独自のドライバーを使っているので、WebUSBでアクセスできませんでした。

ChromeでUSB機器名を選択すると”Access Denied”とエラーが出てしまいます。

よって、infファイルを改造する必要があります。infファイルの改造方法はMicrosoftの公式ページに載っていますのでリンクを貼っておきます。

WinUSB (Winusb.sys) のインストール – Windows drivers | Microsoft Docs

各OSのWebUSB動作状況

Mac、Android、Linxu(Ubuntu)、Windowsの4つのOSでWebUSBの動作状況がどうかを検証しました。(iPhoneも検証したかったのですが、持ってないのでできませんでした)

  • Mac
    → USB繋いだだけでChromeからUSB機器を認識・選択可能
  • Android
    → USB繋いだだけでChromeからUSB機器を認識・選択可能
  • iPhone
    → 未検証だが、Macが認識できたのでiPhoneもできるのでは?
  • Linux(Ubuntu)
    → ChromeにUSB機器名が表示されず選択できない
       → 何らかの対応が必要と思われる
  • Windows:
    <不明なデバイスの場合>
    → ChromeにUSB機器名が表示されず選択できない
    <メーカー独自ドライバーで認識している場合>
    → ChromeからUSB機器を選択するとアクセス違反
    <汎用ドライバー(WinUSB.sys)で認識している場合>
    → ChromeからUSB機器を認識・選択可能

 

まとめ

どうでしょう?面白い技術ではないでしょうか?

個人的には期待感満載の技術なので、今後もWebUSBの動向を追っていこうと思います。

まだ触っている人が少ない今なら、あなたも先駆者になれるかも!?