gtasks

Google Tasks をターミナルから操作するコマンドラインクライアント(Ruby gem)です。タスクの一覧・追加・完了・削除・完了済みの一括クリアができて、完了と削除は番号指定のほかタスク名の正規表現マッチによる一括処理にも対応しています。

Google の OAuth2 認証もコマンド内で完結する作りで、初回はローカルに小さな WEBrick サーバーを立ててコールバックを受け取り、取得したトークンをファイルに保存して使い回します。

内部設計

lib/gtasks.rb 1ファイルに3つのクラスが層になって入っています。REST 呼び出しと認証を受け持つ GoogleTaskAPI、それを使いやすいメソッドにまとめた GoogleTask、ターミナル表示に整形する GoogleTaskCLI です。

gtasks のコンポーネント構成図

認証まわりはこうなっています。初回は認可 URL を表示してユーザーにブラウザで開いてもらい、ローカルの WEBrick サーバー(既定は 9999 番ポートの /oauth_callback)で認可コードを受け取ってトークンに交換、~/.google_tasks.yml に YAML で保存します。access_type=offline でリフレッシュトークンも受け取っているので、2回目以降はファイルから読み込んでリフレッシュするだけで、ブラウザは開きません。

gtasks の OAuth2 認証フローのシーケンス図

保存済みファイルにリフレッシュトークンがない場合は再認証にフォールバックし、初回認証が失敗したときはトークンファイルを消して作り直せるようにしています。