Gmailにもともと連動されていたTASK管理(ToDoリスト)機能ですが、メールから選択して実行できることを知り便利だなぁと思ったので、その使い方とGASでの利用方法を調べてみました。
基本TASK管理はTrelloを利用している私ですが、毎回Trelloに登録するのはどうしても手入力になってしまっていました。これを使えば、メール経由でのリクエストは自動化ができそうです。私の場合は、複数のgmailアドレスがあり、一個一個のメールを開くのはめんどくさいので、実際各アドレスで登録したToDoタスクをtrelloに再度飛ばしています。

今回は①GmailからのToDo登録方法と②GASで登録したToDoアイテムを取得してSSに書き出す方法の説明をしていきたいと思います。
GmailからToDo登録する方法
まずは、GUIで処理するGmailからToDO登録する方法の紹介です。
方法は2つあり、①対象メールを選択してToDoリスト追加ボタンをクリックする方法と②ToDoリストカラムへ対象メールをドラッグする方法のいづれかになります。
①対象メールを選択してToDoリスト追加ボタンをクリックする方法
まずはシンプルにメールを選択して、表示されるメニューバーからToDoアイテムへの追加ボタンをクリックして登録する方法です。何はともあれ、下記の動画をどうぞ。
2クリックしなければならないので、個人的にはあまり使わない方法です。基本的には以下の2つ目で紹介する方法を利用しています。
②ToDoリストカラムへ対象メールをドラッグする方法
2つ目は、右側にあるToDoリストのメニューバーを表示させて、そこにメールをドラッグするという方法です。
こっちの方が、簡単に処理できるので、基本的にはこっちを利用してますかね。
登録したToDoをGASで取得する方法
それではGASで登録したToDoアイテムを取得する方法を紹介していきます。事前準備としてTaskAPIを有効化する必要があります。
事前準備:Google拡張のTasks APIを有効化する
まずは事前準備としてGoogle拡張サービスでTasks APIを有効化していきます。これをしないと動作しないので、忘れずに実施してください。
step1: リソース>Googleの拡張サービス…を選択

step2: Tasks APIを有効化する

あまりこれまで紹介してこなかった、Google拡張サービスですが、いわゆるGCPにあるGoogle API群をGASで利用する際に有効化することで利用可能となりますので、暇な時に色々あるなぁとみてもらえればと思います。
ToDoアイテムを取得するGASスクリプト
流れとしては、以下のイメージになります。
- TaskListIDを取得する
- TaskListIDを利用して、Taskの一覧を取得する
自分のTaskListに複数のメールアドレスでのTASKが含まれている場合、tasklistIDも複数になるはずです(試してません。。)
function callListTasks(){
const myTaskListId = listTaskLists();
listTasks(myTaskListId);
}
function listTaskLists() {
let taskLists = Tasks.Tasklists.list();
if (taskLists.items) {
Logger.log(taskLists.items.length);
for (let i = 0; i < taskLists.items.length; i++) {
let taskList = taskLists.items[i];
return taskList.id;
}
} else {
Logger.log('Sorry, No task lists found.');
return;
}
}
function listTasks(taskListId) {
let tasks = Tasks.Tasks.list(taskListId);
if (tasks.items) {
Logger.log("remaining_Tasks:",tasks.items.length)
for (let i = 0; i < tasks.items.length; i++) {
let task = tasks.items[i];
Logger.log("task_title:",task.title)
Logger.log("task_notes:",task.notes)
Logger.log("",task.completed)
}
} else {
Logger.log('Sorry, No tasks found.');
}
}
SSへの書き出し方法
上のスクリプト内に、以下のようなスクリプトを入れ込めば、SSへの書き出しも可能です。
//グローバル領域
const SS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Name");
//listTasks function内
//if文前
let output = [];
//if->for文中
output.push([task.title, task.notes])
//if文抜けた後
SS.getRange(1, 1, output.length, output[0].length).setValues(output)
tasksのプロパティ(JSON fields)一覧
Tasks APIを利用した場合と同様のデータが返されてきます(ただし、Tasks APIの場合はJSON format)ので、tasks apiのレスポンスfieldを紹介していきます。
{ "kind": string, "id": string, "etag": string, "title": string, "updated": string, "selfLink": string, "parent": string, "position": string, "notes": string, "status": string, "due": string, "completed": string, "deleted": boolean, "hidden": boolean, "links": [ { "type": string, "description": string, "link": string } ] }
コンテキストの中身については、以下のページをご覧ください。よく使うのは、title/notes/statusぐらいでしょうか。あとは、期限を入れたい場合はdueも利用しますね。

SSへの書き出しが終わった後は
SSへの書き出しが終わった後は、次やるべきことはTrello等自分のタスク管理ツールへの投げ込みになります。
ただ、上記の方法はToDoアイテムのライフサイクル管理(登録以外の、ToDo解消や消滅など)までは説明していません。まんま書き出しして、全データをwebhook等を使って登録処理すると重複などが起きるので、同一シートないにwebhookなどで投げ込んだか否かのステータスを保持するorTriger実施を毎日一定時にしてwebhookで飛ばすアイテムを登録日が本日(or前日)のものだけにするなどの工夫は必要です。
登録日でやる方が楽なので、私はそっち派です(その場合outputのlistのなかに、dateクラスから本日日付を入れ込んでいます)。
参考までに、trello apiのDocsのURLリンクを貼っておきます。
まとめ
巷では、G-suiteがgoogle workspaceに変わって賑わってますね。
googleさんも常に新機能の追加してくれるので、追いつくだけでも大変ですが、便利なものも増えてますので、ぜひ色々調べて使ってみましょう。
大概のことは、ひと工夫入れれば実現できるようになってきていますので。