概要
いまさらGoogleのToDoリスト(Googleタスク)を利用するようになったので、GASから操作できるのかな?と試してみたら、意外と出来ることが限られていたり、バグ?仕様?のようなものにブチ当たったってお話。
参考
GASリファレンスのTasksAPIの記述
TasksAPIのリファレンスドキュメント
準備
エディタのサービスの追加でTasks APIを有効にしておく。
リストの取得
リストを取得するメソッドがこちら
Tasks.Tasklists.list()
リストとその情報がJSONで次のように取得できる。
{items=[
{id=リストのID,
etag=リソースのETag,
selfLink=リストのURL,
title=タスクのタイトル,
kind=tasks#taskList,
updated=最終更新日時}
],
etag=リソースのETag,
kind=tasks#taskLists}
itemsの中の波括弧が一つのリストの情報で、リストが複数あれば波括弧のセットがリストの個数分並ぶ。なので、一つ目のリストのタイトルとIDを取得しようと思ったらこんな感じ。
function getList() {
var taskLists = Tasks.Tasklists.list();
Logger.log(taskLists.items[0].title);
Logger.log(taskLists.items[0].id);
}
タスクの取得
リストを取得するメソッドがこちら
Tasks.Tasks.list(リストのID)
タスクとその情報がリストの時と同じ感じで取得できる。
リストと比べて情報量が多いので、詳細は上記参考にも書いたTasksAPIのリファレンスドキュメントのREST resource→tasks→Overviewをご参照。
例えば、一つ目のタスクのタイトル、説明、期日を取得しようとするならこんな感じ。
function getTask() {
var tasks = Tasks.Tasks.list('リストのID');
Logger.log(tasks.items[0].title);
Logger.log(tasks.items[0].notes);
Logger.log(tasks.items[0].due);
}
期日のタイムスタンプが破棄されるようで、日付しか取得できないのが残念。
タスクの追加
タスクを追加するメソッドがこちら
Tasks.Tasks.insert(オプション, リストのID);
オプションでタイトルや説明を指定できる。
タイトル、説明、期日を指定してタスクを作成するならこんな感じ。
function addTask() {
var task = {
title: 'タイトル',
notes: '説明文',
due: '2022-12-31T00:00:00.000Z'
}
var taskListId = 'リストのID';
task = Tasks.Tasks.insert(task, taskListId);
}
取得の時と同様タイムスタンプは破棄されるので、期日は日付のみ指定可能。
検討
GASなので他のGoogleサービスと連携させやすい。
特定のメールがあったら、メールの件名をタスクのタイトル、メールへのリンクを説明文にしてタスクを作成するスクリプトを作り、トリガーで毎日作動。とか?
外部のサービスなら、ChatworkやLINEと絡めた使い方も考えられそう。
バグ?仕様?
有料版Google Workspaceで使えるGoogleチャットの「スペース」に、スペース内で作ったタスクをメンバーに振り分ける機能がある。
この機能で振り分けられたタスクがリスト内にあると、タスクを取得する際にエラーになってしまうみたい。2022年4月現在
スペースから割り振られるリストと、GASで操作するリストは別にしておく必要がありそう。