はじめに
こちらは、完走賞ゲットのため小ネタを毎日投稿しようとチャレンジする Advent Calendar 2022 の 14日目の記事です。
記事の内容は、「JavaScript + HID用のライブラリ」という組み合わせで検索をすると、検索上位に出てくる node-hid の話です。
もう少し補足すると、その node-hid の公式情報の中に出てくる「hid-showdevices」のコマンドに関する内容です。
これに興味を持った経緯は、以下のとおりです。
- 個人的に HID関連の技術の話が気になってきた
- WebHID や HID 関連の調べものをした(※ WebHID については Qiita の記事も書いたりした)
- HID を使った開発のお試しを進めていこうと思い、それに役立ちそうなものを調べた
- node-hid の公式情報の中に出てくる「hid-showdevices」を見かけた
- PC に USB接続された HIDデバイスの情報を取得するのに便利そうで試したくなった
node-hid について
本題に入る前に、node-hidなどについて、少し触れておきます。
node-hid は公式での説明書きにもあるとおり、「USB接続された HIDデバイスの情報を Node.js で取得できる」というものです。
hid-showdevices関連の話
node-hid に含まれる hid-showdevices についても、少し補足します。
hid-showdevices について
hid-showdevices は、記事の冒頭などでも書いたとおり、USB接続された HIDデバイスの情報を確認することができる仕組みのようです。
公式ページにあるとおり、node-hid をグローバルインストールした場合は、コマンドとして利用できるようです(libusb
と hidraw
のものがあるけれど、公式の説明を見ると、Linux以外の環境では気にせず一方を使えば良さそう?)。
$ npm install -g node-hid
$ hid-showdevices libusb
$ hid-showdevices hidraw
hid-showdevices の実装は、公式の GitHubリポジトリ内の以下を見ると、確認することができるようです。
●node-hid/show-devices.js at master · node-hid/node-hid · GitHub
https://github.com/node-hid/node-hid/blob/master/src/show-devices.js
hid-showdevices を実際に使ってみる
hid-showdevices の準備と実行するコマンド(※ ローカルインストールの場合)
それでは hid-showdevicesコマンドを、実際に試してみます。
自分は、パッケージのインストールで、よくローカルインストールを使っているので、ここでのお試しでもその方法でやっていきます。
インストールは npm install node-hid
で行います。
その後、hid-showdevices コマンドを使います。コマンドを実行する際、node-hid をグローバルインストールしていないため、直接 hid-showdevices は実行できない状況ですので、「npxコマンド」 を活用します。
hid-showdevicesコマンドの実行は、以下で行います(最初に、 npx
をつけるだけです)。
この後は、 libusb
のほうを使って進めていこうと思います。
$ npx hid-showdevices libusb
$ npx hid-showdevices hidraw
Windows と Mac でインストール
なお、自分はこの手順を、Windows と Mac の両方で試してみました。
どちらの環境でも、問題なくインストールを完了させられました。
Mac で hid-showdevices を実行した結果の例(※ 一部のみ)
それでは、hid-showdevices を実行してみます。
Mac(MacBook Pro 13-inch, 2020)に USB接続された機器が無い状態で、 npx hid-showdevices libusb
を実行してみました。
実行後の出力でいろいろ出てきましたが、Apple関連のものの一部のみを抜粋してみます。
- manufacturer: 'Apple Inc.' / 'Apple' (vendorId: 1452)
- productId: 33026, product: 'Touch Bar Backlight',
- productId: 33027, product: 'Headset',
- productId: 638, product: 'Apple Internal Keyboard / Trackpad',
- productId: 33378, product: 'Ambient Light Sensor',
- productId: 33538, product: 'Touch Bar Display',
上記の中の、例えば「Touch Bar Backlight」についてはこんな感じで出力されます。
また、外部デバイスを何かつないだ状態でも試してみます。
DualShock 4 を USB接続した後に再度コマンドを実行してみます。きちんと情報がとれているようです。
それと、別の外部デバイスのお試しを。
以下の写真の右のほうにうつっている、有線のコントローラーでも試してみました。
いろいろ、HIDデバイスの情報を閲覧できそうです。
おわりに
node-hid の hid-showdevicesコマンドで、HIDデバイスの情報を見てみるというのをやってみました。
引き続き、HIDデバイス絡みのことは、手をつけていければと思っています。ちなみに、WebHID をあれこれ試してみようと思っていたりします。
余談
ふと思ったことを余談で書いてみます。
HID を略さず書くと「Human Interface Device」で、タイトルなどに書いた「HIDデバイス」という呼び方を今までも使っていたけど、よく考えたら「Device が二重になっている?」とか思いました。
●Human interface device - Wikipedia
https://en.wikipedia.org/wiki/Human_interface_device
でも、HIDデバイスって言い方で、今まで見かけていたような気もすると思ったので、あらためて確認。「以下の WebHID の仕様のページ」を見るのが間違いなかな、と思って見てみたら「HID devices」などという記載があったので、気にしなくて大丈夫そうだなと思ったりなど。
●WebHID API
https://wicg.github.io/webhid/