ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

【GAS】Google ToDoでの期限が過去の未完了のタスクの期限を今日に設定するぞ

この記事は GAS道場 Advent Calendar 2019 の22日目の記事です。 Google Apps Script(GAS)をこれから使おうという方向けのアドベントカレンダーになります。

今回は、Google ToDoのタスクを操作する方法についての紹介をしたいと思います。

タスク一覧とタスクを取得する

では、まずはタスクを取得してみましょう。

function myFunction() {
  var taskLists = Tasks.Tasklists.list();
  if (taskLists.items) {
    for (var i = 0; i < taskLists.items.length; i++) {
      var taskList = taskLists.items[i];
      Logger.log('Task list with title "%s" and ID "%s" was found.',
                 taskList.title, taskList.id);
      listTasks(taskList.id);
    }
  } else {
    Logger.log('No task lists found.');
  }
}

function listTasks(taskListId) {
  var tasks = Tasks.Tasks.list(taskListId);
  if (tasks.items) {
    for (var i = 0; i < tasks.items.length; i++) {
      var task = tasks.items[i];
      Logger.log('Task with title "%s" and ID "%s" was found.',
                 task.title, task.id);
    }
  } else {
    Logger.log('No tasks found.');
  }
}

こちらのスクリプトは、GASのドキュメントにも書いてあるものをちょっと修正しています。

developers.google.com

また、こちらのスクリプトを実行するために、ライブラリを使えるようにしないといけないため、以下の設定をする必要があります。

f:id:ponkotsu0605:20191221225247p:plain

リソースGoogleの拡張サービスを選択します。 f:id:ponkotsu0605:20191221225337p:plain

Tasks APIの項目のところをオンにします。

以上で設定が完了です。

これで、スクリプトを実行するとタスクリストのIDや各タスクのIDを取得することができます。

期限が過去のタスクを更新する

では、タイトルでも長く書きましたが、期限が過去の未完了のタスクというのは、期限を今日にしてしまおうって思ったのです。 なので、期限を今日に修正してみます。

function main() {
  var taskListId = '[タスクリストのIDを入力する]';
  var tasks = Tasks.Tasks.list(taskListId);
  if (tasks.items) {
    for (var i = 0; i < tasks.items.length; i++) {
      var task = tasks.items[i];
      if (new Date(task.due) < new Date()) {
        now = new Date();
        task.due = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + 'T00:00:00.000Z'
        Tasks.Tasks.update(task, taskListId, task.id)
      }
    }
  } else {
    Logger.log('No tasks found.');
  }
}

指定のタスクリストに対して、過去の期限を今日に更新するものになります。 f:id:ponkotsu0605:20191221225645p:plain

例えば、このようなタスクがあった場合、このスクリプトを実行すると・・・ f:id:ponkotsu0605:20191221225713p:plain

このように、過去のタスクのみが更新されました。

このスクリプトを1日1回実行するようにしておくと良いのかもと思いました。

www.pnkts.net

さいごに

今回はGoogle ToDoのタスクの取得だったり、更新の操作をすることができました。ただ、期限を時間単位・分単位で設定する方法がわからずそこはまだできず。。そのような課題はありますが、これもまた夢が広がりそうです。