8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

(GAS)スプレッドシートに記録した排泄記録をSlackにポストする

Last updated at Posted at 2018-05-05

排泄記録スプレッドシート

Google Homeに話しかけて娘のおむつ交換を記録するという記事に触発されて、去年の12月くらいから30近い無職のおじさんの排泄記録を取っていました。

家で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);

試しに実行してみます。

Screenshot 2018-05-05 19.48.43.png

いけました。あとはイベントハンドラで定時実行するようにすればOKですね。

todo

  • より詳細な記録の方法ができないか考える(うんちの色、硬さ、おしっこの量とか。ヘルスケアデータっぽく)
  • スプレッドシートをjsonで出力(今回はGAS側で実装したけど、slackbotの方でやりたい)
  • 報告の褒め方を色々工夫。(前回のデータと比べるとか)
  • データビジュアライズしたい(D3.jsとか、slackにイメージポストするのとか)
8
7
0

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
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?