LoginSignup
5

More than 3 years have passed since last update.

音声で作業工数を記録して進捗をバーンダウンチャートで確認できるシステムを作成【スプレッドシート(GASでHTTPサーバ化)+GoogleAssistant+Dialogflow+Googleサイト】

Last updated at Posted at 2020-05-10

作ったもの

 Google Homeから音声で作業工数を記録できて、ダッシュボードで進捗のバーンダウンチャートを確認できるシステム。

バーンダウンチャート

↓のようなグラフ
image6.png
 使用例:バーンダウンチャートで子どもの夏休みの宿題を「マネジメント」した話

動機

なぜ音声記録か

早い

  • スマートスピーカーは常時スタンバイ状態なので、アプリ起動を待たずにいきなり入力できる
    • スマホだと入力までに何ステップもかかってしまう。
    • 電源ON > ロック解除 > アプリ起動 > 入力

  • 入力に手を使わなくて済むので、ながら作業で入力ができる
  • 1日に使用できるWillパワー(意志力)は限られている。Willパワーを消費しない楽な入力方法には価値がある。

記録が早く楽になることで、敷居が下がり、習慣化しやすくなる。

IFTTTに対するメリット

IFTTTでも簡単に音声記録システムは作れるが、Dialogflowで作れば以下のようなメリットが得られる。

  • 日付値を扱いやすい形式で記録できる
    • IFTTT:「March 3, 2019 at 10:40PM」のような形式。日時ごとの集計がしにくい。
    • Dialogflow:「2020/05/02 10:38:36」のような形式。スプレッドシート標準の日付関数で扱える。
  • 一貫した文字列タグでシートに記録できる
    • IFTTT:音声認識の表記ゆれがログデータのタグに反映されてしまうため、集計時に文字列一致が使えない。
    • Dialogflow:EntityのEntryを定義するので、音声認識の表記ゆれを吸収してくれる。一貫したタグでログデータを記録できるため、集計時に文字列一致が使える。
  • 応用が利く
    • GASでHTTPサーバ化するので、POSTリクエストを受け付けるときに複雑な処理が追加できる。

構成

大まかな動作の流れ

  Google HomeやAndroidスマートフォンを通してGoogleアシスタントに作業内容・時間を伝えると、Google Apps ScriptでHTTPサーバー化したGoogleスプレッドシートにログが蓄積され、スプレッドシート上で集計してグラフ化されたバーンダウンチャートが、Googleサイトで作成した自分用のダッシュボードに表示される。

システム構成

音声記録部分

image2.png

閲覧部分

image8.png

工数記録のフロー

image8.png

作成手順

(youtube動画)

使用アプリのリンク集

各アプリについて

Actions on Google

Google アシスタントの開発プラットフォーム。Dialogflowで作成したエージェントをテストしたり、デプロイしたりできる。

参考サイト

Dialogflow

 Dialogflowは、会話型UIを設計して音声応答システムが作れる自然言語理解プラットフォーム。人間の入力から、発音の曖昧さや表記ゆれ、言い回しの違いをいい感じに吸収して、コンピューターが扱いやすい形式に変換してくれる。

image3.png
Dialogflowの公式Docs Dialogflowの基本より
インテントのマッチングとエンドユーザーへの回答の基本フロー

構成要素

  • エージェント(Agent)
    • 人間の言語のニュアンスを理解する自然言語理解モジュール
    • Dialogflowの1つのプロジェクトがエージェントに対応する。
    • 本記事では、「work-record1」というエージェントを作成した
  • インテント(Intent)
    • 1 回の会話ターンにおけるエンドユーザーの意図を分類する。
    • 以下のものが含まれる。
      • トレーニング フレーズ(Training phrases):エンドユーザー表現のサンプルフレーズ。エンドユーザー表現がいずれかと似ている場合、Dialogflow によってインテントがマッチングされる。
      • アクション(Action):インテントがマッチングしたときにトリガーするアクション。
      • パラメータ(Parameters):エンドユーザー表現からどんな値を抽出するかの定義。エンティティ タイプ(数値型、日付型、自作etc...)に沿って値が抽出されるので、ロジックの実行やレスポンスの生成に簡単に使用できる。
      • 回答(Response):テキスト、音声、視覚的な回答を定義してエンドユーザーに返す。
    • 本記事では、以下の2つを使用した。
      • 初期状態で用意されている「Default Welcome Intent」
      • 新規作成した「作業を記録」Intent
  • エンティティ(Entity)

    • エンドユーザー表現のデータの抽出方法を指定する。2種類のエンティティがある。
      • 事前定義のシステム エンティティ
      • 独自定義できるカスタム エンティティ
        • 本記事ではwork-targetエンティティを作成した。
    • エントリ(Entry)
      • エンティティ タイプごとに多数のエンティティ エントリを定義できる。
      • 本記事では、「work-target」エンティティに、「制御2級」「情報2級」の2つのエントリを定義した。
      • image5.png
  • フルフィルメント(Fullfillment)

    • Fullfillment:通信販売においては、受注から配送までの一連のプロセス全体のこと(受注、梱包、在庫管理、etc...)
    • Dialogflowにおいては、外部サービスとの連携の設定。以下2つのどちらかを選べる。
      • Webhook:外部サーバへPOSTリクエスト
      • Google Cloud Functions(Node.js)で処理
    • 本記事ではHTTPサーバ化したスプレッドシートにPOSTリクエストを送り、GASでJSONを解釈してシートに作業内容・作業時間を記録した。
  • コンテクスト(Context)

    • (今回は使用しなかった。)

参考サイト

Googleスプレッドシート

Google版エクセル。データ本体がGoogleのサーバにあるので、各種WEBサービスとの連携やデータ公開に優れている。

Google Apps Script(GAS)

G Suiteアプリ開発プラットフォーム。スプレッドシートのマクロを作成したり、WEBアプリを作成したり、カレンダーなど他のGoogleサービスとやり取りしたりできる。

 本記事ではスプレッドシートにGET/POST処理を記述したスクリプトを追加することでHTTPサーバ化した。

参考サイト

Google Sites

 WYSIWYGでWEBサイトを作れるサービス。2016年にリニューアルされた。プロジェクトや部署内の情報共有など、小規模組織の情報共有のような使い方が想定されているみたい。

 GoogleカレンダーやTodoistなどWEBアプリを埋め込むことができて、セルフマネジメント用のダッシュボード作成に便利そうだったので採用した。

参考サイト

課題

2回に分けて入力(「OK Google, 作業記録」「制御2級 1時間」)ではなく、1回で入力(「OK Google, 作業記録で作業を記録、制御2級 1時間」)する方法があるようですが、うまくいかなかったので、分かる方がいらっしゃれば教えていただければ幸いです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5