Google Homeに話しかけて手軽に行動ログを記録できるようにした

#はじめに
在宅フリーランスしています。今日一日何をやっていたっけ？とわからなくなったりしていて、生産性も把握しないとという思いもあり作業記録をカンタンに取れるものはないかと色々試していました。
そこでGoogle Homeで音声記録できたらカンタンじゃない？と思い、今からやることをGoogle Homeに話しかけて、それをGoogleスプレッドシートに記録するようにしてみました。

#参考にした記事
- [Google Home、IFTTT、Googleスプレッドシートを使って独自音声コマンドでログをとる（ついでにNode.jsやngrokやらも使ってLINEやGoogle Homeに通知する）](https://qiita.com/miso_develop/items/be562d8a823ad2639d94)
- [Google Home に話しかけるだけで、日記を書く仕組みを作ってみた](https://qiita.com/kaoritter/items/90b9cc491be7593fa2de)

#使用したもの
- Google Home Mini
- IFTTT
- Googleスプレッドシート & Google Apps Script

#やったことの概要
1. Googleスプレッドシートの作成
2. IFTTTのApplet作成。トリガーとなるフレーズとGoogleスプレッドシートへの書き込み処理を登録
3. Googleスプレッドシートに日時を取得するスクリプト設定

#1.Googleスプレッドシートの作成
任意の場所に新規でGoogleスプレッドシートを作成します。
私はフォルダ「GoogleHome」を作成し、そこにファイル名「日記」のスプレッドシートを作成しました。
フォルダ名、ファイル名はIFTTTの設定で使用します。

#2.IFTTTのApplet作成
まずはトリガーとなるフレーズを登録する「this」の作成。
[IFTTTのNew Applet](https://ifttt.com/create)から「this」をクリック。
![スクリーンショット 2017-12-14 13.57.36.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/b64ce17c-809d-ed89-4d8a-5db0a7b8d70c.jpeg)

##thisの設定
「this」はGoogle Assistantを使います。
![scr2.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/b25c7e57-8c49-941e-c1f5-81d38fde354c.jpeg)

今回は話したことを記録してほしいのでトリガーには「Say a phrase with a text ingredient」を選択
![this1.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/47627ab2-2df2-84f0-177b-38debc649247.jpeg)


トリガーを設定
・トリガーとなるフレーズを設定します。３パターン登録可能です。
・4行目はGoogleHomeの応答。ちゃんと認識されたとき返事をしてくれます。
例えば、「ねえ、Google　今から掃除をするよ」と話しかけると「はーい　掃除がんばってね」と返事をしてくれるわけです。
![this2.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/23acc75a-98d6-1982-3a97-04180b364fbc.jpeg)


##thatの設定
Googleスプレッドシートへの書き込み処理を行う「that」を作成します。
「that」をクリック。
![that.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/3b73fd6f-a8cf-51ca-c9d4-13cc44b44196.jpeg)

Google Sheetsを使います。
![that2.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/d81a3d4e-8c00-8e45-ba18-7a7104c6af73.jpeg)

スプレッドシートに行を追加していくので「Add row to spreadsheet」を選択
![that3.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/fcfee8bd-1761-d794-b213-50591c4a58e9.jpeg)


作成したスプレッドシートのファイル名とフォルダ名を設定。
「Formatted row」には作成したスプレッドシートのフォーマットにあわせて記入します。
A列に「日付」B列に「記録したいフレーズ」としたいので以下のようにしています。|||で1セルの意味になります。[TextField]にはthisの$が反映されます。
![that4.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/ab794d83-ca61-b163-e6bf-f58d36a7e593.jpeg)

これでIFTTTのAppletが完成です。

#3. Googleスプレッドシートに日時を取得するスクリプト設定
日付と時刻がIFTTTで設定できない（バグ？）ためスプレッドシートのスクリプトで日時を設定します。

- A列に現在時刻を設定
- 現在時刻と前行の時刻の差分を取って、経過時間（作業時間）を分単位で算出して前行のC列に設定
- 最後の行は時間単位に変換してD列に設定。ただしこの計算では差分が24時間以内でないと正しく算出されません。ぱっと見の目安として表示しています。

```javascript
var sheet = SpreadsheetApp.getActiveSheet();

function addDate() {
  var lastrow = sheet.getLastRow();
  var currenttime = new Date()  
  if (sheet.getRange(lastrow, 1).getValue() == "") 
    sheet.getRange(lastrow, 1).setValue(currenttime);
  
  if (sheet.getRange(lastrow-1, 3).getValue() == "")
    var starttime = sheet.getRange(lastrow-1, 1).getValue()
    var elapsedtime = parseInt((currenttime.getTime()-starttime.getTime())/60000)
    sheet.getRange(lastrow-1, 3).setValue(elapsedtime)
    // 時間表示
    sheet.getRange(lastrow-1, 4).setValue(elapsedtime/1440)
}
```

トリガーの設定。
「スプレッドシート」「値の変更」で実行されるように設定。
![script.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/364f66b1-e128-d871-ebf2-2e8ea01ac02a.jpeg)


日時が見やすいよう表示形式を設定。

```
yyyy"年"m"月"d"日("ddd") "hh":"mm":"ss""
```
2018年2月2日(金) 20:48:42　のように表示されます。


# このようなログが記録されます
![sheet.jpg](https://qiita-image-store.s3.amazonaws.com/0/18733/56193843-e619-e0c4-2407-e9f1ccf36f12.jpeg)



以上で行動ログ（作業記録）がカンタンにとれるようになりました。
作成してから1ヶ月以上になりますが、完ぺきではないですが継続して記録できています。
これまでtogglを使ってみたりしましたが続かず。。。この方法だと続けることができているのは、記録するときにブラウザを開いたり等の準備がいらない、Google Homeに話しかけるだけでいいという手軽さ。
応答を工夫して最初は「○○記録しました」と事務的に応答していたところを「はーい、○○がんばってね」に変更したことで「うん、がんばる」とモチベーションが上がるので、やるときにはGoogle Homeに報告しようという気持ちになっているからかな。
音声入力は面白い。

次は集めたデータを分析することをやってみようと思います。