3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

人間リマインダーをやめた話

Last updated at Posted at 2025-12-10

はじめに

 プライベートな話ですが、普段ToDoリストとしてNotionを利用し、タスク管理をしています。妻からついでに管理してくれと言われ、さらにはリマインドしてくれとも言われます。しかしながら、忙しかったり、忘れていたりとまともにリマインドできないことから、人間リマインダーを引退できるような仕組みを考えたのが、今回のお話です。

1. 解決策

 次のように解決しています。
 なお、プライベートで作っているので、お金をなるべくかけないような策を講じています。

  • LINE Messaging APIを利用してタスクを通知
  • コンピューティングではGoogle App Script(GAS)を利用
  • タスクを所定時刻に通知するようトリガーを設定

 全体の仕組みは以下の図のようになります。

アーキテクチャ.png
図1. 全体の仕組み

 お金の話をしてみますと、

  • GASはGoogleアカウントさえあれば無料
  • LINE Messaging APIは応答メッセージおよび月200通までのPush通知は無料
  • Notion APIは無料
    で利用できるということで、プライベートで使う分には十分であるため、この仕組みでリマインダーを構築しています。

2. 実装

2.1. タスク周り

2.1.1. タスク登録

 Notionページにタスク情報を格納し、タスク用のデータベースに登録しています。

タスク登録
register_tasks.js
// Notion Pageでタスク情報を登録する
let page = {
    "parent": {
        "database_id": TASK_DATABASE_ID
    },
    "properties": {  
        "名前": {
            "title": [
                {
                    "text": {
                        "content": taskName
                    }
                }
            ]
        },
        "実施日": {
            "date": {
                "start": taskDate,
            }
        },
        "ステータス": {
            "select": {
                "name": "着手前",
            }
        },
        "通知": {
            "select": {
                "name": "する",
            }
        }
    }
};

// Notionにリクエスト
let url = 'https://api.notion.com/v1/pages/';
let options = {
    "method": "POST",
    "headers": {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + NOTION_TOKEN,
      'Notion-Version': '2021-08-16',
    },
    "payload": JSON.stringify(page),
    "muteHttpExceptions": true
};
JSON.parse(UrlFetchApp.fetch(url, options).getContentText());

2.1.2. タスクの問合せ

 Notionのタスク用のデータベースからタスク実行日に通知する必要のあるタスク(ページ)を問い合わせするクエリを書いています。

タスク問合せ
fetch_tasks.js
// 該当するページをフィルタリングする
let pageFilter = [
    {
      "property": "ステータス",
      "select": {
            "does_not_equal": "完了"
      }
    },
    {
      "property": "通知",
      "select": {
        "equals": "する"
      }
    }
];

let url = 'https://api.notion.com/v1/databases/'+ TASK_DATABASE_ID + '/query';

let payload = {"filter": {"and": pageFilter }};

let options = {
    "method": "POST",
    "headers": {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + NOTION_TOKEN,
      'Notion-Version': '2021-08-16',
    },
    "payload": JSON.stringify(payload),
    "muteHttpExceptions": true
};

let response = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
let tasks = response.results;

2.2. トリガー設定

 リマインドすべきタスクに対して、GASでリマインドイベントを登録します。
 もちろん、トリガーも自動で設定できるようにしないといけないのでGASで書いています。

トリガー設定
trigger.js
// functionNameはリマインド関数
// triggerTimeはリマインド時刻
let trigger = ScriptApp.newTrigger(functionName).timeBased().at(triggerTime).create();
let triggerUid = trigger.getUniqueId();

// トリガーする関数の引数の設定
let triggerData = {
  "arguments": functionArguments
};

PropertiesService.getScriptProperties().setProperty(triggerUid, JSON.stringify(triggerData));

2.3. リマインド

 時刻になったらLINE Messaging APIのPush通知にて、タスクの内容をリマインドします。

リマインド
reminder.js
let url = 'https://api.line.me/v2/bot/message/push';
let payload = {
  to: sendTo,
  messages: messages
};

let options = {
  'method': 'post',
  'contentType': 'application/json',
  'headers': {
    'Authorization': 'Bearer ' + LINE_TOKEN
  },
  'payload': JSON.stringify(payload)
};

JSON.parse(UrlFetchApp.fetch(url, options).getContentText());

3. 使ってみた

 「@タスク登録」と入力し、タスク名と時刻を入力すると、LINEの中の猫が反応して、「登録するにゃん!」と返します。

使ってみた1.png
図2.タスク登録

 そして、時刻になると「リマインドだにゃん!」とリマインドしてくれます。

使ってみた2.png
図3.リマインド通知

 タスク登録のUIが少々よろしくないので、改善したいと思っています。

さいごに

 こうして、LINE通知により人間リマインダーを引退することはできましたが、妻のタスク登録代行をやることになったため、まだまだ引退できそうにないです。お金をかけたくないというのもあり、音声登録等でのタスク登録自動化は断念しましたが、このあたりの障壁がなくなりそうであれば、追加でやろうかなと思います。。。

参考

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?