Emacs org-modeを使ってみる: (18) 計時

このエントリーをはてなブックマークに追加

今回は,計時(クロック)の使い方についてまとめてみる.
なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている.

orgファイル中での計時

** 第2回ORG会議

上の「* 第2回ORG会議」の行で「C-c C-x C-i」とタイプすると,以下のように表示され,計時が開始される.

** 第2回ORG会議
   CLOCK: [2010-02-19 金 13:30]

Emacsのステータス行には [0:00 (第2回ORG会議)] のように現在の計時時間が表示されている.
「C-c C-x C-o」とタイプすると計時が終了し,経過時間が表示される.

** 第2回ORG会議
   CLOCK: [2010-02-19 金 13:30]--[2010-02-19 金 14:24] =>  0:54

「C-c C-x C-d」とタイプすると,部分木毎の集計結果が表示される.表示を終了するには「C-c C-c」とタイプする.

* ORG会議...................................................* 2:02
** 第1回ORG会議.............................................** 1:08
   CLOCK: [2010-02-12 金 13:30]--[2010-02-12 金 14:38] =>  1:08
** 第2回ORG会議.............................................** 0:54
   CLOCK: [2010-02-19 金 13:30]--[2010-02-19 金 14:24] =>  0:54
キーバインド
キー 説明
C-c C-x C-i 計時を開始
C-c C-x C-o 計時を終了
C-c C-x C-x 計時をキャンセル
C-c C-x C-j 計時中のタスクに移動
C-c C-x C-d 部分木の計時の合計を表示
C-c C-c 計時表示を削除

アジェンダ表示中での計時

以下のように今日実行するタスクがあるとする.

* タスク
** TODO タスクA
   SCHEDULED: <2010-02-19 金>
** TODO タスクB
   SCHEDULED: <2010-02-19 金>

「C-c a a d」とタイプして,今日のアジェンダを表示する.

Day-agenda (W07):
Friday     19 February 2010
  notes:      Scheduled:  TODO タスクA
  notes:      Scheduled:  TODO タスクB

各タスクにかかった時間を計時するには,以下のようにする.
まず,「タスクA」の行で「I」(大文字のi)をタイプするとタスクAに対して計時が開始される.一旦,計時を終了する場合は,「O」(大文字のo)をタイプする.
たとえば 09:30 に開始して,12:06 に一旦終了した場合, orgファイルの内容は以下のようになる.

* タスク
** TODO タスクA
   SCHEDULED: <2010-02-19 金>
   CLOCK: [2010-02-19 金 09:03]--[2010-02-19 金 12:06] =>  3:03
** TODO タスクB
   SCHEDULED: <2010-02-19 金>

再度「I」をタイプすると,再び計時が再開される.

* タスク
** TODO タスクA
   SCHEDULED: <2010-02-19 金>
   CLOCK: [2010-02-19 金 14:35]
   CLOCK: [2010-02-19 金 09:03]--[2010-02-19 金 12:06] =>  3:03
** TODO タスクB
   SCHEDULED: <2010-02-19 金>

タスクAの作業中だが,一旦中断してタスクBを先に行うとする.
その場合,タスクBの行で「I」をタイプする.自動的にタスクAの計時が終了し,タスクBの計時が開始される.

* タスク
** TODO タスクA
   SCHEDULED: <2010-02-19 金>
   CLOCK: [2010-02-19 金 14:35]--[2010-02-19 金 15:16] =>  0:41
   CLOCK: [2010-02-19 金 09:03]--[2010-02-19 金 12:06] =>  3:03
** TODO タスクB
   SCHEDULED: <2010-02-19 金>
   CLOCK: [2010-02-19 金 15:16]

タスクBが終了したら,アジェンダ表示で「C-c C-t d」とタイプする.タスクBをDONEに変更すると同時に自動的に計時が終了し,orgファイルの内容は以下のようになる.

* タスク
** TODO タスクA
   SCHEDULED: <2010-02-19 金>
   CLOCK: [2010-02-19 金 14:35]--[2010-02-19 金 15:16] =>  0:41
   CLOCK: [2010-02-19 金 09:03]--[2010-02-19 金 12:06] =>  3:03
