見出し画像

GoogleフォームとGoogle Apps Scriptを使った行動記録ツールの作成方法

作成理由

時間を有効に使うために、まずは現状を把握しようと思った。そのためには、記録をつける必要がある。もっとも簡易で継続できる記録ツールが必要だったから。

使用したツール

  • Google Form

  • Google スプレッドシート

  • Google AppScript

  • Google カレンダー

  • ChatGPT

概要

何かのタスクや行動が終了したタイミングでGoogle Formに回答する。回答結果はスプレッドシートに記録される。その内容をもとに、Googleカレンダーにイベントが作成される。

Google Form

設問はたった1つ。行動名さえ入力すれば良い。気が向いたらメモに何か書いておいても良い。

スプレッドシート

Google Formの回答結果は自動的にスプレッドシートへ反映される。なにも編集をしないと、回答時刻・行動名・メモのみが記録される。開始時刻・時間(分)という列を追加した。開始時刻は1つ前の回答時刻を転記できるようにした。時間(分)でかかった時間の計算結果を出力している。

Google AppScript

全てChatGPTにて作成した。これにより、スプレッドシートの1つ前の行を取得して、開始時刻へ転記することができる。
開始時刻・終了時刻をもとに、行動名をタイトルとした、イベントをGoogleカレンダーへ作成してくれる。

function copyPreviousEndTimeAndCreateCalendarEvent() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート名'); // シート名を指定
  var lastRow = sheet.getLastRow(); // 最終行を取得

  // 最低2行必要(1行目はヘッダー)
  if (lastRow > 1) {
    var previousEndTime = sheet.getRange(lastRow - 1, 2).getValue(); // 1つ前の終了時刻(列B)
    
    // 前の終了時刻が存在する場合、開始時刻としてセット
    if (previousEndTime) {
      sheet.getRange(lastRow, 1).setValue(previousEndTime); // 開始時刻(列A)にセット
      Logger.log('Set Start Time: ' + previousEndTime); // デバッグ用ログ
    } else {
      Logger.log('Previous End Time is empty.'); // デバッグ用ログ
    }

    // Googleカレンダーにイベント作成
    var taskName = sheet.getRange(lastRow, 3).getValue(); // 行動名(列C)
    var taskDuration = sheet.getRange(lastRow, 5).getValue(); // 列Eの分数(列E)
    var formattedTaskName = taskName + ' (' + taskDuration + ')'; // 列E (列E分)という形式に変更

    var memo = sheet.getRange(lastRow, 4).getValue(); // メモ(列D)
    
    var startTime = new Date(sheet.getRange(lastRow, 1).getValue()); // 開始時刻(列A)
    var endTime = new Date(sheet.getRange(lastRow, 2).getValue()); // 終了時刻(列B)

    if (formattedTaskName && startTime && endTime) {
      // Google Calendar にイベント作成
      var calendar = CalendarApp.getDefaultCalendar();
      try {
        var event = calendar.createEvent(formattedTaskName, startTime, endTime)
                            .setDescription(memo); // メモをイベントの説明に追加
        Logger.log('Event Created: ' + formattedTaskName + ' (' + startTime + ' to ' + endTime + ')'); // デバッグ用ログ
      } catch (e) {
        Logger.log('Error creating calendar event: ' + e.toString()); // エラーログ
      }
    } else {
      Logger.log('Missing required data for event creation.'); // デバッグ用ログ
    }
  } else {
    Logger.log('Not enough rows.'); // デバッグ用ログ
  }
}

Googleカレンダー

実際に記録をつけるとこのようになる。ボケーっと生きている休日がクリアになる。だいたい同じようなことをして生きている。


まとめ

 とりあえず記録をつけることは習慣とすることができた。必要最小限の労力で記録をつけることができるのが、続けられた理由だと思う。
 Google AppScriptを改造して、土曜日に1週間のサマリーがLINEに送られてくるようにしてみた。行動名の中に、”筋トレ”が含まれていた日数をカウントして、1週間のうちに何日筋トレに励んだかを可視化してみる。
 他にもこんなことができたらと考えている。

  • コーヒーの摂取量記録

  • 食事記録(カロリー・PFCバランス)

  • 勉強時間記録 などなど

 記録をつけて振り返るだけでは意味がない。それを受けて行動を変えることが目的だ。今後も自分が気持ちいと思える日々を過ごすために新しいことへの挑戦を楽しみたいと思う。


いいなと思ったら応援しよう!