GmailのTASK管理(ToDoリスト)が便利だったので、GASでの利用方法も調べてみた

GAS
この記事は約7分で読めます。

Gmailにもともと連動されていたTASK管理(ToDoリスト)機能ですが、メールから選択して実行できることを知り便利だなぁと思ったので、その使い方とGASでの利用方法を調べてみました。

基本TASK管理はTrelloを利用している私ですが、毎回Trelloに登録するのはどうしても手入力になってしまっていました。これを使えば、メール経由でのリクエストは自動化ができそうです。私の場合は、複数のgmailアドレスがあり、一個一個のメールを開くのはめんどくさいので、実際各アドレスで登録したToDoタスクをtrelloに再度飛ばしています。

Gmail画面にあるチェックマークがToDoリストへの追加ボタン

今回は①GmailからのToDo登録方法と②GASで登録したToDoアイテムを取得してSSに書き出す方法の説明をしていきたいと思います。

Advertisements

GmailからToDo登録する方法

まずは、GUIで処理するGmailからToDO登録する方法の紹介です。

方法は2つあり、①対象メールを選択してToDoリスト追加ボタンをクリックする方法と②ToDoリストカラムへ対象メールをドラッグする方法のいづれかになります。

①対象メールを選択してToDoリスト追加ボタンをクリックする方法

まずはシンプルにメールを選択して、表示されるメニューバーからToDoアイテムへの追加ボタンをクリックして登録する方法です。何はともあれ、下記の動画をどうぞ。

メールを選択してToDoリスト追加ボタンから追加する方法

2クリックしなければならないので、個人的にはあまり使わない方法です。基本的には以下の2つ目で紹介する方法を利用しています。

②ToDoリストカラムへ対象メールをドラッグする方法

2つ目は、右側にあるToDoリストのメニューバーを表示させて、そこにメールをドラッグするという方法です。

ドラッグドロップしてGmailをToDoアイテムに追加する方法

こっちの方が、簡単に処理できるので、基本的にはこっちを利用してますかね。

登録したToDoをGASで取得する方法

それではGASで登録したToDoアイテムを取得する方法を紹介していきます。事前準備としてTaskAPIを有効化する必要があります。

事前準備:Google拡張のTasks APIを有効化する

まずは事前準備としてGoogle拡張サービスでTasks APIを有効化していきます。これをしないと動作しないので、忘れずに実施してください。

step1: リソース>Googleの拡張サービス…を選択

step2: Tasks APIを有効化する

あまりこれまで紹介してこなかった、Google拡張サービスですが、いわゆるGCPにあるGoogle API群をGASで利用する際に有効化することで利用可能となりますので、暇な時に色々あるなぁとみてもらえればと思います。

ToDoアイテムを取得するGASスクリプト

流れとしては、以下のイメージになります。

  1. TaskListIDを取得する
  2. 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も利用しますね。

REST Resource: tasks  |  Tasks API  |  Google Developers

SSへの書き出しが終わった後は

SSへの書き出しが終わった後は、次やるべきことはTrello等自分のタスク管理ツールへの投げ込みになります。

ただ、上記の方法はToDoアイテムのライフサイクル管理(登録以外の、ToDo解消や消滅など)までは説明していません。まんま書き出しして、全データをwebhook等を使って登録処理すると重複などが起きるので、同一シートないにwebhookなどで投げ込んだか否かのステータスを保持するorTriger実施を毎日一定時にしてwebhookで飛ばすアイテムを登録日が本日(or前日)のものだけにするなどの工夫は必要です。

登録日でやる方が楽なので、私はそっち派です(その場合outputのlistのなかに、dateクラスから本日日付を入れ込んでいます)。

参考までに、trello apiのDocsのURLリンクを貼っておきます。

The Trello REST API

まとめ

巷では、G-suiteがgoogle workspaceに変わって賑わってますね。

googleさんも常に新機能の追加してくれるので、追いつくだけでも大変ですが、便利なものも増えてますので、ぜひ色々調べて使ってみましょう。

大概のことは、ひと工夫入れれば実現できるようになってきていますので。

コメント