QueryChartを使ってみよ〜

Twitterでは色々つぶやいてたり、勉強会に出たりしてた割には、気がつけば二ヶ月も何も書いてないという惨状・・・
そんなこんなの二ヶ月間でしたが、Shibuya.trac第4.5回勉強会後に行われた懇親会でQueryChartPluginで着飾ったマイルストーンを何人かに見せたところ、QueryChartPluginは使ってみたいけど良く分からないという声を聞いたので使い方を紹介したいと思います。


QueryChartPluginって?

Hirobeさんの解説ページにもあるように、チケットの数を数えてチャートを表示するplug-inです。
パラメータの指定によってバーンダウン(右下がり)、バーンアップ(右上がり)のチャートが表示可能です。*1
QueryChartPluginを使うとワークフローのカスタマイズとマイルストーングラフのカスタマイズを加えると、Tracの味気なくいまいちなマイルストーンのページが、下のサンプルのような華やかで状況把握が容易な出来るページに早変わりします。
http://d.hatena.ne.jp/kanu-orz/files/milestone_sample.png?d=.png
ちなみにこのサンプルはQueryChartPluginに加えて

  • 進捗インジケータ(milestone-groups)のカスタマイズ
  • ワークフローのカスタマイズ
  • TicketQueryマクロによるチケットカウントの表示

で実現しています。

はじめに

TracLightning 2.1以降を使っている前提で説明を進めます。TracLightning 2.1以降には、QueryChartPluginとSampleProjectには必要な設定項目がされていますので直ぐに試すことが出来ます。TracLightningを使っていない場合にはhirobeさんのページを参考にplug-inの導入を行ってください。*2
TracLightning以外で試す場合にはTrac.iniのCustomFieldに以下の二つを追加してください。*3

[ticket-custom]
due_assign = text
due_assign.label = 開始予定日
due_assign.order = 1
due_close = text
due_close.label = 終了予定日
due_close.order = 2
:
:

チケットを作る

チケットが無いとチャートが表示できませんので適当にチケットを10個ほど作りますが、とりあえず分類を「タスク」として作成します。「開始予定日」「終了予定日」には必ず日付を入力してください。
http://d.hatena.ne.jp/kanu-orz/files/SampleTicket1.png?d=.png
この「開始予定日」「終了予定日」を元にチャートを表示することになります。
チケットの「開始予定日」「終了予定日」はガントチャートで見て以下のような感じがサンプルとして作業する場合には分かりやすいと思います。
http://d.hatena.ne.jp/kanu-orz/files/SampleGannt1.png?d=.png

とりあえず表示してみる

QueryChartPluginの基本はwikiマクロで、Wikiにマクロを埋め込むことによりチャートを表示します。
そのWikiマクロにチャートの元となるチケットをQueryと同じ条件式(queryページのURLパラメータ部部分)で指定します。一番簡単な条件式の作り方は、実際にチャートの対象としたいチケットの一覧をカスタムクエリで作ることです。
今回はチケットの分類を「タスク」として作成しましたので、URLパラメータの部分は

?type=タスク

となります。
グラフにする対象の日付は「開始予定日」「終了予定日」なので、

col:due_assign,col:due_close

今回は期間が短いのとチケットの数が少ないので以下のパラーメータも追加します。

per:free,width:800

そしてそれらをつなぎ合わせたマクロを適当なWiki(SandBox辺りとか)に書いて保存します。

[[QueryChart(query:?type=タスク,col:due_close,col:due_assign,per:free,width:800)]]

するとこんなチャートが表示されます。
http://d.hatena.ne.jp/kanu-orz/files/ChartSample1.png?d=.png
これは

  • 開始予定日のグラフ:未開始状態のチケット数
  • 終了予定日のグラフ:未終了予定のチケット数

の予定の日付ごとの遷移を示しています。

このままのグラフでも消化の予定の推移は把握できますが、肝心の進捗状況の把握が出来ません。予定の推移をニヤニヤ見ていても価値はありません。
では実際の進捗を把握出来るようにするには、どうしたらよいのでしょうか?

実用的にする為の設定

今の状態で把握したいのは

  • 完了の有無:終了予定日通りに完了しているかどうか
  • 着手の有無:開始予定日通りに開始されているかどうか

