タスク管理や作業メモを書く場所を Emacs (org-mode) に移行した

#emacs
#productivity

背景

タスク管理 2022: Bear を使ってジャーナリングしてる

昨年まで bear.app で日々の作業メモと TODO 管理を行ってきたが、以下の理由で 3 月ごろから環境を変えた。

  • Bear は iCloud Sync を前提としており、MDM で制限がかかった環境などで使いにくい
  • 作業時間の記録などタスク管理に特化した機能が物足りない
  • テンプレート機能や自動化は Shortcuts を駆使して頑張るしかなく、痒いところに手が届きづらい

あと一歩のカスタマイズ性やデータフォーマット・同期周りの不自由さという、アプリを使っててあるあるの話。Bear 自体は念願の 2.0 が出てますます良いノートアプリになってると思う。

移行先としては Obsidian など他のアプリも検討したが、結局アプリを使い続ける限り同じ問題は起きるので思い切って org-mode に移行した。メリットはカスタマイズが豊富(すぎる)のと、あくまでノートの実態はローカルディスク上の plain text なので同期やデータ加工も自由が効く。今後自分の執筆環境やユースケースが変わっても適応させやすい。

問題はカスタマイズ性が高すぎるがゆえに迷子になりがちで、過去にもこれですぐ挫折した経験がある。今回はルールとして「今困ってることを解決するカスタマイズ以外はやらない」というのを掲げ、まずは単なる plain text でタスクを箇条書きする程度の気持ちから使い始めた。

半年ほどかけて少しづつカスタマイズを継ぎ足し、だいぶ自分なりのワークフローが確立されてきた。この機会にどう使っているかをまとめてみる。

org-mode でのタスク管理

org-mode でのタスク管理の様子
org-mode でのタスク管理の様子

以下のルールで日々のタスクを管理している。

  • tasks.org という一つのファイルのみで運用
  • 1 日につき 1 headline
  • オフ日の週末のタスクもここで管理

今年の 3 月頃からこの運用を開始して、8 ヶ月ほどで行数は 8000 行ほどある。Bear を使っていた時はファイル行数が長くなるにつれ見たい日までスクロールするのが大変で、日ごとにファイルを作成していた。これをすると逆に過去ログを見づらかったり、未完了のタスクを翌日に持ち越す作業が面倒だった。

org-mode では S-tab で全ての headline が折り畳めるので行数が増えてもあまり困らない。今のところ Emacs が重たいといった問題もないので、1 年単位でファイルをローテーションしてみるつもり。

毎朝 org-capture でその日の作業テンプレートを挿入する

1 日の始まりは org-capture でその日にやりたいタスクを書き出すところから。普段使っている capture-template は以下のようにして、headline にその日の年月日が入るようにしている。 headline の横には [/] と書いておき、全タスク数と完了数が自動で出るようにする(最近までこの機能を知らなくて感動した)。

* %<%Y/%m/%d (%a)> [/] ** TODO 朝会 *** やったこと *** 今日やること ** TODO

org-capture の設定はこんな感じで。

;; org-capture の設定 (use-package org :init (setq org-directory "~/Dropbox/org" org-daily-tasks-file (format "%s/tasks.org" org-directory)) :custom (org-capture-templates '(("d" "Weekdays TODO" entry (file org-daily-tasks-file) "%[~/.emacs.d/assets/org-templates/weekdays-todo.org]" :prepend t) ("w" "Weekends TODO" entry (file org-daily-tasks-file) "%[~/.emacs.d/assets/org-templates/weekends-todo.org]" :prepend t)) ))

capture finish した内容は tasks.org の先頭に prepend するようにして、日毎の headline が降順で並ぶようにしている。

週末は朝会など仕事の TODO は不要なので、代わりに土日用の別テンプレートを用意している。 自分は毎週日曜に 1 週間を振り返る KPT をやっていて、そこで出した TRY を書き出して翌週も目に入りやすくする headline をテンプレートで自動生成してる。このようなプログラマブルなテンプレート記法は Bear にはなかったものでとても重宝してる。

;; 週末の headline を挿入するためのテンプレート ;; 土日分と合わせて、KPT の結果を書くための headline を用意している ;; "TRY 2023/12/10 (Sun) - 2023/12/16 (Sat)" みたいな headline を挿入。ここに翌週のTRYを書き込む # TRY %(format-time-string "%Y/%m/%d (\\%a)" (org-read-date nil t "Sun")) - %(format-time-string "%Y/%m/%d (\\%a)" (org-read-date nil t "Sat")) ;; 日曜日の headline # %(format-time-string "%Y/%m/%d (\\%a)" (org-read-date nil t "Sun")) [/] ## TODO KPT ## TODO ;; 土曜日の headline # %<%Y/%m/%d (%a)> [/] ## TODO 毎朝の家事を済ませる ## TODO

全ての作業を task 化し、clock 管理する

日々の作業は全てこの tasks.org で TODO 化しつつ、必ず作業開始時に org-clock-in して作業時間を記録するようにしている。 これは使った時間の管理だけでなく、clock-in することでその作業に入るぞ、という気持ちの切り替え的な意味合いも大きい。

こうした時間記録は中断を忘れる問題があるので、簡単な方法で作業中のタスクを Menu Bar に表示したりしてる。
org-mode で clock-in しているタスク名を macOS の Menu Bar に表示したい

org-agenda で 1 日の振り返り、タスク棚卸し

1 日の最後に org-agenda でどのタスクにどれだけ時間を使ったか見る。まだまだ時間管理が甘くて空白があったりするので、今は軽く見る程度にしている。

未完了のタスクは整理し、翌日の headline に移動させたりする。この作業は Bear だと地道に未完了タスクを cut&paste で移動させていたが、org だと C-c C-w (org-refile)で翌日の headline に移せて便利。

org-modern で見た目をカスタマイズ

毎日タスクの棚卸しはしてるものの、どうしても過去の日の headline に未完了タスクを忘れてしまうことがある。 headline にはタスク数と完了数を表示しているが、デフォルトだと見づらいので全てのタスクが完了になっている headline だけ ✅ を表示している。これは org-mode の見た目調整に使ってる org-modern でカスタマイズしている。

(use-package org-modern :custom (org-modern-progress '("○" "◔" "◑" "◕" "✅")) :hook ((org-mode . org-modern-mode) (org-agenda-finalize . org-modern-agenda)))

半年以上運用してみて

以上のようなフローで、半年ほどほぼ毎日ジャーナリングを続けてきた。もうすっかり離れられない環境になっていて、タスク管理だけでなくメモやブログ下書きなども org-mode に移行させつつある。

こうなってくると今度はコードを書くのも Emacs 上でやりたいとか、いろんな欲求が出てくる。けど基本スタンスとして「どうしても困ったらカスタマイズする」を徹底して手を広げすぎないようにしている(沼なので・・・)。 しかし同じフレーム上で作業を完結させられるとレバレッジが効くので、この辺もまた時間をかけてちょっとづつ整備していきたいところ。

これまで様々なノート・タスク管理アプリを使ってきたが、あと一歩不満があったり、自分のスタイルに合わなくなってきたり、はたまた事業買収で無くなったり微妙な仕様になる等を経験してきた。 その点 org-mode は初期の学習コストこそ高いものの長い目で見た時の持続可能性は高いし、今回移行してよかったなと思う。そろそろタスク・メモ管理もこれで End Game したい。

Tweet