Web USBでPaSoRiを扱えるOSをまとめてみた


# 3行で

* WebUSB 楽しい
* でも、PaSoRiはmacOSかAndroid以外は面倒or無理かも
* WebUSB+NFC 楽しい

# 本題

[先月投稿されたこの記事](https://qiita.com/saturday06/items/333fcdf5b3b8030c9b05)を見て、社内のNFC勢としては、`script`タグですぐ使えるライブラリを作ってみたり [^1]、会社の社員証も読み込めないか試行錯誤してみたり[^2]、してました。

で、いろいろと社内レベルでも実運用を考えてみた場合、気になるのがOSについて。
ブラウザはとりあえずGoogle Chromeとしても、「じゃあどのOSでなら動くのか？」が重要になるかと思います。
「Windows PCなら安かったり余りがあるから常時稼働させても大丈夫」「ラズパイなら場所も取らないしもっと楽じゃね？」とかあるじゃないですか。

というわけで、手元で試せる環境で色々と見て回ってきました。

## 前提条件

* [前述の記事のデモサイト](https://saturday06.github.io/webusb-felica/demo.html)でIDmを表示させるところまでを確認する
  * 2019年以降、別のツールでIDm認識までできればOKに変更
* 使用するカードリーダーデバイスは、**Sony製PaSoRi RC-S380** 
* 使用するブラウザはGoogle Chrome系（自分が低コストで調べられる範囲で）
    * Google Chrome
    * Google Chrome Canary
    * Chromium Web Browser
* **今回突っ込んだ確認はしません**

## 結果

### macOS

|OS|ブラウザ|バージョン|その他条件|どこまで動くか|
|:--|:-------|:---------|:---------|:-------------|
|Yosemite(10.10.5)|Google Chrome|62.0.3202.62|(なし)|IDm表示までクリア|
|El Capitan(10.11.6)|Google Chrome|62.0.3202.94|(なし)|IDm表示までクリア|
|Sierra(10.12.5)|Google Chrome|61.0.3163.100|(なし)|IDm表示までクリア|
|Sierra(10.12.6)|Google Chrome|62.0.3202.94|(なし)|IDm表示までクリア|
|Sierra(10.12.6)|Google Chrome Canary|64.0.3273.0|(なし)|IDm表示までクリア|

当然のごとく普通に動作しました。
バージョン61からWebUSB APIが有効になったっぽいので、基本的にOSは選ばないと思って問題ないのでしょう。


### Windows

|OS|ブラウザ|バージョン|その他条件|どこまで動くか|
|:--|:-------|:---------|:---------|:-------------|
|Windows 7 Ultimate SP1|Google Chrome|62.0.3202.9|(なし)|デバイスが見つからない|
|Windows 7 Ultimate SP1|Google Chrome|62.0.3202.9|管理者モードで起動|デバイスが見つからない|
|Windows 7 Ultimate SP1|Google Chrome|62.0.3202.9|Enable new WebUSB backend|デバイスが見つかるが、`Access Denied`|
|Windows 7 Ultimate SP1|Google Chrome|62.0.3202.9|Enable new WebUSB backend+管理者モード|デバイスが見つかるが、`Access Denied`|
|Windows 10 Pro|Google Chrome|62.0.3202.62|(なし)|デバイスが見つからない|
|Windows 10 Pro|Google Chrome|62.0.3202.62|管理者モードで起動|デバイスが見つからない|
|Windows 10 Pro|Google Chrome|62.0.3202.62|Enable new WebUSB backend|デバイスが見つかるが、`Access Denied`|
|Windows 10 Pro|Google Chrome|62.0.3202.62|Enable new WebUSB backend+管理者モード|デバイスが見つかるが、`Access Denied`|
|Windows 10 Pro|Google Chrome|73.0.3683|デフォルト設定+ZadiによるWinusb.sys利用|IDm認識までいける|

[（Windowsで）WebUSBでPasoriを扱ってみる](https://qiita.com/frameair/items/abcaebbd654c304a0906)を実際に手を動かして試す機会があったので追記しました。

素の状態では無理だけど、デバイスドライバを適切に扱えるものに切り替えることで動きはしますね。
閉じた環境でないと難しそうですが、それでも動くのはありがたいです。

~~見事なまでの全滅っぷり。ここまで来ると自分が最低限必要な準備を怠ったのかなと思うレベル。
挙動を整理すると、こんな感じでした。~~

* ~~デフォルトでは見つけられない~~
* ~~flagsでEnable new WebUSB backendを有効にすると、リストに出るようになる。~~
* ~~が、アクセスしようとすると失敗する~~
* ~~管理者権限でも変わらない~~

~~デバイスへのアクセスをするときに何か特別な条件が必要なんでしょうか？~~

### Linux系

|OS|ブラウザ|バージョン|その他条件|どこまで動くか|
|:--|:-------|:---------|:---------|:-------------|
|Ubuntu 16.04|Chromium Web Browser|62.0.3202.62|Parallels上のVM|デバイスが見つかるが、`Access Denied`|
|CentOS 7.2|Google Chrome|62.0.3202.94|VirtualBox上のVM|デバイスが見つかるが、`Access Denied`|
|Arch Linux|Google Chrome|(あとで確認)|(※1)|PASMOのIDmの表示までOK|

あまり良い結果が出ませんでした。

適当にインストールした感じでは、**「リストには最初から出るが、接続しようとすると失敗する」**という理由を追うのにちょっと躊躇する結果に。要はWindowsで`Enable new WebUSB backend`した時と同じでした。
ちなみに手元にRaspberry Piがあったのですが、インストール済みのRaspbianではすぐインストールできるChromiumはバージョン56ぐらいまでらしく、調査を断念しました。

...だったのですが、[こちらの記事](https://qiita.com/frameair/items/596724fc2f3438ea7925)を見てなるほどと思い手元で確認したところ、「udev設定による通常ユーザーのアクセス許可」+「USB Driverのunbound」でめでたくIDm取得まで確認できました。感謝感謝
つまりそういうことだと思うので、過去に調べてみた組み合わせもうまくいきそう？


### Android系

|OS|ブラウザ|バージョン|その他条件|どこまで動くか|
|:--|:-------|:---------|:---------|:-------------|
|Fire OS 5.6.1.0|Amazon Slik|(未確認)||PASMOのIDmの表示までOK|
|Fire OS 5.6.1.0|Google Chrome|65.0.3325.109||PASMOのIDmの表示までOK|
|Android 8.0.0|Google Chrome|69.0.3497.100||IDm認識までいける|

Android+Chrome系ならうまくいく模様

## 感想

そりゃ最近できたばっかりだし、Google主導だし対応できないほうが多いですよね。
試せてない環境だとChromebookとかは動いてくれないかなと期待してるのですが、手元にないので今回はパス。

もうちょっとバージョンが上がったりしたらまた試そうかなと思います。




[^1]: 今のところ非公開です
[^2]: 結果については秘密で