排泄記録スプレッドシート
Google Homeに話しかけて娘のおむつ交換を記録するという記事に触発されて、去年の12月くらいから30近い無職のおじさんの排泄記録を取っていました。
赤ちゃんのオムツ交換記録記事を見て29歳無職の排泄記録を取るデバイスを稼働させてるけど捗るぞ pic.twitter.com/eYU8O2wfIP
— たねのぶ (@mtane0412) December 8, 2017
家でGoogleに「オーケーGoogle!うんち!」と叫ぶのがすっかり学習されてしまい、出先の何もないところで突然Googleを呼び出してしまうという不具合もありましたが、ともかく記録する動作にかかるコストがほぼないので継続が容易で今日まで続けてこれています。(出先だとApple WatchのIFTTTから記録できるのですが、そもそも外に出る機会が少ないのでこちらはまだ習慣化あまりできてないです。)
最近行った改良で良かったのはGoogleHomeのレスポンスを「うんちを記録しました」から「えらいねぇ!」に変えたところです。肛門期のトイレットトレーニングのように、うんちするたびに自己肯定感を高めることができます。
排泄データを取っているのもいつか活用したいなあと思っていたので、今回は個人Slackに1日の排泄記録を報告して褒めてくれる感じにしたいと思います。
GASでスプレッドシートのデータから本日の排泄物を集計
JavaScriptあんまり触ったことないのですが、とりあえずGASで実装してみました。
GASでSpreadsheetを操作する自分的ベストプラクティスによると、APIアクセスをできるだけ減らすためにシート全体のデータを取得してからJSであれこれいじるほうが良いみたいです。
var sheet = SpreadsheetApp.getActiveSheet(); // 現在開いているシートを取得
var today = new Date(); // 実行時の日付を取得
var DateColumn = 0; // シートの日付列
var ExcretionColumn = 2; // 排泄物カラム
var data = sheet.getDataRange().getValues(); // シート全体のデータを取得
var unchi = 0; // うんちカウンタ初期化
var oshikko = 0; // おしっこカウンタ初期化
// dataから今日の排泄物をカウント
for (var i = 1; i < data.length; i++) {
if (data[i][DateColumn].getMonth() === today.getMonth() && data[i][DateColumn].getDate() === today.getDate() && data[i][DateColumn].getFullYear() === today.getFullYear()) {
if (data[i][ExcretionColumn] == "👼") {
oshikko++;
} else if(data[i][ExcretionColumn] == "💩"){
unchi++;
} else {
Logger.log("Error");
}
}
}
JavaScriptの日付の比較の方法、もっとスマートな方法がありそうなものなのですが、とりあえずこれで…。
SlackのWebhookからポスト
GASからSlackにポストするのはWebhookが一番簡単そうだったのでとりあえず使ってみます。GoogleSpreadSheetの内容をSlackで自動投稿するを参考にさせていただきました。
// Slack Webhook
var url = 'SlackのWebhook URL';
var payload = {
'text' : "今日は" + oshikko + "回おしっこして、" + unchi + "回うんちできたね。えらいねぇ",
};
var options = {
'method' : 'post' ,
'contentType' : 'application/json' ,
'payload' : JSON.stringify(payload),
};
UrlFetchApp.fetch(url, options);
試しに実行してみます。
いけました。あとはイベントハンドラで定時実行するようにすればOKですね。
todo
- より詳細な記録の方法ができないか考える(うんちの色、硬さ、おしっこの量とか。ヘルスケアデータっぽく)
- スプレッドシートをjsonで出力(今回はGAS側で実装したけど、slackbotの方でやりたい)
- 報告の褒め方を色々工夫。(前回のデータと比べるとか)
- データビジュアライズしたい(D3.jsとか、slackにイメージポストするのとか)