12月に子供が生まれ、絶賛育児中です。
赤子のおむつや授乳の記録をつけているのですが、育児中は両手が塞がることが多く、スマホでの記録は不便。
この記事を参考に、声による入力で赤子の育児記録をできるようにしました。
Qiita – Google Homeに話しかけて娘のおむつ交換を記録する
まずは、おむつ編。
できるようになったこと
- 「OK Google, おしっこ」 でおむつ交換時刻をGoogle Sheetsに記録する。
- 「OK Google, うんち」 でおむつ交換時刻をGoogle Sheetsに記録する。
- 「OK Google, うんち [やわらかめ/多め]」 でおむつ交換時刻と便の状態をGoogle Sheetsに記録する。
実現のために利用する技術・サービス
- IFTTT(Google Assistant と Google Sheets)
- Google Apps Script
育児中にサクッと作ることが目的なので、なるべくIFTTTにあるパーツだけで作ります。
時刻の記録だけは、Google Apps Scriptを使ってGoogle Sheetsにコードを埋め込みます。
所要時間は1時間ちょっと。
前提条件
- Google Homeのセットアップを終えていること。
- IFTTTのSign Up済みであること。
- Googleアカウントがあること。
How To
IFTTTにAppletを追加
- IFTTTのMy Appletsで「New Applet」を選択。
- 「+this」をクリックし、「Choose a service」で「Google Assistant」を選択。
“google” で検索すると最初に出てくる。
初回はGoogle Homeと連携するための認証画面が表示されるので、IFTTTへの権限許可を行う。
- 「Choose trigger」で「Say a simple phrase」を選択。
- うんち/おしっこのフレーズと応答メッセージを入力する。Languageは”Japanese”。フレーズは数パターン登録できるので、使いそうなものを幾つか入れておくと便利。
入力を終えたら「Create trigger」をクリック。
- 「+that」をクリックし、「Choose action service」で「Google Sheets」を選択。
“sheet”で検索すると一発。
初回はGoogle Sheetと連携するための認証画面が表示されるので、IFTTTへの権限許可を行う。 - 「Choose action」で「Add row to spreadsheet」を選択。
前掲の記事では1件だけの記録でしたが、ログ形式でおむつ交換時刻をどんどん追記していく形にしています。
- スプレットシートのファイル名、出力内容、シートの場所を入力する。すでに存在するファイルを使用する場合はそのファイル情報を入力する。
出力は”|||”が行の区切りとなる。“{{CreatedAt}}”は準備されているのだけど実際は出力されない。
2018.05.25 バグが修正されたようで日付が出力されるようになりました。Google Sheetのスクリプトを追加せずとも現在時刻は入力されます。下記の様にスクリプトを設定している場合は、うまく動作しないので出力から”{{CreatedAt}}”を外したほうが良いです。 - 「Review and finish」でApplet名を入力する。わかりやすいものに変更したら「Finish」。
うんち/おしっこの時刻登録は、フレーズとGoogle Sheetへの出力内容を変えるだけであとは同じ作り方となる。
うんちの状態も登録したい場合
基本的な流れは同じだが、次の点を変更する。
- 「Choose trigger」で「Say a phrase with a text ingredient」を選択。
- Google Assistantにフレーズを登録する際、可変となる言葉を”$”で入力(”$”前後にスペースを入れること)。”$”は応答メッセージにも使用できる。
- Google Sheetでは、可変となる言葉を”{{TextField}}”キーワードを使用して指定する。
ここまでできたら、一度Google Homeに話しかけてみます。
- 問題なく応答メッセージが返ってくること
- Google Sheetに指定ファイルができていること
- Google Sheetに指定どおり列が出力されていること
を確認します。
ファイルが作成されたあと、背景色を変えたりヘッダを追加したりしても出力への影響はありません。
Google Sheetに列が追加されたら現在時刻を出力する
出力されたファイルに新規に行が追加されたら現在時刻を表示させるスクリプトを設定します。
- 「ツール」メニュー > 「スクリプトエディタ」選択。別タブにスクリプト入力画面が開きます。
- 以下のコードを入力し、適切な名前をつけてプロジェクトを保存する。
var sheet = SpreadsheetApp.getActiveSheet(); function addDate() { setDate(1, "yyyy/M/d"); setDate(2, "H:m:s"); } function setDate(col, format) { var lastrow = sheet.getLastRow(); if (sheet.getRange(lastrow, col).getValue() == "") sheet.getRange(lastrow, col).setValue(formatDate(new Date(), format)); } function formatDate(date, format) { return Utilities.formatDate(date, 'Asia/Tokyo', format) }
- 「編集」メニュー > 「現在のプロジェクトのトリガー」選択。「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」をクリック。
- 「実行:addDate(実行したいfunction名)」、「イベント:スプレットシートから、値の変更」を選択し、保存。
保存の際「承認が必要です」というダイアログが表示されます。
「許可を確認」し、Googleアカウントを選択すると、マクロの追加のためか、セキュリティの警告画面が表示されます。
「詳細」→「[プロジェクト名](安全ではないページ)に移動」をクリックし、Google ドライブのスプレッドシートの表示と管理に対するマクロの実行を許可してください。
これで、行が増えるなどスプレットシートの値が何か変更されたタイミングで、最終行の1列目に日付・2列目に時刻が自動入力されるようになります。ただし、すでに最終行の時刻が入力済の場合は、更新されないようになっています。
同じことをAmazon Alexaでできないの?
IFTTTのAmazon Alexaのパーツは、日本語の音声入力に未対応の模様(2018.01.30現在)。
なので、IFTTTを使ってパパっと作るのであれば、Google Assistant使うのが良いです。
運用状況
すっと、「音声入力より手でスマホから入力したほうが間違いも少ないし早いじゃん」と思っていましたが、育児をしていて”手が塞がっているときスマホ操作はできない”という当たり前のことに気が付きました。
手を使わずに入力できることをこんなに便利に感じる日が来るとは。
テクノロジーバンザイ。未来だ。
次回は授乳編。
One comment: