View on GitHub

cat-task-manager

cat-task-manager

cat-task-manager

毎日繰り返す小さなタスクを管理するTUI。キーボード操作。Rustで書かれています。

※以降、AIが生成した文章が多く、目が滑るので、あとで人力で修正予定です

このアプリは汎用 TODO アプリではない。プロジェクト、期限、優先度、タグ、検索、複雑な依存関係を扱うことよりも、「今日もやる、決まった並びの作業」を迷わず進めることを優先している。

思想

毎日やるタスクは、管理が大げさになるほど続かない。 必要なのは、いま見るべきタスクがすぐ見えること、開始した時刻が残ること、終わったら次に進めること、 そして手元の操作が軽いこと。

そのため、cat-task-manager はタスクを増やしすぎるための機能を持たない。 タスクは階層化しない。並列依存も持たない。タスクごとのメモや属性も持たない。 毎日の流れを保つために、順番に進めることだけを強く扱う。

タスクと当日の途中状態は tasks.txt だけを正とする。config にタスクを書かない。 別の status directory も持たない。 タスクを頻繁にメンテナンスできることを ETC 原則として優先し、 ユーザーが触る対象を 1 つのテキストファイルに寄せる。

- [ ] 朝のルーティン
- [ ] メール確認
- [ ] コードレビュー

この形なら、タスクを追加するときにテーブルやフィールド名を複製しなくてよい。 上から下への並びがそのまま実行順になり、順序を変えたければ行を動かせばよい。

背景

無くて七癖と、生活用のタスク管理アプリ。

バイブコーディングが可能になった現代、 もはやタスク管理アプリに自分の癖をあわせる必要はなく、 自分の癖にあわせたタスク管理アプリをバイブコーディングしたほうが速い。

と思ったのでバイブコーディングしました。 他人が使うことは想定していません。 頻繁に予告なく破壊的変更をします。 それはそれとして、これを共有することで誰かがなんらかのヒントを得るきっかけにでもなれば幸いです。

実装の考え方

タスク定義と現在の状態は tasks.txt にまとめる。 通常の非空行がタスク定義であり、状態は各タスク行の行末 JSON として読む。 行末 JSON はアプリが書く領域である。

- [x] 朝のルーティン {"date":"2026-05-19","state":"done","started_at":"2026-05-19T09:00:00+09:00","completed_at":"2026-05-19T09:05:00+09:00"}
- [ ] メール確認 {"date":"2026-05-19","state":"in_progress","started_at":"2026-05-19T09:12:00+09:00"}
- [ ] コードレビュー {"date":"2026-05-19","state":"not_started"}

これは別ファイルへ状態を複製しないための割り切りである。 タスク名の typo を直しても、その行の行末 JSON を残せば状態は消えない。 行を追加、削除、並べ替えた場合は、状態も同じ行に付いて動く。 - [x] で行末 JSON がないタスクは、検知した時刻を着手時刻と完了時刻として行末 JSON に正規化する。 行末 JSON の形式が壊れていれば起動時や reload 時にエラーとして扱う。

過去の記録だけは records に日付別で書き出す。 これは当日の操作対象ではなく、日が終わった後の結果である。 tasks.txt の SSoT を崩さないため、当日の復元には使わない。

画面は、次に扱うタスクへ集中しつつ、必要なときだけ全体も確認できるようにしている。 起動直後は 1 行表示にし、v で 1 行、未完了、全体表示を切り替える。 未完了表示では完了済みのものを外し、全体表示では完了済みも含めて表示する。 完了済みのものは開始時刻と完了時刻から作業時間を表示する。操作対象は未着手、実施中、保留のものだけにする。

状態は少なくしている。未着手、実施中、完了、保留、時間切れだけを持つ。 日付が変わったら、完了していないものはその日の記録では時間切れとして扱う。 これは締め切りやスケジューリングを複雑にするためではなく、 「その日に終わらなかった」ことを簡単に残すための割り切りである。

操作はキーバインド中心にしている。開始と完了は同じキーで進め、保留と再開も同じキーで切り替える。 tasks.txt もキー操作で開き、閉じたら再読み込みする。 アプリの中でフォームを作るより、普段使っているエディタに任せるほうが速く、失敗したときも中身を確認しやすい。

設定の形

config.toml はエディタ候補とキーバインドだけを持つ。タスクは書かない。

editors = ["fresh", "zed", "nvim", "code"]

[keybindings]
next = "j"
previous = "k"
advance = "enter"
hold = "h"
edit = "e"
toggle_view = "v"
quit = "q"
help = "?"

保存場所は Windows の AppData Local 配下にまとめる。

%LOCALAPPDATA%\cat-task-manager\config.toml
%LOCALAPPDATA%\cat-task-manager\tasks.txt
%LOCALAPPDATA%\cat-task-manager\records\YYYY-MM-DD.toml

tasks.txt はユーザーとアプリが同じ対象を読み書きする SSoT。config.toml は操作環境の設定。records は過去結果の出力先として扱う。

割り切り

このアプリは「タスクを管理する場所」ではなく、「決まった日課を進める場所」として作っている。

柔軟な TODO 管理、検索、タグ付け、期限管理が必要なものは別の道具に任せる。 cat-task-manager は、毎日同じように始めて、上から順に進めて、終わらなかったものはその日の結果として残す。 その単純さを崩さないことを実装上の優先事項にしている。