WADA-DEV(7) $ /ja/blog/taskdog-tui-archive-toggle/

NAME

taskdog-tui-archive-toggle

SYNOPSIS

CLI/TUIタスク管理ツールtaskdogに、アーカイブ済みタスクをTUIで表示するトグルを足した話。ついでにガントチャートを固定幅の時間窓にして、履歴が増えても描画が重くならないようにした。

DESCRIPTION

はじめに

自作のCLI/TUIタスク管理ツール taskdog の話。

完了したタスクはアーカイブに送る運用にしているんだけど、これまでTUIのタスク一覧からはアーカイブ済みが一切見えなかった。「あれ、先週終わらせたあのタスクどこいった」となるたびにCLIを叩く羽目になっていて、地味に不便だった。なので見れるようにした。しょうもない機能追加だけど、こういう積み重ねの記録として。

やったこと: Toggle Archive

コマンドパレットに Toggle Archive というエントリを足しただけ。実装は驚くほど薄い。

TUIの状態に show_archived: bool = False を1個持たせて、タスクをfetchするときにそのフラグを渡す:

self.repository.list_tasks(
include_archived=self.state.show_archived,
)

トグルを実行すると show_archived が反転して一覧が再取得される。それだけ。include_archived の道はもともとCLI側に通っていたので、TUIはそのスイッチをUIに引き出してきただけ、とも言える。

機能としては本当にこれだけ。でも「見れない」と「トグルで見れる」の差は、毎日使う道具だと体感が大きい。

おまけ: ガントを固定幅の時間窓にした

同じ変更で、ついでにガントチャートも直した。これまではライブな範囲を全部描いていて、アーカイブを含めて履歴が積み上がると列がどんどん増えて、過去にパンするとチャートが固まっていた。

TextualDataTable には列の仮想化(column virtualization)が無いので、列が増えればその分そのまま描画コストになる。これは素直に削れない。

なので方針を変えて、幅一定の時間窓をパンする方式にした:

  • H / L で窓を1週間ぶん過去/未来へずらす、T で今週にスナップ
  • 窓の幅が一定 = 描画される列数も一定なので、履歴がどれだけ積み上がっても描画コストは平ら

仮想化が無いなら、そもそも描く列を増やさなければいい、という割り切り。パンやズームで作り直しても、カーソルとスクロール位置は保つようにした。

しめ

アーカイブを見れるようにしただけの小さな変更だけど、ついでにガント描画の頭打ち問題も片付いた。こういうのの積み重ねが道具を育てる。

👉 https://github.com/Kohei-Wada/taskdog

TAGS

Python · TUI · 個人開発