どんなふうにタスクを管理すれば効率を上げられるのだろう?

仕事やプライベートのタスクのほぼ全てを書き出して管理している。そうすると一人の社会人が関わるタスクがいかに多いかが分かる。それらのタスクは全て処理される訳ではないけれど、書く事で記録が残り後で見返す事ができる。それと引き換えにして、タスクの管理コストが増える。そのコストを下げるために、Emacsを使っている。Emacsにはorg-modeというドキュメントシステムがある。org-modeはドキュメント作成の他にも、プロジェクト管理、表計算、LaTeXやHTMLへの変換など多様な機能を提供している。Emacs Lispで実装されており、その挙動のほとんどを動的に変更できる。

今回は、僕がEmacsとorg-modeを使う上で工夫している事を書く事にする。

これはたんに僕が考えている事なんだけれど、正しいやり方というのは特になくて、それぞれが考えた思い思いのやり方が、その時のその文脈での正解だと思う。だから、ここに書く事も、特にそれが正解という訳ではなくて、今の僕にとって都合が良かった正解というだけだ。

キーバインド

s-1
今やる事の一覧
s-2
今日やる事の一覧
s-3
明日やる事の一覧
(defun org-agenda-display-week-view-now ()
  (interactive)
  (org-agenda-list)
  (org-agenda-week-view))

(defun org-agenda-display-priolity-A ()
  (interactive)
  (let ((org-agenda-custom-commands
         '(("A" "Priority #A tasks" tags-todo "+PRIORITY=\"A\""))))
    (org-agenda nil "A")))
(define-key override-global-map (kbd "s-1") #'org-agenda-display-priolity-A)
(define-key override-global-map (kbd "s-2") #'org-agenda-list)
(define-key override-global-map (kbd "s-3") #'org-agenda-display-week-view-now)

org-todoのstatusを増やす

org-todoにはTODOとDONEのステータスがデフォルトで用意されている。この値は org-todo-keywords に追加したい値を設定する事でカスタマイズできる。完了状態なのか、そうでないかは | 記号よりも前に登録されているか、後に登録されているかによって判断される。ここでは必要と思われるステータスを追加する。

(setq org-todo-keywords
      '((sequence "TODO" "EPIC" "WAIT" "GOAL" "MEET" "|" "DONE" "CANCEL" "MAYBE")))

なお、この値はcustomizeを使って変更できる。

アジェンダビューでの表示順序を指定する

アジェンダビューでプロジェクト毎にタスクが固まるように、 org-agenda-sorting-strategy ソート戦略を設定する。

この変数は M-x customize を使っても管理できるが、頻繁に変更するような運用をする場合、すぐに評価できるように setq を.emacs.d/init.elに記述した方が都合が良い事もある。

(setq org-agenda-sorting-strategy
    '((agenda time-up priority-down category-keep priority-down category-keep)
      (todo   category-down priority-down)
      (tags   priority-down category-keep)
      (search category-keep)))

タスクの優先度を設定する

org-modeのタスクの優先度を設定する。Aが最優先だ。 優先度は以下の要素を鑑みて設定する。

  • 締切日時
  • 労力対価値

    • 作業時間
    • 心理負荷
(setq org-priority-lowest ?B)

org-agendaのフォーマット

%c / %e / %l / %T / %t / %s / %b /

%c the category of the item, \"Diary\" for entries from the diary, or as given by the CATEGORY keyword or derived from the file name %e the effort required by the item %l the level of the item (insert X space(s) if item is of level X) %i the icon category of the item, see `org-agenda-category-icon-alist' %T the last tag of the item (ignore inherited tags, which come first) %t the HH:MM time-of-day specification if one applies to the entry %s Scheduling/Deadline information, a short string %b show breadcrumbs, i.e., the names of the higher levels %(expression) Eval EXPRESSION and replace the control string by the result

(setq org-agenda-prefix-format '((agenda . " %i %-12:c%?-12t% s") (todo . " %i %-12:c") (tags . " %i %-12:c") (search . " %i %-12:c")))

(setq org-agenda-prefix-format
  '((agenda . " %-30.30b %7(org-assign-assignee-value-custom) %4(org-clock-sum-current-item-custom) %4e ")
    (todo . "%-9.9c / %e / %l / %T / %t / %s / %b / ")
   (tags . "")
   (search . "")
   ))

org-global-properties

(setq org-global-properties
      '(("Effort_ALL" . "5 13 21 34 55 89 144 233 377 610 987")))

過去に設定していたカスタマイズ

過去に設定していたが、やめてしまった設定を記載しておく。

Emacsの設定ファイルを素早く開く

Emacsの設定ファイルは開く回数が多いため、素早く開けるように独自の関数を定義してキーを割り当てる。

(defun open-emacs-init-file ()
  (interactive)
  (expand-file-name "~/.emacs.d/README.org"))

(bind-key* "s-2" #'open-emacs-init-file)

ファイルを分割した事、org-agendaのキー割り当てにs-1やs-2を使いたかった事などから、の設定は使わないようにした。Emacsの起動画面のdefault-directoryをEmcsの設定ファイルのある場所にしてお茶を濁すなどした。