Todoistへのタスク追加をターミナルで手軽に行うコマンドを仕立ててみた

Todoistをターミナルからより快適に使うための方法を模索及び検証し、タスク追加用のコマンドを作ってみました。
2019.09.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

個人的なタスク、例えば家事等のプライベートから業務上で提出が必要な個人書類扱い等の全てを、Todoistで管理しています。プレミアムプランを使っている事も関係するのかもしれませんが、タスクの入れ子(子・孫・曾孫等)が手軽で、視認性もよく、スケジュール指定も柔軟でとても使いやすいサービスです。

Todoist – 最高の ToDo リスト&タスク管理アプリ

ただ、PC上での入力が意外と手間だと感じました。Mac上では以下の方法でアクセスが出来ることを確認していますが、いずれもUIを引っ張りだすためにワンステップ挟む状態です。

  • 通知センター
  • Chromeアドオン
  • Macアプリ

その場でタスク名をタイプしてEnterすると即追加されるような状態が欲しくなり、APIやライブラリについて検証し、ターミナルからタスク名を投げることでタスク追加が出来るようにしてみました。

Todoist API経由での検証

API Documentation | Todoist Developer

TodoistのAPIはアプリでの操作をほぼカバーしており、Tokenを払い出すことで概ねやりたいことの自動化も可能です。

REST APIとSync API

TodoistのAPIはこの2種類があります。Sync APIは常にサーバ側のデータと同期してからの処理としており、データ同期のための込み入った実装が不要となります。

ただ、Tokenや認証の発行に関する詳細な手続き説明が割愛されていることもあり、利用するための操作に手間がかかることと、パラメータが問題ないのか検証にかかるのがネックです。

Pytodoistの検証

サードパーティ製のPython製ラッパーライブラリです。ポイントは、REST API及びSync APIの双方で用いる認証をカバーしつつ、Syncの手間を隠蔽しているところです。

Garee/pytodoist: ✅ Use Todoist with Python.

公式のライブラリは、同期を含めた認証上の手続きを個別実施する必要があります。

Doist/todoist-python: The official Todoist Python API library

コマンドの実装

上記に上げた検証結果を踏まえて、今回はpytodoistによるコマンド化となります。手軽にglitch経由でのSlack Bot化もしてみたかったのですが、nodejs経由でのTodoist API認証が全てForbiddenで弾かれるため断念しました。

pipenv install pytodoist
#!/usr/bin/env python

import sys
from pytodoist import todoist

API_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
if len(sys.argv) == 1:
    exit()
user = todoist.login_with_api_token(API_TOKEN)
works = user.get_project('仕事')
for task_name in sys.argv[1:]:
    task = works.add_task(task_name)
    print('「' + task.content + '」を追加しました')

API TokenはIntegrationsの最下にあるAPIトークンから取得します。

連携機能

実際に使う場合は以下のようになります。

% todoist-cli Backlogにタスクを追加する Slackのステータスを更新する
「Backlogにタスクを追加する」を追加しました
「Slackのステータスを更新する」を追加しました

Todoistアプリ側も少し待つと反映されます。

あとがき

Todoistアプリやブラウザ上から複数のタスクを頑張って操作することもありましたが、pytodoist経由にするとより手軽だと実感できました。

また、Slackと直接連携できるサービスの一つでもありますが、チャンネル単位ではなくWorkSpace単位となり、個人契約のTodoistアカウントでは使いづらいのが実情です。pytodoist経由でより快適な使い道を探してみようと思います。