#TSUKAMON

DialogflowとGoogleHomeを使って筋トレログアプリを作った

ソフトウェア開発

2021/12/15 03:00

DialogflowとGoogleHomeを使って、日常のトレーニング記録を音声入力で実施できるアプリケーションを作った話をします。

DialogflowとGoogleHomeを使って筋トレログアプリを作った

この記事は『LITALICO Engineers Advent Calendar 2021』の16日目の記事です。

今日は、DialogflowとGoogle Homeを使った音声入力で筋トレの記録をつけるアプリを作った話をします。

何を作ったか

タイトルのとおりですが、筋トレ後ににGoogle Homeに

「OK, Google. 筋トレ記録 スクワット10レップ3セット」

と唱えたら、スプレッドシートにその実績が記載されるというアプリケーションです。
記録を参照して、Githubの草のようなものを表示させてニンマリすることを目的としたアプリです。

スプ氏

草

作った背景

コロナが始まってから、弊社でもリモートワークを前提とした業務がスタートしました。
リモートワークをやっていて、多くの方が共感するであろう問題として 運動不足 が挙げられます。

私もご多分に漏れず運動不足に陥り、肉体の衰えが精神の衰えにつながるかのように、どんどん気持ちが落ち込んでしまいました。

人間の脳は狩猟民族の時代からほとんど進化していないと言われていますが、
画面越しの人間と会話をして、コードを書き、ほとんどデスクから動かずに一日が終わるなど、本来の人間のあるべき姿からはかけ離れており、唾棄すべき生活習慣です。

このままではいけない。運動習慣を継続せねば!!

という熱い衝動が生まれ、運動習慣を支援するためのアプリケーションを作ろうと決めました。
(はよ筋トレしろ)

習慣をつけるのは人それぞれのやり方があると思いますが、
自分の場合は記録をつけて振り返るというのが最も効果があった施策なので、

「筋トレの実績を楽しく、簡単にできる!」

をテーマに記録アプリを作ることにしました。

なぜ音声入力か?

自宅にGoogleHomeがあり、日常的にスマートスピーカーでいろんなタスクをこなしていたというのが前提としてありますが、

アプリを開かず即座に記録ができる

というのが一番の理由です。

筋トレで追い込んだあと、画面とか見たくないです。
汗かいた体で椅子にも座りたくないし、スマホの画面も汗でスワイプうまく動きません。

また、記録もすごく複雑な内容ではなく、タイムスタンプ+αのメタデータ程度でよいので、手を使ったUIなどオーバースペックです。

何より、

「Ok, Google」

の一言で記録が始まるのどう考えてもスマートだなと。かっこいいなと。

そういう理由でGoogleHomeをベースにしました。

Dialogflowって何

Dialogflowは、Googleが提供する自然言語理解プラットフォームです。

会話形のUIを簡単に設計でき、Web・モバイル・botなどの外部の音声応答システムと簡単に統合できるサービスです。

Dialogflowは、エンドユーザーからの入力内容を分類し、Dialogflowのエージェントごとに定義された複数の インテント (ユーザーがやりたい事をまとめた意図を表すデータ)を結合し、エンドユーザーからの入力内容とマッチングします。

intent-match-forecast

基本的なインテントには以下の要素が内包されており、エージェントはユーザーの入力にマッチするインテントとそれに対応するアクションを実行し、レスポンスを返します。

  • トレーニングフレーズ
    • エンドユーザーの発言に含まれる可能性のあるフレーズのサンプル
    • エンドユーザー表現がこれらのフレーズのいずれかと似ている場合、Dialogflowによってインテントがマッチされる
  • アクション
    • 各インテントに対するアクションが定義できる。
    • インテントが一致すると、Dialogflowによってシステムにアクションが提供される。
  • パラメータ
    • 実行時にインテントが一致した際に、エンドユーザーの入力情報から抽出された値をパラメータとして提供
    • 日時、場所、人名など定義した値を構造化データとして使用できる
  • レスポンス
    • テキスト、音声、視覚的なレスポンスなど、ユーザーに返却するレスポンスを定義
    • 入力内容の詳細の質問をしたり、会話を終了するなど

以下がインテントのマッチングとエンドユーザーへのレスポンスの基本フローです

intent-match-respond-basic

インテントのマッチング後のアクションは、slackやGoogleChatなど主要なサービスへのインテグレーションが用意されていたり、webhookを利用して自前のシステムと連携することも簡単に行うことができます。

Dialogflowの詳細内容は、公式ドキュメントや詳しくかかれたブログ記事などがあるためそちらにまかせて省略することにします。

参考: 公式ドキュメント ※ DialogflowはDialogflow ESとDialogflow CSという2サービスがありますが、今回はESを使っています。

システム構成

システムの構成は以下です

DialogflowとGoogleHome連携の構造

Google Home / Google Assistant -> Actions on Google -> Dialogflow -> Google Spreadsheet(HTTPサーバー化) の流れで入力を行っています。

Spreadsheetへの記入は、サクッと運用したかったのでGASを使ってスプレッドシートの記録のためのAPIを作り、Dialogflowからwebhook経由でリクエストを送っています。

記録の流れ

Google Homeへ「OK, Google」してから記録完了までの記録の具体的な流れを書いてみました。

音声入力フロー

今の所は、記録を開始した日時のタイムスタンプ、実施した種目、具体内容という3種類の項目を記録できるようにしていますが、レップ数やセット数などを分離してパラメータとして扱ったり、その他の内容を記録できるような調整も可能となっています。

また今回は1種目の記録を実施したらタスクが完了してしまいますが、「ベンチプレス 10レップ3セット ダンベルフライ 10レップ3セット」などのように、一回の音声入力で複数の種目の記録ができるようにするなど、工夫次第でどんどん便利にできるので奥が深いです。

使ってみてどうだったか

このアプリを作ってからまだ1週間ほどしか経過していませんが、音声で記録がしたいが為に筋トレするまである程度に、ほぼ毎日何かしらトレーニングを行っているので、この記録アプリはひとまず成功したといえるでしょう。楽しいんですよ、記録が。

今後の展望としては、筋トレの記録ついでに自分のコンディションを記録できると良いかもしれません。 体の調子や精神的な調子が、筋トレの実績とどのように関連しているのかを把握できると良いですよね。Fitbitなどの生体情報のログと連動するなども良さそうです。

さらには、Googleカレンダーに筋トレスケジュールを記載しておいて、予定と実績との乖離が発生したら、GoogleHomeからお叱りを受けるようにするとより継続性が高まるかもしれません。

などと自分のためだけの音声ログライフを発展させたくなります。
スマートスピーカー楽しいなぁ。

おわりに

Dialogflowとスマートスピーカのコンボはかなり優秀で、日常行っている任意のタスクをスマートスピーカー経由で実行できるようになるのがイケすぎてて脳汁が出ます。

真面目な業務での応用でいうと、福祉施設向けに提供(自社・他社含め)での支援記録の音声入力対応なんかもチャレンジできるかもなと考えています。福祉業界に特化した自然言語処理プラットフォームを作るなど、夢が広がりますね。

ということで、本記事はこれにて終了。

明日は @sakagurachanさんがなにか書いてくれるみたいなので、是非見てみてください。

ソフトウェア開発」の記事

最新記事

COPYRIGHT TSUKAMON ALL RIGHTS RESERVED.