はじめに
自作の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に引き出してきただけ、とも言える。
機能としては本当にこれだけ。でも「見れない」と「トグルで見れる」の差は、毎日使う道具だと体感が大きい。
おまけ: ガントを固定幅の時間窓にした
同じ変更で、ついでにガントチャートも直した。これまではライブな範囲を全部描いていて、アーカイブを含めて履歴が積み上がると列がどんどん増えて、過去にパンするとチャートが固まっていた。
Textual の DataTable には列の仮想化(column virtualization)が無いので、列が増えればその分そのまま描画コストになる。これは素直に削れない。
なので方針を変えて、幅一定の時間窓をパンする方式にした:
H/Lで窓を1週間ぶん過去/未来へずらす、Tで今週にスナップ- 窓の幅が一定 = 描画される列数も一定なので、履歴がどれだけ積み上がっても描画コストは平ら
仮想化が無いなら、そもそも描く列を増やさなければいい、という割り切り。パンやズームで作り直しても、カーソルとスクロール位置は保つようにした。
しめ
アーカイブを見れるようにしただけの小さな変更だけど、ついでにガント描画の頭打ち問題も片付いた。こういうのの積み重ねが道具を育てる。