2
3

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.

Google Apps ScriptでカレンダーとToDo(タスク)を連携する

2
Last updated at Posted at 2020-02-09

Googleカレンダーの予定を自動的にToDoへ登録したい

ToDoには2種類あると思う。

  1. 通知が来たら即実行するもの。会議や打ち合わせを知らせるもの
  2. 通知が来ても当日か翌日中に実行できればよいもの。定期的な振り込みや買い物

1の通知は、そのことを知ればスマホの通知を消してしまっても良い。即時実行型の通知は、通知内容を知ったら消したくなるのが心情である。
しかし2の通知は違う。うかつに消してしまうとヤバい状況になる可能性がある。この類の通知は通知内容を実行後に消すものである。
つまり2の通知はToDoやタスクリストみたいな扱いにしたいのだ。

何をしたいの

『毎月25日に◯◯の料金を振り込む』とカレンダーへ定期的な予定として設定すると、その1日前にカレンダーからToDoへその内容をコピーしたい。
がやりたいことである。

どうやってやるの

  • ToDoへ登録したい予定の通知方法をメールへ変更する
  • カレンダーから飛ばされたメールへ特定のラベルCreateToDoを付けるフィルタを設定する
  • 一定間隔でラベルCreateToDoのメールをチェックしToDoへコピー後に削除する

3番目の動作をGoogle Apps Script(以前は違う名称だったような)で自動化し、10年近く運用して便利なので情報共有する。

Google Apps Scriptのコード

createTodo
function createTodo() {
  'use strict';
  var threads = GmailApp.search('label:' + 'CreateToDo');
  var tasklist = Tasks.Tasklists.list().getItems();
  var tasklistid = tasklist[0].id;
  var subject;
  var tasks;
  var notes;
  for (var i = 0; i < threads.length; i++) {
    subject = threads[i].getFirstMessageSubject();
    notes = threads[i].getMessages();
    tasks = Tasks.newTask();
    if (subject.indexOf('通知:') == 0) {
      tasks.title = subject.replace('通知: ', '') + '[!]';
    }
    else {
      tasks.title = subject;
    }
    tasks.notes = notes[0].getBody();
    Tasks.Tasks.insert(tasks, tasklistid);
    threads[i].moveToTrash();
  }
}

まったくコメントが無くて申し訳ない。しかし、読めば理解できるコードである。短いし。
カレンダーから飛ばされるメールのサブジェクトには必ず通知: と書いてあるので、その通知: を除去している。[!]を付加しているのは、このキーワードがToDoのタイトルに付いていると優先度高の項目になるためだ。予定にメモがあったらそれもToDo側へコピーしている。
このスクリプトを6時間おきに実行するように設定してある。

おまけ

for文中のif文のelseにいつ入るのか?
Gmailはメールアドレスへ+任意の文字列を付けて、別のメールアドレスでメールを送れる(これはGmailだけの機能なのか分からない)。
例えば、hoge@gmail.comhoge+hoge@gmail.comと書いて送っても届くのだ。
elseでやってることは、hoge+createTodo@gmail.com宛のメールもラベルCreateToDoを付け、そのメールからToDoを作る処理である。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?