Tracの使い方 -Timing and Estimationプラグイン- | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

初めに。

Timing and Estimationプラグインをインストールするにあたっては下記のサイトを参考にさせていただきました。


trac + TracBurndownプラグインでスクラム開発のすすめ


Timing and Estimationプラグインは、Tracのチケットに対する作業時間を入力し、その作業実績を管理する為のプラグインです。

チケットに着手する際に、そのチケット解決までの見積り時間を設定し、それに対して日々どれだけの作業をしたかを入力する事で、チケットの作業割合が確認できます。

まぁ、この辺はプラグイン利用の際のルールをきちんと整備し、そのルールを如何にメンバーに守らせるかなど運用の方が重要になってくると思いますが・・・。


Timing and Estimationプラグインをインストールする為には、Trac0.10以上のバージョンが必要です。

要件を満たしていない場合は、事前にアップグレードしておきましょう。

なお、プラグインを追加するにあたりTracWebAdminをインストールしておけば楽に作業できます。

TracWebAdminのインストール方法については、下記参照。


Tracの使い方 - TracWebAdminインストール -


※ プラグインのインストールにTracWebAdminは必須ではありません。


では、早速インストールしてみたいと思います。

インストールしたTracの環境については、前回の「バグトラッキングシステム「Trac」インストール 」を参照してください。



TracにTiming and Estimationプラグインを組み込む



1. 事前準備


Timing and Estimationプラグインを追加する前にPYTHON_EGG_CACHEと言う環境変数の定義と、そのキャッシュ用のディレクトリを作成しておきます。

これは、Python eggで利用されるキャッシュ用のディレクトリでプラグインは通常、それらをユーザーのホームディレクトリを利用しますが、権限などの問題でエラーになる事もあるので明確に定義しておきます。

(TracWebAdminプラグインをインストールした時は必要なかったんだが・・・)


まず、キャッシュ用のディレクトリを作成します。ディレクトリの場所は何処でもかまいません。


# mkdir /var/trac/python_egg_cache

次に、Apacheの設定ファイル(httpd.conf)に、PYTHON_EGG_CACHEの環境変数を定義(追記)

します。


<Location "/trac">
PythonOption PYTHON_EGG_CACHE /var/trac/python_egg_cache

※ Tracのバージョン0.11.1以前ではSetEnvでPYTHON_EGG_CACHEの環境変数をセットしていましたが、0.11.2以降

  では、PythonOptionで指定するように変更されています。


参考: [Trac] PYTHON_EGG_CACHEの設定方法が変わった?


編集後は、Apacheを再起動します。


※ PYTHON_EGG_CASHEを設定しておかないとTiming and Estimationプラグインを有効化した  際にエラーが

  出ます。エラーの詳細は、後述の「番外編 - プラグイン追加時のエラー対処 -」の「エラーメッセージその2」

  を参照してください。



2. Timing and Estimationプラグインを追加する


プラグインは、こちら からダウンロードできます。

今回は、zipファイルからインストールする為、「Getting the Plugin」の「Download the zipped source」の項目からダウンロードしています。


※ InternetExplorerだとダウンロードの際のファイル名が正常に表示されません・・・。FireFoxならいけましたけど。

  IE使っている場合は、ダウンロード後に拡張子をzipに変更します。



2.1 Timing and Estimationプラグインのインストール


ダウンロードしたzipファイルをサーバーに転送し、解凍しておきます。

後は、解凍後のディレクトリにあるsetup.pyを実行します。


# unzip timingandestimationplugin-branches-trac0.10.zip

# cd timingandestimationplugin/branches/trac0.10/

# python setup.py install


2.2 Timing and Estimationプラグインの有効化


追加したTiming and Estimationプラグインは、デフォルトだと無効になっているのでこれを有効化します。

有効化は、TracWebAdminから行えます。(手動でも可)

ただ、TracWebAdminにアクセスする前に追加したプラグインを認識させる為にApacheの再起動が必要です。



tracTimeAndEstimation



TracWebAdminにアクセスすると、「timingandestimationplugin 0.4.4」という項目が追加されていますので、その項目名をクリックして各コンポーネットのチェックボックスにチェックを要れ「更新」ボタンを押します。

これでTiming and Estimationプラグインが有効になります。


なお、TracWebAdminをインストールしていない場合は、tracの設定ファイル(trac.ini)を編集する事でも有効化できます。


trac.iniファイルに以下を追記(又は編集)


[components]
timingandestimationplugin.api.timetrackingsetupparticipant = enabled
timingandestimationplugin.ticket_daemon.timetrackingticketobserver = enabled
timingandestimationplugin.ticket_webui.ticketwebuiaddon = enabled
timingandestimationplugin.webui.timingestimationandbillingpage = enabled 

または、もっと単純に


timingandestimationplugin.* = enabled

だけでもOKです。


後は、チケット登録時に作業時間等の入力ボックスを追加するために


[ticket-custom]
billable = checkbox
billable.label = Billable?
billable.order = 3
billable.value = 1
estimatedhours = text
estimatedhours.label = Estimated Number of Hours
estimatedhours.order = 1
estimatedhours.value = 0
hours = text
hours.label = Add Hours to Ticket
hours.order = 2
hours.value = 0
totalhours = text
totalhours.label = Total Hours
totalhours.order = 4
totalhours.value = 0

を追加します。


余談ですが、「estimatedhours.label」と「hours.label」、「totalhours.label」はチケット登録時の表示ラベルになっていて、日本語化できます。


hours.label = 今日の作業時間


等と設定してあげればラベルが日本語になります。(要Apache再起動)



TimingAndEstimation-ja


有効化の後は、trac-adminコマンドでアップグレードを実行します。


# trac-admin /home/trac/project1 upgrade --no-backup

※ 私の環境では、DBにPostgreSQLを利用している為「--no-backup」オプションを指定しましたがSQLiteを利用

  している場合は、「--no-backup」オプションは必要ないようです。



これで、Timing and Estimationプラグインが利用できるようになりました。

チケット登録画面に移ると、作業の見積り時間(Estimated Numberof Hours)や、その日の作業時間(Add Hours to Ticket)が入力できるテキストボックスが追加されているかと思います。

また、Tracのメニューに「Management」というメニューが増えているはずです。


※ 「Management」メニューを制御(見える/見えない)する権限は、今のところないようです。

  ですので、誰でも見えて(使えて)しまいます。



Timing and Estimationプラグインの利用方法


利用方法は、まず、チケット登録時にそのチケットの完了までの見積もり時間(Estimated Numberof Hours)を入力し、次にその日の作業時間(Add Hours to Ticket)を入力します。

後は、そのチケットが完了するまで、チケット修正の際に作業時間(Add Hours to Ticket)を入力していきます。

入力してくと総作業時間(Total Hours)が合算されていきます。

何時でも、見積り時間(Estimated Numberof Hours)が変更できてしまうのがなんなんですが・・・。
(ログには残るので、勝手に書き換えられたらわかりますけどね)


次に各チケットごとの作業実績を確認したい場合は、集計しレポートを表示させる事も可能です。

レポートを見るには、「チケットを見る」メニューからではなく、「Management」メニューから確認します。

(理由は、「番外編 - プラグイン追加時のエラー対処 -」の「エラーメッセージその4」を参照)



- レポートの見方

「Management」メニューから各作業時間の集計レポートが見れます。


[ Ticket Work Summary ]

チケット別の作業時間の集計レポート。

分かりづらいですが、左上の数字がチケットの番号になっています。

「worked_add」の欄が追加された、日々の作業実績(Add Hours to Ticket)時間、一番下の「Total work done on the ticket in the selected time period」が、それらの総合計です。


[ Milestone Work Summary ]

マイルストンごとの集計結果です。

「worked_add」欄はチケットの作業実績の集計が表示されています。


[ Developer Work Summary ]

担当者(開発者)ごとの作業時間の集計結果です。


[ Ticket Hours ]

