CLI で TODO を管理する
TODO を何で管理するか問題
みなさんは TODO を管理するときにどんなものを使っていますか?
筆者はジプシーで、古くは手書きでノートや付箋に書いたり、 Slack の自分の times/DM に書いたり、notion に書いたり、GitHub の issue はどうか、Chrome の拡張はどうか...と様々な手法を取ってきました。
ただ、どれも長くは続きませんでした。
todo 1つは大したことないサイズですが、
役職上、細々としたものが非同期かつ同時並行で走っているのでチケット化しなくてもメモはしておきたいところです。
手書きだとその場になかったり持ち歩く必要があったり、 Slack のチャンネルだと流れてしまうし(自分がよく投稿するから)、notion だとわざわざ notion を開いておく必要があるし...
という感じで、なにかいい方法はないかな?と常に探している状態でした。
結論
特に奇をてらうものでもないのでさっさと作ったものを見せるとこんな感じです。
動いているのはただの TypeScript です。
最初に todo init
コマンドを実行すると、 ~/todo.txt のようなファイルを作成するようにしており、そこに TODO を書き溜めていきます。
気に入っている点
いくつかあります。
スイッチングコストの軽減
TODO を管理するのに一番の悩みは
「TODO を書くのがめんどくさい(けど書かないと忘れる)」
「TODO を書くためだけにツールを開きたくない」
でした。筆者はとにかくめんどくさいのがきらいです。
git クライアントは tig を使ったり、ファイルファインダーに fzf を使うなど、
普段からターミナルでの操作は常日頃していました。
この方式であればタスクを記入・確認するためにブラウザやアプリを開いて探す必要がありません。
書き散らかしてもテキストファイルなのでたかが知れていますし、書き損じても新しく作るか、
vim ~/todo.txt
とすれば修正もすぐ終わります。
インターフェース
こんな感じで必要最低限にしています。
- [ ] 瞑想 2024-12-29 da899b1c-a451-4f45-a1b9-38d7aa2b00b8
- [ ] 掃除 2024-12-29 9b1a1f3e-ec87-4ef3-9f70-51b56df30504
- [x] 読書 2024-12-29 7b20d915-80ef-4ef7-bd09-85a6a6581cd7
- [ ] レポートの作成 2024-12-29 730b1881-30e3-462d-a658-73632c75485b
- [ ] ミーティング 2024-12-29 4695fc64-3905-4f5b-9988-180ac2582d32
- [x] ジムに行く 2024-12-29 cf9907db-f3e6-4eb0-9a08-f5071f9f1d48
- [ ] 請求書を出す 2024-12-29 27e8a624-eec8-4792-b325-b199a5de86b8
(※筆者注釈: サンプルなので瞑想やジムに行くほどの勤勉さはありません...)
どんなタスクで、いつ書き込んで、終わっているか否か、あと識別子。
そして、行の最初を - [ ]
でリストにしておくことで、GitHub Markdown への転用もしやすいかも?という狙いもあります。
コマンドも必要最低限で、編集・削除はあまり考えておらず、直接ファイル編集で済ませる想定です。
コマンド | 説明 |
---|---|
todo init | ~/todo.txt を作成します |
todo add <TASK> | TASK に設定したものを todo に追加します |
todo d | 終了したいタスクを選びます。会話形式です。上下キーで選択。スペースで決定。Ctrl+c キーでモードを抜けます |
todo l | 未完了のタスクを一覧で出します |
todo la | すべてのタスクを一覧で出します |
作ったきっかけ
先日読んだこの記事がきっかけでこのツールをつくるに至りました。
こちらがこの記事で紹介されていたリポジトリです。
GTD(get things done)というルールに沿ってフォーマットが決められているようです。
このまま使っても良かったかもしれないのですが、
このフォーマットが自分に馴染みがないのと、自分が知っている範囲のもので作りたかったことがあります。
サンプルではそうしていないのですが、自分が TODO を書く場合は、プロジェクト名: 内容
というスタイルで書きます。
自然とそうなったのはおそらく commitizen を使ってコミットメッセージを書いていることが起因しています。
project tag や context tag にあたるものをある程度吸収しつつ、
ほどよく視認性もあるので今のところは気に入っています。
まとめ
おそらく運用していく中であれもこれもと機能を追加したくなりそうな気もするのですが、
とにかく書き残しておきたいだけでさっと使う分には今のところ十分ですし、
TODO管理を管理するアプリを作らないようにもしたいです()
Discussion