#task_manager_for_chores
片付けとか掃除とかの雑用をゆるめに管理するための単純なタスクマネジャ。 管理対象は、オフラインの雑事。コンピュータ上で行う仕事とか、オフラインでも締め切りのはっきりしている仕事とかは対象外。
- 掃除機はN日おきくらいにかけたい
- 洗濯はN日おきくらいにしたい
- 植物の水やりはN日おきくらいにしたい
- Nヶ月に1回くらいのペースで歯科医院にかかっておきたい
- あ、あと不定期タスクだけど、X日までにはちょっと銀行に行かなくては!
- 急ぎではないけれど、買い替え時のものがあるから、色々検討したり買いに行ったりしたいなあ
- だがどれも絶対的な締め切りではない
- 都合が悪ければ後回しでも (ある程度は) 平気なので、リマインドとか鬱陶しいことはしないでほしいわ
……という感じのもの。定期的なタスクと不定期なタスクの両方があることと、期限の長短があることだけは前提にしておく必要がある。
ブラウザ + Perl + bash + sqlite3 があれば動くはず (macOS の環境で試しただけだが)。
- 状態の閲覧と、新規タスクの登録と、タスク遂行の報告は、HTMLページを通して行う。具体的には、そこでコマンドを生成する。
- そのコマンドをターミナルに手動でコピー&ペーストして実行。
- データはSQLiteで管理。
- HTMLページはその度にPerlスクリプトかシェルスクリプトで作り直す。
って感じで、ちょっと不便かもしれないが、自分用だからまあいいや。
そしてそのHTMLページを、
- ブラウザのホームからパッと開けるようにしておく、または、
~/.bash_profile
にopen ~/Documents/hoge/fuga/index.html
とか書いておいて強制的にほぼ毎日開くようにしておく (もしくは、~/.bash_profile
にalias chores='cd ~/Documents/hoge/fuga/'
とか書いておいて、chores
と打つだけでここのディレクトリに来られるようにしておく)
ことで、ふんわりと状況確認および進捗反映をしたいなあ、と。 HTMLページを使うならLocalStorageを使っても良さそうだけど、とりあえず使い慣れているもので作ってしまおう。
……というふうに、とりあえず考えている。
自分がローカルで使うためのものなので、SQL文の生成など、手を抜いている。エスケープすらしていない。本当は DBD::SQLite
モジュールと DBI
モジュールを使って、プリペアドステートメントをPerl側で指定しておくなどして、安全に配慮すべきである。まあ、現状のやり方だと危険性はあるんだが、とりあえず。
(1) 初期化。
$ sqlite3 chores.db < init.sql
と実行して、空っぽのDBを作る。
(2) 最初は、一つずつタスクを登録するのがかったるいので、まとめてCSVから登録したい。ということで、regular.csv
と irregular.csv
というファイル名でデータを用意して (面倒だが primary key の列に自分でちゃんとID用の番号を振ること)、
$ sqlite3 chores.db < add_definitions_at_once.sql
と実行する。
- なお、面倒なのでCSVファイル名は固定。一回
mkdir bak
としておいて、CSVファイルが古くなったら適当にリネームして./bak/
へ移動するとか、あるいはいっそCSVファイルを捨てるとかで良いでしょう。 sqlite3
を起動して、where
節にis null
を指定した場合とis ""
を指定した場合でselect
文を試してみたら、上記のようにしてCSVファイルから追加したレコードでは、空のカラムは、NULL ではなく空文字列が入っているようである。でも普通にSQL文を発行した場合は NULL になるみたい?
(3) 通常運転に入ったら、index.html
を使う。……んだけど、まずその index.html
を作るために、一度、$ ./init.sh
と実行しておく。
(4) で、いよいよ通常運転ですが、単に index.html
に従うだけですわね (ここで生成したコマンドをコンソールに貼り付ける前に、init.sh
のあるディレクトリに移動しておく必要はある)。
(5) ターミナルで sqlite3 chores.db < calc_stat.sql
とすると、簡易統計を表示するようにした。
「ちょっと遠大すぎて、どうしたらいいか分からないタスク」は、とりあえず、5年とかめちゃくちゃ先の期限を設定して「タスクの存在だけはとりあえずメモしておく」ようにした上で、もうちょっと細かいタスクへの分割の仕方を思いついたら、その細かいタスクを新たな単発タスクとして、もう少し短い期限で登録する。
タスク名を修正したいときは、sqlite3
をコマンドラインで呼び出して、自分で update
文を手打ちする。あまり起きない事象だろう、と期待しているので、とりあえずこれで逃げておく。
なお、その作業が済んだら、init.sh
を実行すること。
周期・期日の変更機能は追加済み。
タスクを削除したいときは、削除でなくて validity
フィールドの値を0に更新する。具体的には、sqlite3
をコマンドラインで呼び出して、自分で update
文を手打ちする。あまり起きない事象だろう、と期待しているので、とりあえずこれで逃げておく。具体的には、たとえば、update regular_chores_idx set validity=0 where reg_chore_id=10;
のような感じである。
なお、その作業が済んだら、init.sh
を実行すること。