の二点だと思います。
この二つの日付があれば、開始予定日や終了予定日と同様にQueryChartでバーンダウンのチャートを表示することが出来ますし、予定のチャートと比較することで視覚的に進捗を把握することが可能になります。
ということで早速用意します。
trac.iniにメモ帳以外で以下を追加します。*4

[ticket-custom]
:
:
:
last_closed= text
last_closed.label = 終了日
last_accepted = text
last_accepted = 開始日

http://d.hatena.ne.jp/kanu-orz/files/SampleTicket2.png?d=.png
ここで気になるのはチケットの状態を変更するたびに、これらの日付を入力してチケットを更新する必要があるのではないかという点だと思います。いくらチャートが自動で表示できても手入力するのでは入れ忘れが頻発し運用に耐えないというのは想像に難しくありません。
しかしQueryChartPluginでは、ステータスの最終変更日を自動的に記録する機能があるため、運用上はチケットのステータスを変更するだけでステータスの変更日が自動的にチケットの項目に設定する機能があります。
trac.iniのquerychartのセクションを以下のように書き換えると、"accepted"にした日は"last_accepted"へ、closedにした日は"last_closed"へ自動的に記録されます。

[querychart]
order = assigned, accepted:last_accepted ,reopened, closed:last_closed

日付の自動設定の詳しい説明はHirobeさんのQueryChartPluginのページを熟読してください。

マクロのパラメータを変更する

準備は整ったので後はマクロのパラメータを変更するだけです。
先ほどグラフにする対象の日付を

col:due_assign,col:due_close

と指定してある部分に「開始日(last_accepted)」と「終了日(last_closed)」を追加します。

col:due_assign,col:due_close,col:last_accepted,col:last_closed

ここまで設定出来たら後はチケットの状態を変更すると日付が自動で設定されますので、予定と実績のグラフを並べて比較しチケットの消化・進捗状況が確認出来るようになります。

出来上がり

http://d.hatena.ne.jp/kanu-orz/files/ChartSample2.png?d=.png
WikiStartに埋めるもよし、マイルストーンに埋めるもよし、
これで実用的なQueryChatプラグインを使った進捗の把握が可能です。
グラフ化対象のチケットを分類で分けるも良し、マイルストーン絞るも良し、自分の担当のチケットだけにしても良し、query以下のパラメータで自由にチャートを作って管理することが出来るようなりました。

ここまでのサンプルを元に、ワークフローや状態の遷移を検討しながら最適なものを探ってみてください。

運用について

実際の運用で考えた場合、管理側の立場から考えると作業前にチケットをacceptにして、終わったらcloseにしろと言うのは簡単ですし、それが出来ればExcelの表をチマチマ直さなくても済むので非常に助かりますが、やらされる側からすると当然面倒なわけで運用として機能しない可能性があります。*5
それを回避するためにはソースのみではなく設計書もSubversionで管理し、pre-commitフックとpost-commitフックを活用し以下を実現すると良いでしょう。

  • コミット時にコミットコメントに(未closeの)チケット番号必須
  • 最初のコミット時にチケットを着手(accept)に自動変更
  • コミット時にコミットコメントでチケットのクローズを可能にする

これらが実現できれば作業者はチケットを直接Webで操作することなく、進捗の報告を行うことが出来るのでチケットでのタスク管理が実用的に運用出来ます。

管理側の視点だけではなく作業者視点での運用を考えることが、チケットを用いたタスク管理を成功させる近道だと私は考えています。


次回

冒頭のサンプルと同じカスタマイズに加えTimingAndEstimationプラグインを利用したタスク管理の実例を紹介していければと思ってます。
なのでワークフローで一回、TimingAndEstimationプラグインで一回、その他で一回の計三回ほどになる予定です。
予定は未定なので自然消滅する可能性もありますので、続くかどうかは皆さんのコメントやはてブ次第です(笑)

*1:タスクの量ではなく、チケットの数です。アジャイル等で言われるバーンダウンチャートとは異なります。

*2:IE8で利用する場合にはリポジトリから最新版のQueryChrtPluginをインストールし直してください(2.4.0alpha1除く)

*3:orderのシーケンスは適当に

*4:当然管理画面のチケットシステム−カスタムフィールドからの追加でもOK

*5:私がその立場なら絶対やらない自信がある(笑)