読者です 読者をやめる 読者になる 読者になる

handlename's blog

コード片など

org-modeでTODO管理

Emacs Advent Calendar jp: 2010 : ATND の10日目です。


  • 2011-01-02 タイポ修正

勢いで参加したものの、elispはさっぱりかけないので、
日々使っている機能を紹介する路線で行ってみようと思います。

org-mode でTODO管理をする方法を紹介します。
今回は素の org-mode で使える機能について触れてみます。

org-mode?

超高機能なアウトライン記述用メジャーモードです。
日付タグを入れたりファイルやWebページにリンクを張ったり表計算とかができたりします。

この辺参照。 OrgMode - Emacs上のアウトライナー

なんでorg-mode?

TODOの管理方法でいろいろ試して悩んだ結果、
結局 org-mode に落ち着きました。 理由は、

  • emacs(= メインの作業環境)上で操作が完結する
  • 時間が計れる
の2点です。

時間が計れる TODO 管理ツールやサービスはいくつか試したのですが、
いちいち emacs を離れて入力するのは面倒 → 入力しなくなる
という流れで長続きしませんでした。

TODO管理機能の使い方

ここから本題!
TODOの記述
*.orgというファイルをつくって。
 ** TODO ブログを書く

と書けばTODO項目として扱われます。
終了したTODOは、

 ** DONE ブログを書く
となります。

たとえばこんな感じに。

f:id:handlename:20101210194332p:image
一覧表示

基本はorg-mode の形式で書いたファイルの内容を、
org-agenda で集計して表示する形になります。

C-c a(org-agenda) でアジェンダ一覧を表示し、
その場で t をタイプするとTODO一覧になります。

f:id:handlename:20101210194333p:image

各行で Space をタイプするとそのTODO項目の本文をプレビュー、
Tab をタイプするとTODO項目に移動します。

なお、一番左のカラムが「org-temp」になっていますが、
これは集計対象のファイル名(org-temp.org)です。

集計の対象は org-agenda-files で指定したファイルとなります。
(setq org-agenda-files '("~/note/main.org", "~/note/others.org"))
状態の切り替え

状態を切り替えるコマンドがもちろん用意されています。
項目中で C-c C-t(アジェンダ上なら t のみでOK)とすれば、

(無印)-> TODO -> DONE -> (無印)
のように切り替わります。
 ** 夜ご飯
 ** TODO 昼ご飯
 ** DONE 朝ご飯
タイムスタンプ
<2010-12-10 Fri>
<2010-12-31 Fri 23:59>

のように書くとタイムスタンプとして扱われます。
TODO項目にタイムスタンプを入れておくと、アジェンダ表示に時系列順に表示されます(後述)。

タイムスタンプのコマンドはC-c .(日付のみ)と C-u C-c .(時刻込み)です。
時間を計る

TODO項目中で C-c C-x C-i(アジェンダ上なら I)とすると時間の計測が始まります。
経過時間はモードラインに表示されます。

f:id:handlename:20101210194334p:image

計測を終わるときは C-c C-x C-o(アジェンダ上では O) 、 取り消すときは C-c C-x C-x です。

計測を始めるとこんなタグがTODO項目に追加されます。
CLOCK: [2010-12-05 Sun 18:27]

計測を終了するとこのようになります。
「=>」の後ろに経過時間が表示されます。

CLOCK: [2010-12-05 Sun 18:27]--[2010-12-05 Sun 19:15] =>  0:48

時間計測は何度でも行えます。
計測を行った回数だけタグが追加されていきます。

CLOCK: [2010-12-05 Sun 20:08]
CLOCK: [2010-12-05 Sun 18:27]--[2010-12-05 Sun 19:15] =>  0:48
時間計測を修正
タグを書き換えて C-c C-c をタイプすると計測を修正することができます。
かかった時間の合計を見る

C-c C-x C-d とすると各TODO項目に費やした合計時間が表示されます。

f:id:handlename:20101210194335p:image

バッファを編集する、あるいはC-c C-c とすると時間表示を消すことができます。

アジェンダで時間を確認

TODO項目にタイムスタンプや時間計測タグが含まれている場合、
アジェンダ上でのタスクをいつ行ったのか一覧することができます。

アジェンダ上で l をタイプするとこのような表示になります。

f:id:handlename:20101210194336p:image

おわり

キモになる機能はこんなところでしょうか。

コマンドがやたらたくさんあるので、
それだけで使うのを躊躇してしまうかもしれません(ぼくもそうでした)。
単なるTODOの記述からはじめて徐々に使う機能を増やしていくのがいいと思います。

TODO管理を作業環境から離れずに時間を計りつつ行えるのがポイントです。
時間を計って作業して、あとからなににどれだけかかったかをみかえすと、
自分のボトルネックがわかって作業効率改善に役立つんじゃないかと思います。

明日は id:k1LoW さんです。