この記事は
「DeNA IPプラットフォーム事業部 Advent Calendar 2017」
17日目の記事です。

経緯

もともとの経緯は家で自炊する回数を増やしたいな、お金も節約したいし、料理作らないとうまくならないしと漠然と思っていて、そこから帰宅する時間が遅すぎると疲れて自炊する気力が失せるなと考えたことでした。
でも本当に帰宅する時間は遅すぎるんだろうか?体感値としてそんな残業してないし、出退勤時間見たりもしてるけど、自分で出退勤記録を自動化したらどうなるんだろうというところからさらに会社にかぎらず普段の生活の中で何がいつ終わったのかトラッキングするとどうなるんだろうと素朴に思うに至ったので、9月末くらいからちょっとずつライフログをGoogle Spreadsheetに追加してみていました。

そこで利用したのは

  • IFTTT
  • Google Spreadsheet
  • Asana
  • Google Apps Script
  • (slack)1

で、実際にいろんな行動を同じGoogle Spreadsheetにまとめました。
今回、私がやったやり方を共有したいと思います。せっかくなのでうまくいった話だけではなくて実際にやってみたらあんまりうまく動かないもの(アプレットとしては動くけれども、習慣化しにくいもの)も紹介しようと思います。ちなみに私はAndroidユーザーなので、iPhoneの人だとできないものもあるかもしれません。そこはご了承ください。

出退勤がいつになってるのかをだいたい知るためにIFTTTを使ってみる

IFTTT

IFTTT(イフト)とは「If do this, then do that.(これをやったらあれをする)」の頭文字を取ったもので、いろんなアプリやデバイスで行った行動をフックして別のアプリを起動させるアプリ連携アプリのことです。アプリ間の連携はアプレットという単位で管理され、自分でも作れるし、作ったアプレットをインターネット上で公開して他の人も使えるようにすることができます。

IFTTTだけじゃない--複数のウェブサービスを連携できる便利ツール4選

IFTTT と Microsoft Flow と Zapier の比較 | blog.yottun8.com

このあたりの記事にIFTTT以外にもアプリ連携アプリがあると説明されてはいたのですが、自分は昔からinstagramに上げた画像を自動的にtwitterにも上げるアプレットをIFTTTで導入してたので引き続きIFTTTを使うことにしました。

これで実際に出退勤ログをとって、意味なく残業してないかをトラッキングできるようにします。

[失敗]出退勤をあるロケーションに入ったら/出たら、spreadsheetに一行追加する

現在地情報を端末のGPSで受け取って、あるロケーションに入ったことをトリガーにして出勤退勤をトラッキングするアプレットを最初は作りました。出勤は指定したエリアに私が入ったら、退勤は指定したエリアから私が出たら、それぞれ出勤・退勤をslackに出すようにしてみました。 はじめはIFTTTが用意してくれているingredientという、時刻や画像URLを展開してくれる便利パーツの存在を知らずに使い始めたので、デフォルトのまま使ってみました。
するとこんな感じにslackに通知されました。

2017-12-03_blog.png

通知のされ方は良かったです。でもロケーションログを取れるようにするために常時GPSをオンにしてるとバッテリーを食うのと、たまにロケーションがうまく取れなくて、出勤失敗したみたいになりました。なので違うやり方で出退勤を取るように変更しました。

[成功]出退勤をwifi接続したら/切断したら、spreadsheetに一行追加する

会社のwifiで出退勤を取りつつ、家を出たタイミングとか帰宅したタイミングは自分の家のwifi接続・切断で取るようなアプレットを作ったらロケーションログより精度が上がりました。具体的にはこんな感じにslackに通知されました。

2017-12-03_blog_02.png

ただこれでも難点があって、ケータイの画面を点灯させたタイミングでwifi接続がフックするようでした。出退勤直後にいつでもケータイを開くわけではないので、これでもたまに出勤失敗したみたいになります。ただロケーションログ取るよりは精度がずっと上がって、これはかなりいい指標になると思いました。本格的にやるならbluetoothの簡易ビーコンをおいて、接続・切断でログを取ればwifiより精度上がりそうだと思いましたが、大体の時間が知りたかっただけなのでそこまでやってないです。

