こんにちは、サービスエンジニアリング本部の寺田です!
この記事は Enigmo Advent Calendar 2023 の13日目の記事になります。
私はエンジニアとして BUYMA の決済システム・配送システムの保守/運用や、またこれらのシステム領域を中心としたサービスの新規開発などを主に担当しています。
この記事では Emacs Orgmode を使ったタスク管理の方法について紹介していきたいと思います。
みなさんはタスク管理に何を利用しているでしょうか??
紙とペン、OS 標準の Reminder アプリ、Google Calendar など、人それぞれ普段お使いのものがあるかと思います。
私は実際に普段の業務で Emacs Orgmode を利用したタスク管理を行っています。
これを使っていく中で私は以下のようなメリットを感じています。
- 仕事の抜け・漏れを起こさなくなる。
- 自分のキャパを最大限活かせる。(キャパオーバーになるのも避けられる。)
- 日々の仕事に達成感を得られる。
今現在のタスク管理の方法がしっくりこない...と感じている方は、 ぜひこの記事をご覧いただき、一つ選択肢に加えてみてはいかがでしょうか?
Emacs Orgmode とは
Orgmode は Emacs の拡張機能の一つです。独自のマークアップ言語を利用できるシンプルなテキストエディタですが、 非常に高機能でタスク管理などに便利な数多くの機能をサポートしています。
当然 Emacs を必要とするので、Emacser ではない方には関係ない...とお思いかもしれません。 しかし私も普段の開発では VSCode + Vim キーバインディングを使っており、 Emacs は何もかもが素人中の素人です。
そういった方におすすめしたいのが Spacemacs です。
Emacs ベースのエディタですが、デフォルトで Vim のキーバインドが利用できます。 私も Spacemacs を利用していますが、ほぼほぼ Vim と同じ操作感で扱うことができています。
Orgmode を利用したタスク管理の流れ
ここからは私が実際に行っているタスク管理の流れを、Orgmode の機能の紹介とともに説明していきます。
ファイル構成
私はタスク管理のために3種類のファイルを用意しています。
. ├── TODO.org └── weekly └── YYYYMMDD.org └── daily └── YYYYMMDD.org
TODO.org
自分が担当することになったタスクはひとまず全て TODO.org
に追加します。
まさしく TODO リストの役割を果たしており、こちらにタスク全量がリスト化されることになります。
weekly/YYYYMMDD.org
1週間分のタスクリストを表すファイルです。
TODO.org
からタスクをピックアップして作成します。
daily/YYYYMMDD.org
1日分のタスクリストを作成する場所です。
weekly/YYYYMMDD.org
からさらにタスクをピックアップして作成します。
(随時)TODO リストを作成する
何かタスクにアサインされたらまずは TODO.org
に追加していきます。
合わせてここで作業時間の見積もりを行います。
Effort Estimates
を利用すると見積もった時間をタスクに対して簡単に設定できます。
https://orgmode.org/manual/Effort-Estimates.html
また、TODO リストの未済管理には Multi-state Workflow
を利用してステータス管理を行うと良いでしょう。
https://orgmode.org/guide/Multi_002dstate-Workflow.html
あらかじめ TODO
, DONE
ステータスを設定しておき、コマンド一発で遷移できるようにしておきます。
見積もり、ステータス設定を行った後の TODO.org
は以下のようになります。
#+SEQ_TODO: TODO(t/!) | DONE(d) // Multi-state Workflow で遷移可能なステータスの定義。タスクに対して C-c C-t でステータスを変更できる。 #+PROPERTY: Effort_ALL 1:00 2:00 3:00 5:00 8:00 13:00 // Effort Estimates で設定可能な見積もり時間。タスクに対して C-c C-x e でここで定義した時間を設定できる。 *** 新規配送システム導入 **** TODO 購入者は新規配送方法を指定して商品購入を行うことができる :PROPERTIES: :Effort: 5:00 :END: **** TODO 出品者は新規配送方法に利用できる配送用ラベルを発行できる :PROPERTIES: :Effort: 8:00 :END: **** TODO 出品者は新規配送方法を利用して配送を実施することができる :PROPERTIES: :Effort: 13:00 :END:
(毎週月曜日)1週間のやることリストを作成する
週初めの業務開始のタイミングで1週間のやることリストとして weekly/YYYYMMDD.org
を作成します。
まずは自分が1週間で作業に充てられる時間を計算していきます。
ただし1週間のうち全ての時間を作業時間に使えるわけではないのでこれを考慮しましょう。
私の場合、勤務時間のトータルは 40 時間です。(週5日、1日8時間勤務で 5 * 8 = 40 時間)しかし定例や打ち合わせの時間を除くと大体 20~30 時間くらいが作業に充てられる時間となることがほとんどです。
当然休みの日や早退の日があればこれも考慮します。
計算が終わったらファイルにこの時間をメモしましょう。
次に TODO.org
から計算した作業時間内でこなせるだけのタスクを選んで weekly/YYYYMMDD.org
に追加します。
ここでのポイントですが、 週はじめの段階では作業時間の 80 % 程度でできるタスク量にしておいた方が良いです。
エンジニアは不具合の修正対応など突発的なタスクが発生しがちです。 こういった事態も吸収できるようにバッファを持たせておくことが重要です。
Work time: 20 hrs (80 %: 16 hrs) // 純粋に作業に充てられる時間だけを見積もる。 // また、突発的なタスクに対応できるよう、80%程度の時間でできることに収めた方が良い。 *** 新規配送システム導入 **** TODO 購入者は新規配送方法を指定して商品購入を行うことができる :PROPERTIES: :Effort: 5:00 :END: **** TODO 出品者は新規配送方法に利用できる配送用ラベルを発行できる :PROPERTIES: :Effort: 8:00 :END: **** TODO 出品者は新規配送方法を利用して配送を実施することができる :PROPERTIES: :Effort: 3:00 :END:
ここに追加したタスクの見積もりの合計が、作業時間内で収まっているかどうかを確認するには Column View
を活用すると良いでしょう。
https://orgmode.org/manual/Column-View.html
親タスクに対して C-c C-x C-c
とすると簡単に子タスクの見積もり時間の合計時間を表示することができます。
#+COLUMNS: %ITEM %Effort{:} // ITEM: タスク名, Effort: 見積もり時間 を表示 | *** 新規配送システム導入 | 16:00 | # 子タスクの合計時間が表示されている | **** 購入者は新規配送方法... | 5:00 | | **** 出品者は新規配送方法... | 8:00 | | **** 出品者は新規配送方法... | 3:00 |
1週間分のやることを週初めの段階で決めることで次のようなメリットがあります。
まずキャパオーバーになることを避けられます。 既に予定しているタスクで今週分の作業時間が埋まっているならば、 これ以上の仕事を受けて、早急に対応することは難しいとすぐに判断できます。
逆にこの段階で作業時間が余るようであれば、 新しいタスクを拾ったり、忙しい時にはできないようなカイゼン系のタスクなどに取り組もうと、 週初めの段階で決めてしまえば良いのです。
後者は暇になってから考えても同じじゃないの?とも思いますが、 無計画に暇を迎えるとただただ時間を潰すだけになりがち。人間とは弱い生き物なのです...
こうして無理のない範囲に収めながらも、 自分の時間を最大限活用することが可能になっていきます。
(毎日朝)今日やることのリストを作成する
毎日業務を開始するタイミングで今日一日でやることのリストを daily/YYYYMMDD.org
に作成します。
週初めの weekly/YYYMMDD.org
の作成と同じように一日の作業時間を計算して、
その日に行えるだけのタスクを weekly/YYYYMMDD.org
からこちらにコピーして追加します。
1週間分のやることリストの作成と同じように、 ミーティングの時間などは除いて、純粋に作業に充てられる時間に対してタスクを当てこみましょう。
Work time: 5 hrs *** 新規配送システム導入 **** TODO 購入者は新規配送方法を指定して商品購入を行うことができる :PROPERTIES: :Effort: 5:00 :END:
(業務時間中)作業時間を記録する
作業した時間は原則タスクに対して記録していきます。
Orgmode には Clocking commands
というものが用意されています。
https://orgmode.org/manual/Clocking-commands.html
作業開始時には C-c C-x i
、終了時には C-c C-x o
を入力することで、各タスクに対して作業時間の記録が行えます。
*** 新規配送システム導入 **** TODO 購入者は新規配送方法を指定して商品購入を行うことができる :PROPERTIES: :Effort: 5:00 :END: :CLOCKING: CLOCK: [2023-12-04 月 09:30]--[2023-12-04 月 10:00] => 0:30 // 作業時間が記録される :END:
またポモドーロテクニックを使いながら作業時間を記録できる
org-pomodoro
というサードパーティのライブラリもあります。
https://github.com/marcinkoziej/org-pomodoro
こちらは作業開始時に C-c C-x p
を実行すると、
あらかじめ指定した時間が経過したら自動的に作業終了となり時間が記録されます。
作業終了時にはチャイムが鳴ってお知らせもしてくれます。
作業時間中はタスクに全集中で取り組みましょう。X のタイムラインを見ながらダラダラと...なんてのはダメです(笑)。休憩する時は Clocking commands
を停止してメリハリをつけましょう!
予定していた1日の作業時間を消化できたら、業務は一旦おしまいにします。おつかれさまでした!
(業務終了時)1日の作業を振り返る
予定していた作業時間に対してどのくらい自分がコミットできたかは、前述した Column View
で簡単に確認することができます。
#+COLUMNS: %ITEM %Effort{:} %CLOCKSUM // CLOCKSUM: 記録した時間の合計 を表示 | *** 新規配送システム導入 | 5:00 | 5:12 | | **** 購入者は新規配送方法... | 5:00 | 5:12 |
次に daily/YYYYMMDD.org
に記録した作業時間を、weekly/YYYYMNDD.org
に転記していきます。
こうすることで1日を経る毎に1週間分の作業時間の記録が溜まっていきます。
*** 新規配送システム導入 **** TODO 購入者は新規配送方法を指定して商品購入を行うことができる :PROPERTIES: :Effort: 5:00 :END: :CLOCKING: CLOCK: [2023-12-04 月 17:00]--[2023-12-04 月 18:12] => 1:12 CLOCK: [2023-12-04 月 13:00]--[2023-12-04 月 15:00] => 2:00 CLOCK: [2023-12-04 月 10:30]--[2023-12-04 月 12:00] => 1:30 CLOCK: [2023-12-04 月 09:30]--[2023-12-04 月 10:00] => 0:30 :END: **** TODO 出品者は新規配送方法に利用できる配送用ラベルを発行できる :PROPERTIES: :Effort: 8:00 :END: :CLOCKING: CLOCK: [2023-12-05 火 15:30]--[2023-12-05 火 18:00] => 2:30 CLOCK: [2023-12-05 火 10:00]--[2023-12-05 火 12:00] => 2:00 :END:
このように日々、予定に対してどのくらい実際にコミットできたかを時間で確認できると、自分の仕事にかなりの達成感が出るのではないでしょうか??
モチベーションを維持することは、業務に対するパフォーマンスを最大化するためにはとても重要です。
(毎週金曜日)1週間の作業を振り返る
毎日の振り返りのタイミングで weekly/YYYYMMDD.org
に作業時間の記録をしています。
なので週末の業務終了時点では1週間分の作業時間の合計が記録されているはずです。
大元の TODO リストとなっている TODO.org
に1週間の作業結果を反映していきましょう。
作業時間の記録を転記して、もし完了になったタスクがあればステータスを変更します。
#+SEQ_TODO: TODO(t/!) | DONE(d) #+PROPERTY: Effort_ALL 1:00 2:00 3:00 5:00 8:00 13:00 *** 新規配送システム導入 **** DONE 購入者は新規配送方法を指定して商品購入を行うことができる :PROPERTIES: :Effort: 5:00 :END: :CLOCKING: CLOCK: [2023-12-04 月 17:00]--[2023-12-04 月 18:12] => 1:12 CLOCK: [2023-12-04 月 13:00]--[2023-12-04 月 15:00] => 2:00 CLOCK: [2023-12-04 月 10:30]--[2023-12-04 月 12:00] => 1:30 CLOCK: [2023-12-04 月 09:30]--[2023-12-04 月 10:00] => 0:30 :END: **** DONE 出品者は新規配送方法に利用できる配送用ラベルを発行できる :PROPERTIES: :Effort: 8:00 :END: :CLOCKING: CLOCK: [2023-12-07 木 09:00]--[2023-12-07 木 10:00] => 0:30 CLOCK: [2023-12-06 水 16:00]--[2023-12-06 水 18:00] => 2:00 CLOCK: [2023-12-06 水 11:00]--[2023-12-06 水 12:00] => 1:00 CLOCK: [2023-12-05 火 15:30]--[2023-12-05 火 18:00] => 2:30 CLOCK: [2023-12-05 火 10:00]--[2023-12-05 火 12:00] => 2:00 :END: **** TODO 出品者は新規配送方法を利用して配送を実施することができる :PROPERTIES: :Effort: 13:00 :END: :CLOCKING: CLOCK: [2023-12-08 金 17:00]--[2023-12-08 金 18:00] => 1:00 CLOCK: [2023-12-08 金 11:00]--[2023-12-08 金 12:00] => 0:30 CLOCK: [2023-12-07 木 13:00]--[2023-12-07 木 14:30] => 1:30 :END:
DONE になったタスクをそのまま TODO.org
においておくと、 ファイルがどんどん巨大になってしまいます。Orgmode にはこれを Archive として他ファイルに移動してくれる機能がありますのでこちらを利用しましょう。
https://orgmode.org/guide/Archiving.html
タスクに対して C-c C-x s
を実行することで、あらかじめ指定したファイルにタスクを移動させることができます。
#+ARCHIVE: ~/dev/orgmode/archives/myArchive.org:: # Archive 先の指定。 *** 新規配送システム導入 **** DONE 購入者は新規配送方法を指定して商品購入を行うことができる
まとめ
以上が Emacs Orgmode を利用したタスク管理の紹介になります。
冒頭にも話したことになりますがこのタスク管理を行うことで、
- 仕事の抜け・漏れを起こさなくなる。
- 自分のキャパを最大限活かせる。(キャパオーバーになるのも避けられる。)
- 日々の仕事に達成感を得られる。
こういった恩恵を受けることができると私は感じています。
本記事を読んで気になった方は一度試してみてはいかかでしょうか??
明日の記事の担当は UXD(UI, UX の改善に主に取り組んでいるチーム)の新井さんです。お楽しみに!
株式会社エニグモ すべての求人一覧