チケットごとの詳細に、その見積り時間(Estimated Numberof Hours)と日々の作業時間(Add Hours to Ticket)を付け加えたものです。

このレポートはあまり意味が無いような・・・。


[ Ticket Hours with Description ]

上記のレポートに「チケットの概要」を付け加えたもの


[ Ticket Hours Grouped By Component ]

コンポーネントごとの集計結果。

どのコンポーネントにどれだけの時間を要しているのか見るような用途でしょうか。


[ Ticket Hours Grouped By Component with Description ]

上記に「チケットの概要」を付け加えたもの


[ Ticket Hours Grouped By Milestone ]

こちらもマイルストンごとの集計結果ですが、「Milestone Work Summary」との違いは作業実績時間(Add Hours to Ticket)が入力されているか入力されていないかの違いでしょうか。

本レポートは、作業実績時間が入力されていなくてもレポートの結果に反映されます。


この辺も、自由にカスタマイズが効くのでSQLが書ければ必要なレポートを作ってみても良いと思います。

項目名の日本語化もSQLを編集する事で可能ですし。


その他のTiming and Estimationプラグインの利用法は、下記も参照してみてください。


Trac : T&Eプラグインを利用した、期間を限定したレポートの作り方




Timing and Estimationプラグインの削除したい場合


プラグインを「完全」に削除方法は、下記の通りです。


1. site-packagesディレクトリ内にある、プラグインファイルを削除


# rm /usr/lib/python2.3/site-packages/timingandestimationplugin-0.4.4-py2.3.egg

※ 特定のプロジェクトに対してだけプラグインを無効化したい場合は、不要です。
  上記を実行すると、Trac上の全てのプロジェクトでTiming and Estimationプラグインが利用できなくなります。


2. Trac設定ファイル(trac.ini)ファイルの編集


trac.iniファイル内のプラグインに関連する記述を削除します。

削除する前に念のためにtrac.iniファイルのバックアップを取っておきましょう。


timingandestimationplugin.api.timetrackingsetupparticipant = enabled
timingandestimationplugin.ticket_daemon.timetrackingticketobserver = enabled
timingandestimationplugin.ticket_webui.ticketwebuiaddon = enabled
timingandestimationplugin.webui.timingestimationandbillingpage = enabled

または


timingandestimationplugin.api.* = enabled

と、


[ticket-custom]
billable = checkbox
billable.label = Billable?
billable.order = 3
billable.value = 1
estimatedhours = text
estimatedhours.label = Estimated Number of Hours
estimatedhours.order = 1
estimatedhours.value = 0
hours = text
hours.label = Add Hours to Ticket
hours.order = 2
hours.value = 0
totalhours = text
totalhours.label = Total Hours
totalhours.order = 4
totalhours.value = 0


上記の項目を削除します。



3. DBのレコード&テーブルの削除


やる前に念のためにDBのバックアップを取っておきましょう。

まず最初に、Timing and Estimationプラグインで登録されたレコードを削除します。

TracHacksに載ってたやり方 だと、


- チケットの属性に追加した見積り時間や作業時間などのデータを削除

DELETE FROM ticket_custom where name in ( 'hours', 'billable', 'estimatedhours', 'totalhours', 'lastbilldate')

- チケットの変更ログから、見積り時間や作業時間の変更のログを削除

DELETE FROM ticket_change where field in ( 'hours', 'billable', 'estimatedhours', 'totalhours', 'lastbilldate')

- レポートを削除

delete from report where id>8

※ これは、下記のようにしたほうが安全のような


delete from report where id in (select report from report_version)

あと、これはTracHacksには載っていませんでしたが、systemテーブルに下記のようなデータが入っていましたので、これも削除。(必要ないのかも)


name | value
----------------------------------+----------------
TimingAndEstimationPlugin_Db_Version | 4 


Timing and Estimationプラグインを有効化し、Tracをアップグレードすると、下記の2つのテーブルがDBに追加されています。


・ bill_date

・ report_version

これらのテーブルをdrop。


恐らくこれで完全にプラグインを削除できるはず。



