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

ichiroc subset

書きながら考える・考えをまとめる場所

org-mode で管理しているプロジェクトをガントチャートにする

org-mode で管理しているプロジェクトをガントチャートに表示します。

必要なもの

Taskjuggler
http://www.taskjuggler.org/

TaskJuggler


ガントチャート作成に使用するのは Taskjuggler というソフトウェアです。
残念ながら現バージョンの 2 では Windows で動作しないので、Linux 等を利用する必要があります。
Windows の方へのお勧めは Portable UbuntuLinux 環境です。
http://portableubuntu.demonccc.com.ar/
スクリーンショット
http://portableubuntu.demonccc.com.ar/en/media

スクリーンショットを見ると分かりますが、Windows にかなり統合されています。
単なる画面の統合だけでなく、クリップボードは共有化されてますし、
Windows 側のフォルダも文字化けなくアクセスできます。


org-taskjuggler.el
http://www.mail-archive.com/emacs-orgmode@gnu.org/msg23395.html

Taskjuggler への Exporter として org-taskjuggler.el を利用します。
こちらはプロジェクトページがありません。上のリンクから取得します。


手順

Taskjuggler のインストール
# apt-get install taskjuggler


org-taskjuggler.el のインストール


; load-path 上に org-taskjuggler.el を設置後
(require 'org-taskjuggler)


org-mode で文書を作成

ここは Taskjuggler の流儀を org-mode に取り入れる必要があります。
詳しくは以下。

Creating Gantt charts by Exporting to TaskJuggler
http://orgmode.org/worg/org-tutorials/org-taskjuggler.php

最低限を簡単に説明すると


  • エクスポートするトップに taskjuggler_project タグを付ける。

  • 各タスクの Effort プロパティに所要時間を付ける ( %H:%M or 10.0 (10 days) )



試しにやる場合は 上の URL にサンプルの記述があるので、そこからコピーすると良いと思います。

org-mode からエクスポートするコマンドを実行


; 自動的に Taskjuggler が起動する
M-x org-export-as-taskjuggler-and-open


ただし!
タスク名に日本語が含まれていると、 org-export-as-taskjuggler-and-open でエラーになります。

* バラモス討伐プロジェクト :taskjuggler_project:
** 仲間を集める.....
** 道具を揃える....



原因は org-taskjuggler.el 処理中にある正規表現でした。

タスク名から task id を自動的に付与する箇所を、
とりあえず以下のように定義し直してみると上手くいきました。


;; New function
(defun org-taskjuggler-get-random-id ()
(concat "id" (number-to-string (random 100000000))))

;; Override
;; 追記:2010/05/17
;; 元プログラムが task_id property を考慮してないようだったので、
;; 考慮するように修正。
;; これで BLOCKER 等に task id を指定しても無視されなくなる。
(defun org-taskjuggler-get-unique-id (item unique-ids)
"Return a unique id for an ITEM which can be a task or a resource.
The id is derived from the headline and made unique against
UNIQUE-IDS. If the first part of the headline is not unique try to add
more parts of the headline or finally add more underscore characters (\"_\")."
(let* (
(task-id (cdr (assoc "task_id" item)))
(headline (cdr (assoc "headline" item)))
(parts (split-string headline))
(id (let *1
(t potential-id)))))
(while (member id unique-ids)
(setq id (org-taskjuggler-get-random-id)))
id))


日本語の場合はそれっぽい task id を割り振る事を諦めてランダムの番号を振っています。
フォーマットは id[0-9]{1,9} です。

上の関数を .emacs の (require 'org-taskjuggler) 以降に記述する事で、
めでたく org-mode で管理しているプロジェクトをガントチャートで表示させる事ができました!

やったぜ!


*1:potential-id (org-taskjuggler-clean-id (downcase (pop parts)))))
(cond
(task-id task-id)
((string-match "^_+$" potential-id) (org-taskjuggler-get-random-id