2021年07月29日 更新

様々なBLE開発手法

どうも、クラゲです。
今回はBLEの開発手法についてどのようなものがあるのかと、結局どれが楽なのかを解説します。

【 概要 】

[TOC]


最も楽な開発手法は?

BLEアプリを開発するにあたり、手法として考えられものを大きく4つ挙げてみました。
クラゲの独断と偏見も混じってますが、学習コストや使い勝手の良さの度合いに応じて ◯ △ × の評価を付けました。

開発手法 プログラミング言語 開発環境 その他
Android
ネイティブアプリ
×
Java or
Kotlin
×
Android Studio
×
スマホアプリ独特の
お作法必要
iOS
ネイティブアプリ
×
Objective-C or
Swift
×
Xcode
×
スマホアプリ独特の
お作法必要
noble
JavaScript with
node.js

テキストエディタ

フロントとバックエンド
両方開発必要
Web Bluetooth API
JavaScript

テキストエディタ

対応OSや対応機能に
1部未実装あり

結論から言うとWeb Bluetooth APIが最も使い勝手良く、お手軽にBLE開発できます。
それでは、それぞれについて詳細を見ていきましょう

Android/iOSネイティブアプリ

表では最も評価が低いことになっていますが、あくまでこれは学習コストが非常に高いということであり、そのアプリの出来栄えとは関係のない評価です。
本格的なBLEスマホアプリを作る必要があるならば、スマホアプリ開発1択しかないと思います。
また、普段からスマホアプリ開発をして慣れている人は、敢えて他の手法で行う必要もないでしょう。

ちょっとしたプログラムを記述するには、先ほどの表の中ではやはりJavaScriptが一番で、JavaやSwiftなどは本格的な開発向きです。
開発環境もAndroid StudioやXcodeは、出来ることが多すぎて覚えるのも大変です。正直クラゲは、インストールや立ち上げるだけでもうんざりします。
"その他" に書いた "スマホアプリ独自のお作法" というのは、Androidでいうとmanifestやxmlの記述方法、apkをリリースする時の電子署名などです。また、ユーザーが実行するにはアプリインストールが必要です。
最近はハイブリッドアプリなどでJavaScriptでも開発できると思いますが、結局開発環境やスマホアプリ独自のお作法からは逃れられないと思います。

そういう訳で、初心者がちょっとしたBLE通信がやりたいときは、この選択は無いかなとクラゲは思います。
繰り返しますが、本格的なBLEスマホアプリを作りたいなら、この開発しかありません!

noble

nobleはnode.jsを使ってJavaScriptでBLEのセントラル側の開発が可能なライブラリです。
ペリフェラル側のも同様にblenoというライブラリがあります。
https://github.com/sandeepmistry/noble

プログラミング言語はJavaScriptで開発環境もテキストで出来るのでお手軽ですが、node.jsなのでバックエンドとフロントエンドの両方を記述しなきゃいけないのがクラゲには面倒に感じました。
また、主にPCやRaspberryPiなどで実装することになります。スマホに実装させるのはちょっと難しそうです。クラゲはスマホでも簡単にBLE通信したいので、この手法はパスします。
PCやRaspberryPiでBLEがやりたくてnode.jsが得意な人はこの開発も良いと思います!

Web Bluetooth API

最もクラゲの評価が高いのはこれです。
Web Bluetooth APIを使うと、フロントエンドのJavaScriptのみでBLE通信できちゃいます!
開発環境は普通にHTML/JavaScriptを開発するのと全く同じです。特別な開発環境やライブラリは一切不要です。
ブラウザ実行なので、PCでもスマホでもいけます。
しかし、気をつけなればいけない点があります。表の中で△にしている理由が1部OS未対応や1部機能未実装があることです。しかし、今後しばらくすればきっと全対応されていくと思います!

さて、そんな素晴らしいことばかりのWeb Bluetooth APIなのですが、サンプルの中身を覗いてみるとJavaScript初級者には辛い記述がありました。
Arrow FunctionやPromiseやAsync Awaitなどの記述です。

  navigator.bluetooth.requestDevice(options)
  .then(device => {
    log('> Name:             ' + device.name);
    log('> Id:               ' + device.id);
    log('> Connected:        ' + device.gatt.connected);
  })
  .catch(error => {
    log('Argh! ' + error);
  });

知らない人はえっ何これ?って感じだと思います。これらの記述はES2015(ES6)という新しいモダンなJavaScriptの記述方法です。また学習コストが。。。うーん、これは困りますね。。。

そこでクラゲは触手を伸ばして頑張りました!
これらのモダンなJavaScript記述を意識することなく、さらにもっと簡単にWeb Bluetooth APIが扱えるようになるラッパーライブラリを作りました。
その名は BlueJelly.js です!

これを使うことにより、JavaScript初心者も初級者の皆さんはもちろん、中級以上のお兄さんお姉さん方も超簡単にWebBluetoothAPIが出来ます!
さあ、BlueJellyを使って、BLEを楽々開発しようじゃありませんか!
クラゲのブログページでは、BlueJellyのAPIリファレンスはもちろん、基礎的な使い方、応用的な使い方、BLEそのものの知識もバンバン載せていきますので、ぜひご利用してみてください!

BlueJellyって何だよ!

以上、様々なBLE開発手法でした。