SORACOMでプロジェクトマネージャーをやっている久住(ニックネーム: Jin)です。
突然ですが、あなたは自分のことを褒めてますか?褒められてますか?褒めて欲しくありませんか?
2024/7/17に開催したSORACOM Discovery 2024のIoTプロトタイピングコーナーに展示するため、CREの加納(ニックネーム: Kanu)と一緒に「薬の飲み忘れ防止IoT」を開発しました。会場では語りきれなかったことも含めてここに紹介いたします。プロトタイピング(試作)の様子として、後に続く人の一助となれば幸いです。
プロトタイピング “試作” とは、達成したいことを見つけ出すこと
IoTプロトタイピングは生活のちょっとしたことを解決することをテーマに進められました。その中で一人の社員が「薬を飲み忘れてしまい困っている」と共有しました。さっそくIoTを使って・・・とはならず、まずは簡単にヒアリングをしたところ、次のような状況が見えてきました。
- 決められた時間に薬を飲むことができなくて困っている
- スマホで写真を撮り記録しているが飲んだかどうかもわからなくなることがある
- 忘れてしまうとモチベーションが下がる
- 仕事中はスマホを見ないのでリマインダーにも気付けないことがある
すでに身近なものを使ってなんとか解決しようとしているものの、どうにもうまくいかないという苦労が伝わってきました。そしてその人はぽつりと言いました。
「ちゃんと薬を飲めたら褒めてほしい」
そうです、褒めて欲しかったのです!
みんなも褒めて欲しいですよね!仕事で、プライベートで、頑張っているんだから。その瞬間、このプロトタイプの機能的なゴールと感情的なゴールが決まりました。
- 機能的なゴール:薬を飲み忘れない
- 感情的なゴール:褒められてモチベーションがあがる
時には割り切りも大切
出来上がったものがこちらです。
- 開閉センサーが設置されたピルケース
- 薬を飲んだことを記録するWebアプリケーション兼リマインダー
- 褒めてくれるSlack Bot(重要)
どうやったら薬を飲み忘れないかを議論する中で、1回分ごとに薬を分けて保管するピルケースや、カメラの画像認識で残量を管理するなど、かなりリッチなアイディアも出ました。しかし、持ち歩けないとダメ、毎週・毎月薬を分類できるくらいマメなら困っていない、という至極真っ当なフィードバックを受けてあえなく没となりました。
そこで、思い切って機能を割り切り、服薬記録はなるべく簡単にして人間に担当させ、リマインドと褒めるところはIoTで実装する、というアプローチを取ることになりました。
このアプリはこんな動きをします。
- 薬を飲む時間にピルケースが開いていないとGoogle AppSheetからSlackにメッセージを投げ服薬を促します
- ピルケースが開くと、SORACOM Lagoon経由でSlackに「箱が開いたみたいですが、薬飲みましたか?写真撮って記録してくださいね。」とWebアプリケーションのURLとともにメッセージが投稿されます。同時にSORACOM Beam経由でGoogle Spreadsheetにリクエストが投げられ記録されます。これによって、1のピルケースが直近で開いていないという判断が可能になっています。
- 薬を飲んだらWebアプリケーションで写真を取り投稿します。(これで飲んだかどうか不安になっても振り返ることができます!)
- 新しいお薬記録が追加されるとSlackに「お薬記録が追加されました。ちゃんと飲んでいてえらいですね!」と表示されます
- 褒め言葉がもっと欲しい場合は、「クスリ飲んだ」アイコンをクリックすると、Slack Workflowで作成した褒めるBOTが「えらいっ!」と追加で褒めてくれます。
ノーコードと生成AI活用
開閉検知には、「SORACOM LTE-M Button Plus」と「磁気センサースイッチ」を使用しました。こちら( https://soracom.jp/store/5237/ )でIoT体験キットとして販売しています。デバイス側でコーディングは必要なく、ボタンを押すとソラコムプラットフォームに自動的にデータが送信されます。
データはSORACOM BeamでGoogle Spreadsheetに連携しています。送信先を書くだけなのでかんたん。
Google SpreadsheetでPOSTを受けられるようにするためには、GAS(Google Apps Script)でスクリプトを書きWebアプリとしてデプロイする必要があります。Google AppScriptでHTTP POST(doPost)を受け付ける最小コードを元に、PerplexityとChatGPTの力を借りて作成しました。
薬記録とリマインダーの設定にはGoogle AppSheetを使いました。Google Spreadsheetをデータベースとして使えることが大きなメリットです。パーツを組み合わせるだけで、Webアプリを作ることができます。
AppSheetはプレビューを見ながらパーツを組み合わせて画面を作成できる
AppSheetはWebhook・Eメール・MobileAppへのPushで通知を送ることができます。これによって、平日の午前中はSlackの特定チャンネルにリマインダーを送信する、ということが可能です。
しかし、AppSheetはPOSTリクエストを受けて自動的に通知する、というようなリアルタイムでのデータ連携ができません。そのため、ピルケースの開閉イベントの通知にはSORACOM Lagoonのアラート機能を用いてSlackへ連携しました。ここでの設定方法はSORACOM Support Botがよくわからないところをサポートしてくれてとても助かりました。
AppSheetにお薬記録が追加されると、それをトリガーにWebhookを呼び出して「お薬記録が追加されました。ちゃんと飲んでいてえらいですね!」というメッセージをSlackに表示します。これもAppSheetにテンプレートがあるので、URLとメッセージを入れるだけです。
最後はSlack Workflowを使い、Slackのメッセージに「クスリ飲んだ」絵文字を追加すると「えらいっ!」とおかわりがもらえるようにして完成しました。
生成AIにわからないところを聞きながら、コードを書かずにとりあえず動かせるというのはまさに技術の民主化であると言えますね。
難しいことは生成AIにやってもらおう
さて、生成AIや各種ツールを活用すれば、すばやいプロトタイプ作成が可能です。しかし、最適なリマインダーの送り先はユーザーの状況によって異なり、それをちゃんとカバーしようと思うとなかなか複雑な条件分岐を作成しなければいけません。ノーコードツールを使うとコードを書くよりも手間がかかることもあります。
そこでGPT-4oを使い通知先を自然言語で指示できるのか試してみました。以下はそのプロンプトと回答です。
> ユーザーの入力 # 指示 あなたは最適な通知タイミングと通知チャンネルを判断する者です。 ユーザに「今の日時と時間を教えてください」と聞き、 条件に合致する通知タイミングと通知チャンネルを提示してください。 条件を絞り込みたい場合はユーザーに質問してください。 # 条件 平日の9時から17時は仕事をしているのでSlackでメンションして欲しい。 それ以外の時間はスマホを見ることがあるのでLINEで通知して欲しい。 休日は家事をしていることが多いのでAlexa経由で通知してもらえると嬉しい。 毎月1日と15日はオフィスにいるので、オフィスのスピーカーから通知されるといい。 毎日、平日13時から14時は打ち合わせが入っているので打ち合わせの後で通知して欲しい。 < 回答 理解しました。それでは、最適な通知タイミングと通知チャンネルを決定するために、今の日時と時間を教えていただけますか? |
> ユーザーの入力 2024/6/19 13:30です < 回答 最適な通知タイミングとチャンネル 通知タイミング: 2024年6月19日14:00 通知チャンネル: Slackでメンション |
おお、何かできていそうですね。条件が追加された場合は自然言語で追加していくだけなのでユーザーフィードバックをもっと素早く盛り込むことができます。SORACOM Discovery 2024で発表したSORACOM Flux を使えば、こういった判定もワークフローに組み込むことができますので、これからアプリを作る方はぜひ試してみてください。
まとめ
このプロトタイプを、薬をよく飲み忘れる社員に実際に使ってもらったところ、こんなフィードバックをもらいました。
- 1週間忘れずにに飲むことができた
- 飲んだ日時がデータで可視化できる点が便利
- 記録が付くことや、褒めてもらえることで飲み続けるモチベーションになった
- 「これ、自分でも作れるのかな?自分でもやってみたいなぁ」という気持ちが湧いてきた。「動くものを見せる」というのが、社内で IoT の仲間/協力者を増やす効果がある
ノーコードツール・生成AIはプロトタイピングの効率をあげるだけでなく、非エンジニアの企画参入をうながし、課題解決をより容易にするものです。よくわからないこと・難しいことはAIにやってもらい、生活をちょっと良くするアプリ・サービスを作っていきましょう。
― ソラコム コネクティビティ プロジェクトマネージャー 久住(Jin)