こんにちは。144Labの今津です。
うんこボタンは売れてませんが、名前のインパクトのおかげか展示会などでは「知ってるよ!」と言っていただける機会も増えました。その中で「こういう用途に使えるかな」といったお話を伺うことも増えてきたので、うんこボタンとは別のシステムを開発するときに備えて、うんこボタンのシステムのキモになる部分を切り出したいと考えています。 今日は、それを(うまい名前が思いつかないので)仮に「汎用ボタン」として、どういうものを考えているのかを書いてみます。
うんこボタンのシステムのキモ
うんこボタンは個人的な記録を助けるための道具としての、無線LANを介した通信を行う押しボタンスイッチです。「個人的な」用途の道具ですので、その装置を「個人(ウェブアプリのアカウント)」とひもづけることが、使い始めるためには必要です。
単純な方法は、デバイスに固有のIDが書いて(QRコードだったり)あって、それをアプリの画面上で入力する、というものでしょう。 でも、うんこボタンでは採用しませんでした。理由はいくつかあります。使う人の視点では入力間違いもありうるでしょうし面倒くささは否めません。提供する側としてはいちいちハードウェアのIDが書かれたシールなどを間違いなくその個体に貼り付ける工程が必要です。
というところから、ウェブアプリからうんこボタンデバイスのウェブアプリに誘導しつつ、ひもづけのための情報を「ウェブアプリサーバー→うんこボタンデバイス→APIサーバー」と運ぶことで、アカウントとデバイスをひもづける方法を選択しています。 ここがうんこボタンのシステムのキモのひとつです。
汎用ボタンって?
汎用ボタンは「汎用的に使えるボタン型デバイス」のことではなく、うんこボタンのような何かしらのデバイスを外部システム(既存のウェブアプリだったり)の入力(「ボタンが押されましたよ」)として導入しやすいように、
の組み合わせとして、うんこボタンのシステムのキモを提供する仕組みです。
登場するモノ
ユースケース
- ボタンデバイスを有効化する
- ボタンデバイス有効化通知
- ボタンデバイスの有効化が完了したことを外部システムに知らせる
- ボタンデバイスのイベントを通知する
- ボタンデバイスの押しボタンスイッチが押されたことなどのイベント発生を外部アプリに通知すること
「押しボタンスイッチが押されたことなどのイベント」としたのは、デバイスによっては押しボタンではなくセンサー測定値の送信などの場合も考えられるから。
外部システム
設定として持ってるもの
API
データとして持っているもの
ボタンデバイス
設定として持っているもの
HTTPサーバー
データとして持っているもの
なし。 最初はボタンデバイスにトークン保存したら、と思ったけど当社APIサーバーを介する形であればボタンデバイスに保存しなくても、APIサーバー側で保存すれば良さそう。
汎用ボタンAPIサービス
設定として持っているもの
API
クライアントを認証する仕組みがある。 ヘッダーに格納されたAPIアクセスキーを使用する。 ボタンデバイスの個体にひもづいておりアクセスの度に検証する。
データとして持っているもの
デバイスを有効化する時
汎用ボタンAPIサービス側でデバイスIDとトークンのひもづけをしておく。
デバイスでイベントが発生した(押ボタンを押したとか)時
送られてくるデバイスIDに対応するトークンを付与して外部サービスのAPIを実行することで、外部サービス側はどのアカウントにひもづいたデバイスのデータなのかがわかる。
これができると何がうれしいのか
「うんこボタンみたいな感じのシステム開発」を「うんこボタンのカスタマイズ」じゃなくて、「汎用ボタンをベースにした新規(差分)開発」にすることができると、僕らがうれしい。カスタマイズで対応し続けるのが必ずしもうれしくないのは十分経験済みだし。
「うんこボタンみたいな感じの仕掛け」を自分たちのシステムやアプリに組み込みたいと考えているお客様がうれしい、とうれしいですね。
今後の予定
この仕組みを作ること自体は決めているので、この開発自体を勧めつつ、次の半年くらいをめどに計画しているうんこボタンサービスのリニューアルをこの仕組みをベースにしたものにしようと目論見中。