上記はslackでの通知例ですが、これをspreadsheetに追加するようにしたのが以下です。

2017-12-17_blog.png

tagsカラムのところにSSIDを入れてます。セルが色付きなのはspreadsheetの条件付き書式で自動的に塗り分けられるようにしました。

TODO管理にAsanaを使ってみる

勝手にタスク/ドキュメント管理ツールを評価 - おすすめはこれだ!

去年上の記事を読んでAsana使ってみようかなと思ってはいましたが、なかなか使おうと思う機会に恵まれなくて今まで来ていました。そんなときに「あっ使えるじゃん」と思ったので早速導入しました。

Use Asana to track your team's work & manage projects · Asana

ちなみに2017年11月5日当時のタスクはこんな感じです。

2017-12-02_blog.png

これまで記事作成には適当にチェックリストつきのmarkdownのメモを用意して、やったやってないを簡単に管理するくらいはやってました。ただこういうタスク管理ツールに移行しておくと、いつに何が終わったのか、終わってないのはどれかがもっとはっきりわかるので、引っ越しのときとかは特に便利です。

これで自分が休日も含めて一日あたり何をどのくらいやってるのか見て、お家に帰って自炊できる程度のタスク量を見れるようにします。

[成功]Asanaのタスクが終わったらspreadsheetに一行追加する

実際のものを見てもらったほうが早いと思うので、上の出退勤ログも含めてスクショを貼ります。

2017-12-03_blog_03.png

こんな感じで、自分が出勤している間に一体どんなことをしたのかが残ります。Asanaの完了をフックしてspreadsheetに追加するときのフォーマット(カラムに何を入れるかの順番)は出退勤ログと合わせました。

Asanaの便利なところはあるタスクをリピートすることができることで、あるタスクが仮に終わったとしても次の月曜でもやりたいときに毎回タスクを手動で複製する必要がないです。これはGoogle Calendarで登録しても同じことが実現できますが、カレンダーだと「タスクが完了した」というステータスは記録できないのでリマインダとしては使えますが、いつ何をしたっけ?はAsanaとIFTTT、spreadsheetの連携が個人的には優秀だなと思います。Google CalendarのTODOとの比較もやってみたほうがいいでしょうが、そこまではしてません。

定期的なTODOではない、ちょっとしたものはAsanaじゃなくてボタン/テキストウィジェットを使ってみる

Asanaだとタスク完了しか選べず、何かをしなかったときが記録しづらいことがあります。またちょっとしたコメントとともにspreadsheetに追加するときAsanaだとタスク自体にコメントが書けますが、そうじゃなくてsheetに直接見えるようにしたいなぁと考えることがありました。

IFTTTにボタンウィジェットやテキストウィジェットというものがあり、それはAndroid端末のホーム画面にボタンとして追加できるので、それで自分の習慣を追いかけてみます。

[成功]〇〇したらspreadsheetに一行追加するボタンウィジェットを作る

以下が実際に私が登録しているウィジェットたちです。

「自炊した」ボタンは文字通り自炊したときに押すボタンで、これをポチった日は自炊したということになります。おんなじようにご飯を炊いて冷凍したら「ご飯冷凍した」、買いだめしたら「買いだめした」という雑な感じで作ってます。割りとこの雑さが自分には合ってるようで、たまに押し忘れますがまぁまぁいい感じに続くしログが取れてます。

「( ˘ω˘ ) スヤァ…」というボタンは見た目がかなりふざけてますが、この日はよく眠れたなーと思ったときに押すボタンで、逆が「(´pωq`)寝れq(´・ω・`)ない」です。これは一個が押されなければもう一個の状態になるといえばなるのですが、実はこれはテキストウィジェットになっていて、押すと以下のような画面になり、テキストを入力できます。

こうすることでなんで昨日眠れなかったんだっけ?という理由2を簡単につけられます。ただのボタンとテキストウィジェットの違いが見た目ではわからないのですが、アプレットは自分で作ったものでウィジェットも自分で追加するものなんで、今のところ困ってないです。相当数作ると困り始めるかもしれません。