Timing and Estimationプラグイン追加時のエラー対処法


- エラーメッセージその1


Trac detected an internal error:
IOError: [Errno 13] Permission denied: '/home/trac/project1/conf/trac.ini'

プラグインをTracWebAdminから有効化しようとするとエラー発生

原因は、TracWebAdminがtraci.iniファイルを編集しようとしてその権限が無いため。

対処方法としては、Apacheのユーザへ書き込み権限を扶養してあげれば解消されます。



- エラーメッセージその2


Traceback (most recent call last):
File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 406, in dispatch_request
dispatcher.dispatch(req)
File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 206, in dispatch
req.hdf = HDFWrapper(loadpaths=chrome.get_all_templates_dirs())
File "/usr/lib/python2.3/site-packages/trac/web/chrome.py", line 263, in get_all_templates_dirs
dirs += provider.get_templates_dirs()
File "build/bdist.linux-i686/egg/timingandestimationplugin/webui.py", line 140, in get_templates_dirs
File "/usr/lib/python2.3/site-packages/setuptools-0.6c6-py2.3.egg/pkg_resources.py", line 840, in resource_filename
return get_provider(package_or_requirement).get_resource_filename(
File "/usr/lib/python2.3/site-packages/setuptools-0.6c6-py2.3.egg/pkg_resources.py", line 1311, in get_resource_filename
return self._extract_resource(manager, zip_path)
File "/usr/lib/python2.3/site-packages/setuptools-0.6c6-py2.3.egg/pkg_resources.py", line 1317, in _extract_resource
last = self._extract_resource(
File "/usr/lib/python2.3/site-packages/setuptools-0.6c6-py2.3.egg/pkg_resources.py", line 1331, in _extract_resource
real_path = manager.get_cache_path(
File "/usr/lib/python2.3/site-packages/setuptools-0.6c6-py2.3.egg/pkg_resources.py", line 921, in get_cache_path
self.extraction_error()
File "/usr/lib/python2.3/site-packages/setuptools-0.6c6-py2.3.egg/pkg_resources.py", line 887, in extraction_error
raise err
ExtractionError: Can't extract file(s) to egg cache

The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: '/root/.python-eggs' The Python egg cache directory is currently set to: /root/.python-eggs Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory.



メッセージ最後に出ているように環境変数「PYTHON_EGG_CACHE」を設定せずにプラグインをインストールした場合にブラウザ上に表示されたエラー対処方法は、このページの「1. 事前準備」を参照



- エラーメッセージその3


The Trac Environment needs to be upgraded. Run trac-admin /home/trac/project1 upgrade"


プラグインを有効化した直後にブラウザに表示されたエラーメッセージ。

書かれているようにtrac-adminコマンドを実行する必要があります。

ただし、先にも書いたとおりDBにPostgreSQLを使用している場合は、「--no-backup」オプションが必要。

なので、


# trac-admin /home/trac/project1 upgrade --no-backup

を実行。



- エラーメッセージその4


Report execution failed: Dynamic variable '$NEW' not defined.

Timing and Estimationプラグインを追加した際に、「チケットを見る」メニューにに幾つか新しいレポートが追加されています。

それを見た際に表示されるエラーメッセージ。

ただし、これはエラーではない模様。TracHacks参照


ユーザーマニュアル を見ると、これらのレポートは、「Management」メニュー内のリンクから経由した場合にのみ正常に表示されます。

まぁ、恐らくTrac内でレポートの画面を弄る方法が提供されておらず、プラグインから勝手に弄るのも良くないので、SQL置き場的にレポートの機能を利用しているのかな・・・。


って事で、チケット登録の際に入力した日々の作業実績時間の統計レポートを見たければ「Management」メニュー内にある「Billing Report」又は「Ticket/Hour Reports」から参照する事。


2007.08.03 追記

Timing and Estimationプラグインをインストールすると、レポートの追加でエラーが発生するようになりました。

回避方法は、下記を参照。


Trac:Timing and Estimationプラグインを入れた後レポート作成できない件