読者です 読者をやめる 読者になる 読者になる

BppLOG

Berlin → Tokyo

WebBluetoothAPIのW3Cドキュメントを翻訳しました

プログラミング WebBluetooth javascript

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

Web Bluetooth API 日本語ドキュメント
https://tkybpp.github.io/web-bluetooth-jp/

WebBluetoothAPIとは

このAPIは、ブラウザ上からBluetoothLE(BLE)デバイスを操作することが出来るAPIです。

これにより、従来は iOS や Android で専用のアプリを作っていたところ、javascript だけでBLEを操作するアプリケーションの開発が可能になってきます。
このAPIは現在進行形で実装されており、つい先月にはMacのChromeからも利用出来るようになりました。Google I/O では、Fetch API や Web MIDI とともに、次世代のweb技術として紹介もされています。

events.google.com

私は、この WebBluetoothAPI を利用したライブラリの開発をしており、W3Cのコミュニティグループメンバーとして公式ドキュメントへのコントリビュートも経験することができました。
半年ほどこのAPIを触ってきていますが、日本語の情報がほとんど無いので翻訳してみました。なお、W3Cのコミュニティグループから翻訳の許可をいただいており、公認ではありますが公式ではありません。

Web Bluetooth API 日本語ドキュメント
https://tkybpp.github.io/web-bluetooth-jp/

(翻訳元)
https://webbluetoothcg.github.io/web-bluetooth/

目次

  1. はじめに
  2. セキュリティとプライバシーへの配慮
  3. デバイスの検索
  4. デバイスの表現
  5. GATT インタラクション
  6. UUID
  7. GATT ブラックリスト
  8. ナビゲーションインタフェースの拡張
  9. 用語と規則

※ 翻訳による内容の正確さおよび最新の内容を保証するものではありませんので、あくまで参考として利用していただき、適宜、W3Cの原文を参照していただくようお願いします。(翻訳に対するフィードバックやご指摘があればご連絡ください。)

サンプルとライブラリ

サンプル

このAPIを利用したサンプルも作成してみました。
GitHub - tkybpp/simple-webbluetooth
今回サンプルに利用したBLEデバイスは下記の3つです。

上記のBLEデバイスを、それぞれブラウザから操作して遊ぶことが出来ます。
(BB-8はめちゃくちゃ可愛いです。)

デバイスとの接続部分に関しては、簡易ライブラリとしても機能するようにしています。

ライブラリ

ジョインしているベルリンのスタートアップで、BLEデバイスとサーバをブラウザ経由で連携させることが可能なライブラリも開発しました。
これにより、デバイスの認証をサーバサイドで行い、デバイスとサーバ間をセキュアに通信させることが可能になります。
GitHub - highmobility/bluetooth-websocket-api

このライブラリでは、connect や read/write characteristic など全てのイベントをサーバからブラウザ経由で指示することができ、その操作結果をブラウザからサーバに返すことも出来ます。
これにより、イベントドリブンでアプリケーションを実装することが可能になります。下記のように、基本的なイベントはほとんど対応しています。
https://github.com/highmobility/bluetooth-websocket-api/raw/master/socket_messages.png

ブラウザとサーバ間の通信は WebSocket を利用しており、
Elixir/Phoenix を用いたサンプルも合わせて公開しています。

所感

日本語のドキュメントを翻訳しておきながら、このようなことを言うと元も子もない気がしてなりませんが、ドキュメントは英語で読める方が圧倒的に良いです。
今回は日本でのWebBluetoothの利用促進と、自分自身の仕様理解を深めるという目的もあり、翻訳をしていました。
英語は日本語に比べて情報量が10倍以上もあると言われていますが、まさにそのとおりです。英語でコミュニケーション出来ることによるメリットは主に2つあると感じています。

  1. 最新の情報を把握できる
  2. コミュニティメンバーに質問ができる

1つ目は、特に解説もいらないと思いますが、日本語のドキュメントは、英語の最新版が公開されてから翻訳されるまでにタイムラグがあります。また、いくつかの日本語ドキュメントはアップデートがされていない枯れた状態になっているものも多く見受けられます。正しい正確な仕様を把握するためには、やはり本家の情報をキャッチアップし続ける必要があります。

2つ目に関して、英語だと最新の情報が把握できるのはもちろんですが、世界中にいる専門家たちとコミュニケーションをとることも可能になります。WebBluetoohコミュニティグループの中心メンバーはgoogleのエンジニアたちです。基本的にはメーリングリストとgithubのissueで、最新の実装状況や仕様のヒアリングのやりとりがされています。実際にデベロッパーがQAやバグの報告をすると、googleのエンジニアからすぐにレスポンスが返ってきます。私も、パリやサンフランシスコにいるgoogleのエンジニアとよくやりとりをしています。

なお、このAPIを利用すれば javascript のみでBLEデバイスを操作できますが、
BLEに関する知識もあったほうが開発がスムーズになります。

BLEに関して一番詳しいのは、洋書ではこちらです。

Bluetooth Low Energy: The Developer's Handbook

Bluetooth Low Energy: The Developer's Handbook

日本語では、こちらの本がとても詳細に解説をしてくださっています。
iOS×BLE Core Bluetoothプログラミング

iOS×BLE Core Bluetoothプログラミング