「なるほどノ…」というものはなるほどと思ったことを適当に書き散らすノート用ウィジェットで、「なるほどノート」3と命名しています。

Google Spreadsheetの日付をフォーマットしてみる

「Asanaのタスクが終わったら…」のところに貼った画像にあるようにIFTTTの日付フォーマットはDecember 17, 2017 at 06:31PM のようなものです。これはGoogle Spreadsheetだと日付とは認識してくれないので、spreadsheetにあったフォーマットに直したいと思っていました。

そこでGASを使います。

[成功]特定のspreadsheetの起動時にIFTTTで登録された日付をspreadsheetで解釈可能な日付にして入力する

実際に書いたコードは以下です。

function setDate() {
  var dateColumnIndex = 1; //spreadsheetに合った日時データを保持したい列のインデックス
  var rawDateColumnIndex = 2; //IFTTTの日時データを保持する列のインデックス

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var allData = sheet.getRange(2, dateColumnIndex, 1335, 2).getValues();

  for (var i = 0; i < allData.length; i++) {
    var date = allData[i][dateColumnIndex - 1];
    var rawDate = allData[i][rawDateColumnIndex - 1];
    if (date === "" && rawDate !== "") {
      sheet.getRange(i + 2, dateColumnIndex).setValue(covertIFTTTDateToGoogleSpreadsheetDate(rawDate));
    }
  }
}

function covertIFTTTDateToGoogleSpreadsheetDate(str) {
  var moment = Moment.moment(str, "MMMM D, YYYY hh:mma"); // strには"September 26, 2017 at 06:52PM"のようなものが入る

  return moment.format("YYYY/MM/DD HH:mm").toString();
}

ざっくり何をしてるかというとIFTTTの日付が入るカラム(B列)とspreadsheet向けの日付が入るカラム(A列)を定義しておいて、Bの値はあるがAの値がない行を探し出して、Bを変換しAに値を書き込むことをしています。最初 covertIFTTTDateToGoogleSpreadsheetDate 関数をただA列に書き込んでいたんですが、シートを読み込むたびに計算されてとても重い状態にあったので、計算の結果だけをA列に入れられるようにしました。

スクリーンショット 2017-12-17 20.13.48.png

こんな感じでトリガーを登録しておくとsetDate関数がシートの起動時と編集時に走ります。

また日付計算のためにDate関数を使うのが面倒臭かったので横着して Moment.js をGASから叩くようにしました。外部ライブラリをGASで使えるようにする方法については 日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法 が詳しいです。私はMoment.jsしか試してませんが、他のライブラリも探すと良いものが見つかるかもしれません。

結果自炊とか残業とかどうなったの?

残業は9月10月、自炊したい話は11月頃だけ気にしてました。残業は正直ログを取るのが楽しかったで終わってしまった感があり、またそもそもそんな無茶して残業してなかったんで、振り返ったところで特に面白くない感じでした。11月の自炊改善は週に3回は自炊する、で4週中、3週はできてましたね。できてること、できてないことの見える化大事だと思います。ライフログを取れるようにしたことで今どういう状況なのかつかみやすくなりました。

あとここまでする必要ないでしょ、別に仕事でやってるわけじゃないんだからと自分でも本当は思ってたんですが、やってみて実際にものが見えると楽しくなってしまったので、なかなかやめられなかったのもありましたね。へー普段の私はこんなことしてたのね、と自分ではわかった気になってましたが実際に見えるようにすると新鮮でした。

ちなみに今のシートはざっとこんな感じです。これは引っ越し当日のものです。今も不要・必要なものをちょこちょこと出してます。

スクリーンショット 2017-12-17 20.18.38.png

この記事を読まれたみなさんもおすすめのライフログの取り方があったら教えてください。


  1. slackもこの記事には出てきますが、ログとして見るにはアイコンが大きくなりすぎて個人的に不向きでした。 

  2. 大体理由はゲームのしすぎか、お気に入りの写真を探しすぎての夜更かしです…。 

  3. 『鬼速PDCA』という本にあったものをウィジェットにしてみた感じです。