Google Tasks API を使おう(その1)
Google Workspace 系のAPI全般に言えることだが、日本語の情報が出回ってなさすぎる~😓
特に、入門者向けの記事は無きに等しいので、まとめておきます。自分は、プログラミングの勉強を始めたころ、入門レベル→中級レベルの間を埋めてくれる教材がなくて苦戦しました。最近はDXへの注目が集まっており、Google APIを弄ってみたい方も増えているでしょうから、そういった方の役に立てるように記事を書いています。
さて、記事全体の構成について、まず概観しておきます。
前半では簡単な仕様を、後半では「完了済み」タスクへのアクセス方法を述べます。
GASで「完了済み」タスクを取得する方法は、自分が調べた限り、日本語での情報がネットに落ちておらず、1時間以上苦戦しました!
落とし穴になりそうなので、紹介しておきますね。
↑ この記事が長くなりすぎてしまったので、後半は次の記事に載せます
※ 途中で、この方の記事を見つけました。とても分かりやすいです。
GAS・JavaScriptの知識がある方は、自分の記事よりもこちらの方がおすすめです😂
(1)簡単な仕様
この章では、ごくごく初歩的な話しかしません。Tasks APIについて大体掴めているという方は、後半の「(2)『完了済み』タスクへのアクセス方法」だけ読んでください。
↑ この記事が長くなりすぎてしまったので、後半は、次の記事に載せます
(1-1)何のために使うのか?
気になる方のために、どういう動機で調べ始めたか一応書いておきます。
技術的な話はしないので、ここも読み飛ばしてしまって大丈夫です。
もともとタスク管理+情報管理(メモなど)を一元化したいという欲求がありました。
さらに欲を言うなら、習慣化をアシストするアプリや、ライフログを蓄積してQOLを高める条件を発見するアプリも作りたいと思っています。
不眠症、不安障害、鬱で引きこもりの生活をしていた頃、何となく思い付いて、手動でライフログをつけてみました。
タスクの達成度やQOL(主観)も併せて記録し、数週間分をまとめてグラフにしたところ、タスクの達成度とQOLがともに起床時刻と相関していたのが面白かったのです。
幸福感のような気分の問題が、単純な条件によって左右されるのは、自分にとって大きな驚きでした。とりわけ当時は、心身の不調のために大学の勉強もできなくなっていたので、希望が見えた気がしました。
そして、漠然と「テクノロジーによってQOLを高める」ことが究極的な目的となり、スケジュール、タスク、習慣、ライフログ、QOL、メモなどを一元化するアプリを考えていました(その1年後、notionが日本に上陸し、負けた!と思いました😂)。
さて、自分が作りたかったものは、いわば自己情報の一元化アプリです(脳の拡張機能と言っても良さそうです)。
さすがに全部自作するのは大変なので、既存のGoogle APIを組み合わせて、それっぽいものを作ることにしました。
そして、スマホでもPCでも使い勝手のよい、小回りが利くインターフェイスとして注目したのが Google To Do リスト (Tasks) と Google Keep でした。
(1-2)どんな風に使うのか?
iOS版「To Do リスト(Google)」の画面はこんな感じ。
シンプルで好感が持てます
メモ1:
タスクは3階層で構成されている。
タスクリスト → 個々のタスク → (必要に応じて)サブタスク
という構造である。
メモ2:
完了済みのタスクも、削除しない限り残る。
「自己管理アプリ」を作るにあたって、達成感を実感する仕組みを作りたかったので、完了済みタスクが残るのは嬉しい。
メモ3:
タスクを押すと、編集画面が開き、詳細を記入できる。
ここのテキストもAPIで拾える。そのため、自動でスプレッドシートやドキュメントにコピペできる。
例えば、「運動」タスクの詳細に「スクワット:20回」とか、「食事制限」タスクの詳細に「おにぎり:200kcal」などとメモすれば、ライフログ用のスプレッドシートに記入できる。
双方向的に使えるインターフェイスであることも嬉しい。
(1-3)使い方
GASのエディターで新しいプロジェクトを立ち上げ、サービスから「Tasks API」を追加する。それだけである。
(1-4)ドキュメンテーション(頭出し)
さて、先述の通り、Tasks API は、タスクリスト・タスク・サブタスクの3段階でタスクを整理している。
サブタスクも一種のタスクなので、タスクリスト(Tasks.Tasklist)とタスク+サブタスク(Tasks.Tasks)の2つのクラスがある。
(1-4-1)タスクリストを見てみる
Task.Tasklist.list() で、タスクリストをリストアップできる。
function myFunction() {
var list = Tasks.Tasklists.list();
Logger.log(list);
}
結果はこんな感じ
{items=[{id=******, updated=2022-06-30T08:43:55.526Z, etag="************", selfLink=https://www.googleapis.com/tasks/v1/users/@me/lists/******, title=マイタスク, kind=tasks#taskList}, {selfLink=https://www.googleapis.com/tasks/v1/users/@me/lists/******, updated=2022-07-13T04:07:18.682Z, etag="******", id=******, kind=tasks#taskList, title=マイタスク2}], etag="******", kind=tasks#taskLists}
整理すると、タスクリストの大きな構造はこうなってます。
{
items=[{…}, {…}, …],
etag="************************",
kind=tasks#taskLists
}
そして、タスクリストの直下にある個々のリストの情報は、items=[…] の中に入ってます。
{
id=************************,
updated=2022-06-30T08:43:55.526Z,
etag="************************",
selfLink=https://www.googleapis.com/tasks/v1/users/@me/lists/************************,
title=マイタスク,
kind=tasks#taskList
}
さて、長くなりすぎてしまったので、この辺で打ち切ります。
今回は自分語りが多すぎましたね。すみません m(. .)m
次回「Google Tasks API を使おう(その2)」では、
・ドキュメンテーションの概観
・「完了済み」へのアクセス方法のご紹介
・スプレッドシートとの連携
を書く予定です。
次回もよろしくお願いします。