gtasks
· 🪦 retired
Google Tasks をターミナルから操作するコマンドラインクライアント(Ruby gem)です。タスクの一覧・追加・完了・削除・完了済みの一括クリアができて、完了と削除は番号指定のほかタスク名の正規表現マッチによる一括処理にも対応しています。
Google の OAuth2 認証もコマンド内で完結する作りで、初回はローカルに小さな WEBrick サーバーを立ててコールバックを受け取り、取得したトークンをファイルに保存して使い回します。
内部設計
lib/gtasks.rb 1ファイルに3つのクラスが層になって入っています。REST 呼び出しと認証を受け持つ GoogleTaskAPI、それを使いやすいメソッドにまとめた GoogleTask、ターミナル表示に整形する GoogleTaskCLI です。
- bin/gtasks — サブコマンドは
list/lists/add/clear/done/delete/choice(引数なしならlist)。doneとdeleteは引数が数字なら一覧の番号指定、それ以外は正規表現として解釈し、タスク名がマッチしたものをまとめて処理します。API の client_id/client_secret は pit gem 経由で取得していて、コードには書かない作りです - GoogleTaskCLI — 表示用の層。タスクを
[0] ☐ タイトルの形式で番号付き表示し、完了済みは ☑ にします。choiceはタスク一覧からランダムに1件選んで表示します - GoogleTask — 番号指定の
done/deleteと、タイトルの正規表現マッチで一括処理するdone_if/delete_ifを持つ中間層。「完了」はタスクのstatusをcompletedに更新することで実現しています - GoogleTaskAPI — Google Tasks API v1 の薄いラッパー。タスクとタスクリストそれぞれの取得・作成・更新・削除、完了済みタスクの一括クリアをひととおり持ち、HTTP は oauth2 gem のアクセストークン経由で呼びます
認証まわりはこうなっています。初回は認可 URL を表示してユーザーにブラウザで開いてもらい、ローカルの WEBrick サーバー(既定は 9999 番ポートの /oauth_callback)で認可コードを受け取ってトークンに交換、~/.google_tasks.yml に YAML で保存します。access_type=offline でリフレッシュトークンも受け取っているので、2回目以降はファイルから読み込んでリフレッシュするだけで、ブラウザは開きません。
保存済みファイルにリフレッシュトークンがない場合は再認証にフォールバックし、初回認証が失敗したときはトークンファイルを消して作り直せるようにしています。