行動を細分化し、テキパキ物事を仕上げる仕事術 with org-mode
ブログを毎日更新すると決めていたものの、1ヶ月で途絶えてしまいました。 ごめんなさい。 毎日書くのはさすがにきついです。 まだ文章を書くのに時間がかかるので、ブログに時間がとられてしまいました。 これからは、数日おきくらいになると思います。
さて、org-modeでGTDをやって2年ほどになりますが、思ったほど成果がでていませんでした。 しかし、行動をものすごく細かく分けて考えることで、力が発揮できるようになりました。 「すべてはプロジェクト」と考え、サブタスクを定義していく方法です。
すべてはプロジェクト
GTDでは、2つ以上の行動がともなうものをプロジェクトと定義しています。 ところが、1つの行動で済むタスクというのはほとんど多くないと思いました。 行動はとことん細分化することができるからです。
極論を言うと、「歯磨きをする」でさえもプロジェクトです。 なにせ、以下のステップに細分化されるからです。
- 洗面所へ行く
- 歯ブラシを取り出す
- 歯を磨く
- 歯ブラシをしまう
もっとも、ここまで細分化している人はいないと思いますが(笑) それでも複数の行動に分けることができる以上、プロジェクトなのです。 我々がそれをプロジェクトとみなさないのは、歯磨きという一連のプロセスが自分にプログラムされているからに過ぎません。
というわけで、僕は「すべてはプロジェクト」と考えるようになりました。 そう考えることで、具体的な行動を想像し、ステップバイステップで目標にむけて着実に実行できるようになります。
以前は「○○というバグを直す」もプロジェクトとはみなしていませんでした。 今は、以下のように細分化してサブタスクを定義しています。
- バグ報告をまとめる
- まとめたバグ報告を印刷する
- バグを確認する
- バグを修正するコードを書いて動かす
- ドキュメントを更新する
- 報告者にメールする
こんな感じで自分を「プログラム」してあげれば、次の行動がすぱっと出てきて、迷わなくなります。 また、バグ修正みたいに決まったプロセスはyasnippetなどでテンプレート化しておくとなおよし。 とにかく細かければ細かいほど動きやすいです。
今では、ほぼすべてのタスクにサブタスクが定義されています。 頭のなかでイメージし、サブタスクを考える時間を「投資」することで、結果的にはやく仕事を終えられます。
再びプロジェクトを実行するとき、サブタスクをDONEからTODOに戻す
そこで出てくるのが、org-modeでのサブタスクの扱いが雑という問題です。 ワークフローとして、ひとつひとつのサブタスクを仕上げていき、サブタスクをDONEにしていき、サブタスクがなくなればプロジェクトが完了(DONE)となります。
再びこのプロジェクトをやる場合、プロジェクトをDONEからTODOへ戻します。 しかし、そこで問題がおきます。 現状のorg-modeでは、プロジェクトをDONEから戻しても、サブタスクがDONEの状態のままです。 これではいちいち手で戻サブタスクをTODOへ戻してやる必要があり、とても面倒です。
そこで、このコードです。 「SCHEDULED: <2010-07-23 金 +1d>」などのように、習慣として定期的にやる行動で威力を発揮します。 こうSCHEDULEDを指定しておくと、DONEにしたら次の、周期に日付がセットされ、再びTODOに戻るようになっています。
コード
;; (save-window-excursion (shell-command (format "emacs-test -l test-minimum -l %s %s &" buffer-file-name buffer-file-name))) ;; (find-file "~/memo/junk/2010-11-30-233030.subtask.org") (require 'org) (defun org-revert-subtasks () (org-map-entries '(if (equal (org-entry-get (point) "TODO") "DONE") (org-todo "TODO")) (format "LEVEL=%d" (1+ (org-reduced-level (org-outline-level)))) 'tree)) (defun org-after-todo-state-change-hook--todo () (when (equal state "TODO") (org-back-to-heading) (org-revert-subtasks) (org-back-to-heading))) (add-hook 'org-after-todo-state-change-hook 'org-after-todo-state-change-hook--todo)
動作例
*** TODO parent **** TODO sub1 **** TODO sub2
↓ サブタスクを2つともかたづける
*** TODO parent **** DONE sub1 CLOSED: [2010-12-01 水 00:05] **** DONE sub2 CLOSED: [2010-12-01 水 00:05]
↓ プロジェクトをDONEにする
*** DONE parent CLOSED: [2010-12-01 水 00:05] **** DONE sub1 CLOSED: [2010-12-01 水 00:05] **** DONE sub2 CLOSED: [2010-12-01 水 00:05]
↓ 再びプロジェクトをTODOにする
*** TODO parent **** TODO sub1 **** TODO sub2
自動的にサブタスクもTODOになる。
おまけ:TODOからTASKへ
ちなみに、僕は「TODO」という言葉を使うことを卒業しました。 代わりに「TASK」という言葉を使うようにします。 日本語では「仕事」と訳されますが、微妙なニュアンスが異なります。
前者は「やらされている仕事」とか「やらないといけないこと」という意味があります。 これは受動的で、あまりいい言葉とは思いません。 聞いても楽しい気分はしません。
後者は、「自発的に生まれた仕事」という意味です。 目標を設定して、それに向かっていくプロセスなので、能動的です。
やはり、言葉としてはTASKの方がいいですね。 ということで、org-modeの設定でTODOをTASKに全置換しました。 もちろん「TODOリスト」ではなくて「TASKリスト」です。
返信
To: komtak
はーはい。「状態」ですね。
TODO→TASKの置換をしてみるだけで、不思議と新しい気持ちで仕事が始められました。 言葉の魔力というか、おもしろいものです。
サブタスクはTASK→DONEのみで、STARTEDやWAITINGは親タスク(=プロジェクト)で管理しています。 また、時間計測も親タスクの方です。
ちなみに僕はこんな感じの設定です。 CANCELは、結局不要になったという意味です。
(setq org-todo-keywords '((sequence "TASK(t)" "STARTED(s)" "WAITING(w)" "|" "DONE(x)" "CANCEL(c)")
(sequence "APPT(a)" "|" "DONE(x)" "CANCEL(c)")
(sequence "NEXT(n)" "|" "DONE(x)")))