全2667文字
PR

 みなさんはNintendo Switchを持っているだろうか。そのSwitchのコントローラーであるJoy-ConにWebブラウザーからアクセスできることをご存じだろうか。つまりJoy-Conを入力デバイスとしたゲームなどをWebアプリとして作れるということだ。今回はWebブラウザーがJoy-Conにアクセスできる仕組みについて紹介しよう。

Joy-Con
Joy-Con
[画像のクリックで拡大表示]

WebHID APIの概要

 WebブラウザーがJoy-Conにアクセスできるのは、WebHID APIがブラウザーにサポートされたからだ。WebHID APIとは、名前の通り、HID(Human Interface Device)にアクセスするためのAPIで、JavaScriptのコードを通して利用できる。

 誰にとってもなじみがあるHIDを具体的に挙げるとしたら、マウスやキーボードだろう。WindowsやmacOSなどのOSで世の中のマウスやキーボードが扱えるのは、そのインターフェースが標準化されているからだ。そのインターフェースは、USB接続であれば HIDデバイスクラスとして、BluetoothであればHIDプロファイルとして標準化されている。Joy-ConもHIDインターフェースをサポートしているため、WebHID APIからアクセス可能だ。

 ただし、OSが既に認識しているデバイスに関しては、WebHID API でアクセスできない点に注意してほしい。なぜなら、それらデバイスの制御はOSに奪われているからだ。WebHID APIが扱えるデバイスは、ドライバーがインストールされておらず、OSが認識できないデバイスに限る。

 言い換えると、WebHID APIを使うということは、ある意味、Webアプリケーション用にJavaScriptでドライバーを自作するのに近い。それだけ低レベルのAPIということだ。

Gamepad APIとの違い

 実は、近年のメジャーなWebブラウザーにはGamepad APIが実装されており、以前からUSBで接続するゲームコントローラーにアクセスすることができた。誰もがよく知るゲームコントローラーといえば、次の写真のようなデバイスを想像するだろう。

一般的なゲームコントローラー
一般的なゲームコントローラー
[画像のクリックで拡大表示]

 なぜGamepad APIが存在しているにもかかわらずWebHID APIが用意されたのか疑問に思う読者もいるだろう。

 前述の通り、WebHID APIはゲームコントローラーに限定したインターフェースではなく、さまざまなデバイスに使われているからに他ならない。また、近年、ゲームコントローラーも高度化し、Gamepad APIだけではサポートできない機能が登場しているからだ。今回取り上げたJoy-Conもその1つである。

 Joy-Conは加速度センサーやジャイロスコープを搭載しており、Joy-Conの傾きなどを計測できる。このような機能をサポートするにはGamepad APIでは機能不足だ。一方で、Joy-Conに特化したAPIを標準化するのは現実的ではない。そこで、低レイヤーを扱うWebHID APIが作られたわけだ。