** DONE タスクB
   SCHEDULED: <2010-02-19 金> CLOSED: [2010-02-19 金 15:58]
   CLOCK: [2010-02-19 金 15:16]--[2010-02-19 金 15:58] =>  0:42

タスクAの作業を再開する場合,アジェンダ表示中のタスクAの行で「I」タイプして,計時を開始する.作業が終了すれば,「C-c C-t d」とタイプしDONEに変更する.
最終的にorgファイルの内容的は以下のようになる.

* タスク
** DONE タスクA
   SCHEDULED: <2010-02-19 金> CLOSED: [2010-02-19 金 17:18]
   CLOCK: [2010-02-19 金 15:58]--[2010-02-19 金 17:18] =>  1:20
   CLOCK: [2010-02-19 金 14:35]--[2010-02-19 金 15:16] =>  0:41
   CLOCK: [2010-02-19 金 09:03]--[2010-02-19 金 12:06] =>  3:03
** DONE タスクB
   SCHEDULED: <2010-02-19 金> CLOSED: [2010-02-19 金 15:58]
   CLOCK: [2010-02-19 金 15:16]--[2010-02-19 金 15:58] =>  0:42

アジェンダ表示で「R」をタイプすると,計時レポートが表示される.

| File      | L | Headline     | Time   |      |
|-----------+---+--------------+--------+------|
|           |   | *Total time* | *6:40* |      |
|-----------+---+--------------+--------+------|
| notes.org |   | *File time*  | *6:40* |      |
| notes.org | 1 | ORG会議      | 0:54   |      |
| notes.org | 2 | 第2回ORG会議 |        | 0:54 |
| notes.org | 1 | タスク       | 5:46   |      |
| notes.org | 2 | DONE タスクA |        | 5:04 |
| notes.org | 2 | DONE タスクB |        | 0:42 |
キーバインド
キー 説明
I 計時開始
O 計時終了
X 計時キャンセル
J 計時中のタスクに移動
C-u J 計時履歴を表示
R 計時レポートを表示/非表示
l 計時データを表示/非表示

計時レポートの作成

orgファイル中で,「C-c C-x C-r」をタイプすると計時レポートを挿入することが可能である.

#+BEGIN: clocktable :maxlevel 2 :scope file
Clock summary at [2010-02-19 金 17:30]

| L | Headline     |   Time |      |
|---+--------------+--------+------|
|   | *Total time* | *7:48* |      |
|---+--------------+--------+------|
| 1 | ORG会議      |   2:02 |      |
| 2 | 第1回ORG会議 |        | 1:08 |
| 2 | 第2回ORG会議 |        | 0:54 |
|---+--------------+--------+------|
| 1 | タスク       |   5:46 |      |
| 2 | DONE タスクA |        | 5:04 |
| 2 | DONE タスクB |        | 0:42 |
#+END:

以下のように「:block」オプションを用いて対象期間を指定し,「:formula %」で割合表示を指定する.
「#+BEGIN」の行で「C-c C-c」をタイプすると表示が更新される.

#+BEGIN: clocktable :maxlevel 2 :scope file :block 2010-02-19 :formula %
Clock summary at [2010-02-19 金 17:32], for 金曜日, 2月 19, 2010.

| L | Headline     |   Time |      |     % |
|---+--------------+--------+------+-------|
|   | *Total time* | *6:40* |      | 100.0 |
|---+--------------+--------+------+-------|
| 1 | ORG会議      |   0:54 |      |  13.5 |
| 2 | 第2回ORG会議 |        | 0:54 |  13.5 |
|---+--------------+--------+------+-------|
| 1 | タスク       |   5:46 |      |  86.5 |
| 2 | DONE タスクA |        | 5:04 |  76.0 |
| 2 | DONE タスクB |        | 0:42 |  10.5 |
#+TBLFM: $5='(org-clock-time% @2$3 $3..$4);%.1f
#+END:

なお「:scope」を「agenda」に変更すると,~/org/ ディレクトリ中の全orgファイルが対象となる(org-agenda-files の設定による).「subtree」とすれば,部分木が対象となる.