🧠

エビングハウスの忘却曲線に沿った学習予定を自動でカレンダーに入れる#1

2025/02/24に公開

はじめに

効率的な学習を行うにあたって、エビングハウスの忘却曲線(10分後、1時間後、1週間後、1ヶ月後)に学んだ内容を復習すると良いのは有名である。
ここ10年くらいで何回か挑戦するも、3日坊主ですぐにやめてしまった。
やめた理由の1つに手動管理だとかなりの手間になる。
さらに1ヶ月目を過ぎる頃には1日に4つの復讐をすることになり、時間的余裕はない(学ぶことより復習に追われる)

最近notionを使って、1日に1ページくらいは学んだ内容をまとめるということが出来ているので、この習慣を利用する。
予定を組むのを自動化するために、Google App Script(GAS)、Google Form、Google SpreadSheetを使用する。
notionは有料だが、googleのツールが無料であることに感謝したい。いい時代である。

本当はこのまとめた内容をAIに読ませて"超簡単"なテストを作成し、それを解くことによってさらに学習効率をあげたい。
しかし今まで3日坊主で終了している身。まずは簡単に目を通すということから始めて復習する習慣をつけるところからスタートする。

用意するもの

  • notion
  • Google AppScript
  • Google Form
  • Google SpreadSeet

1.Google Formのセットアップ

  1. 上記のようにURLを入力できる簡単なフォームを作成する。
  2. 好きな名前をつける
  3. 「回答」タブ内に「スプレッドシートで表示」があるので、スプレッドシートを開く

GoogleのUIはよく変更されるので、適宜読み替えてほしい。

2.スプレッドシートのセットアップ

  1. 好きな名前をつける
  2. メニュー内の「拡張機能」から「App Script」を選択する

3. AppScriptを記述する

function addCalendarEvents(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  var url = sheet.getRange(lastRow, 2).getValue(); // 学習内容のURL(B列)

  var calendar = CalendarApp.getDefaultCalendar();
  var now = new Date();

  // MMDD 形式の追加日を取得
  var month = ("0" + (now.getMonth() + 1)).slice(-2); // 月(ゼロ埋め)
  var day = ("0" + now.getDate()).slice(-2); // 日(ゼロ埋め)
  var dateStr = month + day; // MMDD 形式

  // 設定するリマインダー(エビングハウスの忘却曲線)
  var reminders = [
    { days: 1, title: `復習リマインダー 📖 (${dateStr}) - 1日後`, description: `【1日後復習】\n${url}` },
    { days: 7, title: `復習リマインダー 📖 (${dateStr}) - 1週間後`, description: `【1週間後復習】\n${url}` },
    { days: 30, title: `復習リマインダー 📖 (${dateStr}) - 1ヶ月後`, description: `【1ヶ月後復習】\n${url}` }
  ];

  // Googleカレンダーに予定を追加
  reminders.forEach(reminder => {
    var eventDate = new Date(now);
    eventDate.setDate(now.getDate() + reminder.days);
    eventDate.setHours(23, 59, 0, 0); // 23:59 に設定

    calendar.createEvent(reminder.title, eventDate, new Date(eventDate))
      .setDescription(reminder.description); // 説明欄にURLを追加(クリック可能になる)
  });

  Logger.log("リマインダーがGoogleカレンダーに追加されました: " + url);
}

コードは上記のようにした。
ポイントは以下の通り。

  • 復讐のリマインダーを1日・1週間・1ヶ月にした
    • 1日の復讐を10分後にリマインダーされたところで、意味がないと判断
  • 復習は23:59にセット
    • とりあえず寝る前くらい。日付が変わって欲しくないのでこの時間にセット。

ここで確認して欲しい箇所が2点。
※「実行」して、実際に動作するか確認すること
※「ドライブにプロジェクトを保存」しないと次のステップで選択肢が正しく表示されない。

次に左ペインから、トリガーを選択して設定する。

実行する関数:addCalendarEvents
デプロイ時に実行:Head
イベントのソースを選択:スプレッドシートから
イベントの種類を選択:フォーム送信時
エラー通知設定:今すぐ通知を受け取る

実行する関数は、先ほど設定したものが表示される。
UIが変更になって選択肢がないとかいう場合は、ジェネって欲しい。

おわり

次回はテストを自動生成できるように頑張りたい

Discussion