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

kondoumh のブログ

- とあるソフトウェアエンジニアのめったに更新されないブログ -

Emacs org-mode で GTD

Emacs の org-mode

Emacs にはタスク管理用のメジャーモード org-mode があり Emacs の パッケージシステムで簡単にインストールできます。

orgmode.org

org は organize (整理する) の意です。公式サイトによれば、

Org-mode は、ノートの保存、TODOリストの管理、プロジェクト計画のためのモードです。高速で効率的なプレーンテキストのシステムを使ってファイルを編集します。

とあります。プレーンテキストを扱うため、あらゆるテキストエディタで閲覧・編集が可能ですが、org-mode で操作することで、ノートやタスクをカラフルにオブジェクトとして扱うことができます。

拡張子が .org のファイルが org-mode 用のファイルとして認識されます。

強力なアウトラインプロセッサ機能

見出しと本文をインラインで自在に編集可能で、見出しの折り畳みと展開も Tab で簡単にトグルできるため、強力なアウトラインプロッセッサとして機能します。

f:id:kondoumh:20160715002851p:plain

末尾に ... が付いている見出しは折り畳まれています。上のイメージでは分かりにくいですが、見出しの階層と順序がエディタ内でキーボードだけで操作できるため、思考を妨げられることなく推敲に集中できます。

Wiki 的機能

Wiki や Blog では各プログラミング言語のシンタックスハイライトが使えるものが多いですよね。Org でもちゃんとサポートされています。 #+BEGIN_SRC <言語> 〜 #+END_SRC でマークアップすることで、サンプルコードを文書中に挿入できます。

file:xxx.png の記法で画像埋め込みも可能。

f:id:kondoumh:20160715003303p:plain

HTML , PDF, Markdown へのエクスポートもサポートされています。簡易な DTP として利用できます。

f:id:kondoumh:20160715003358p:plain

GTD 機能

TODO を見出しとしてサブタスクを箇条書きで階層的に管理して、サブタスクの完了/未完了状態をエディタ内でチェックボックスのような UI で管理できます。こんな感じ。

f:id:kondoumh:20160715002447p:plain

チェックボックスの状態は C-c C-c でトグルでき、サブタスクの消化率も連動して更新されます。サブタスクの追加/削除にも連動してくれます。

自分のミッションを TODO とサブタスクに分解して、一つ一つ潰していく感じです。

進捗はサブタスクの消化率と TODO のステータス(TODO/DOING/DONE) で把握できます。 GTD ツールとしては非常に高い水準にあると思います。

f:id:kondoumh:20160715003648p:plain

モバイル連携機能

Emacs はパソコンでしか使えないので、モバイルとの連携が気になるところですが、公式とサードパーティからアプリが出ています。

http://mobileorg.ncogni.to/

公式は MobileOrg。Dropbox で連携するのですが、同期が面倒で変なタグがいっぱい埋め込まれてしまうという難点があります。

最近見つけたのが Orgzly。

www.orgzly.com

こちらは、シンクロが簡単で、変なタグ埋め込みもなく良い感じ。今のところ iOS には同等のアプリはないようです。

モバイルでもさくさく編集してシンクロ出来たらかっこいいのですが、閲覧に特化した使い方しかしてません。

Torrello といえば OrgMode から Torrello のタスクを操作できるというツールがあるそうです。

org-trello

最後に、僕の org-mode 設定を晒しておきましょう。

;; org-mode
(setq org-src-fontify-natively t)
(setq org-startup-truncated nil)
(setq org-return-follows-link t)
(setq org-todo-keywords '((type "TODO(t)" "DOING(i)" "|" "DONE(d)" "SOMEDAY(s)" "WON'T(w)")))

TODO の遷移定義ぐらいしかしてません。

f:id:kondoumh:20160714003748p:plain