Trac : T&Eプラグインを利用した、期間を限定したレポートの作り方 | A Day In The Boy's Life

A Day In The Boy's Life

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

元々、Tracには登録したチケットを特定の条件で纏め上げる事が出来る強力なレポート機能がありますが、これらのレポート機能はそれまでに登録した全てのレポートが対象となります。

例えば、未解決のチケットの一覧を見たい場合でも、Tracの利用を開始してから今までに登録したチケットの中で、ステータスが「未解決」のチケットが表示されます。


1人でTracを利用している場合は、これでも全然問題が無いのですが複数人で利用している場合、またはTracを利用して本格的にプロジェクトを管理する場合は、特定の期間でそれらのチケットの状態をまとめて、上に報告すると言った場合にも利用したいと言う要望があるのではないでしょうか?


企業内で利用するのであれば、週次報告会又は月次報告会で、今週(今月)の進捗度合い、発生した課題などを報告する必要があったりします。

その際に、期間(時間)を特定してレポートを出力させるという事ができれば便利です。


この期間を特定したレポートの作成方法ですが、Timing and Estimationプラグインを利用する事で出力が可能になります。

Timing and Estimationプラグインのインストール方法については、下記を参照してください。


Tracの使い方 -Timing and Estimationプラグイン-

さて、インストールが完了するとTracの上部メニューに「Management」というメニューが表示されるかと思います。

ここは、チケット登録時に入力したチケットを着手してから完了するまでの見積り時間や、その日のチケットに対する作業時間を入力した値を集計するレポートが閲覧できますが、その他にも「Start Date:」と「End Date:」のテキストボックスに入力した期間でそれらの値を集計する事が可能です。

つまり、ここの「Start Date」と「End Date」の期間でレポートを纏め上げる事ができるわけです。


開始日(Start Date)は、レポートのSQLにおいて「$STARTDATE」という特殊な変数に、終了日(End Date)は、「$ENDDATE」という変数に格納されSQLに渡されます。

この2つの変数を利用する事で、入力された開始日と終了日を限定したレポートを作成する事ができます。


で、このManagementメニューから閲覧できるレポートですが少し特殊で、通常の「チケットを見る」のメニューからではエラーになって閲覧する事ができません。

これは、それらの特殊な変数がManagementメニューのプログラムを介した場合しかセットされないからです。


であれば、そのManagementメニューのレポート一覧に、独自のレポートを加える必要が出てきます。

以下がその方法です。


Timing and Estimationプラグインを利用した期間限定レポートの作成方法



1. 通常のレポートの作成


まずは、「チケットを見る」のメニューからレポートを作成します。

レポートの作り方は、表示されているレポートの一覧から任意のものをクリックし、「このレポートをコピー」ボタンをクリックします。

「このレポートをコピー」ボタンが表示されていない場合は、Tracを利用しているユーザーにTRAC_ADMINの権限がないためだと思いますので、それを付与します。


参考: Tracの使い方 - trac-adminの使い方、チケットの管理とロードマップの確認 -


また、レポートの作成でエラーになった場合は、下記参照


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



2. report_versionテーブルにレポートの情報を登録


TracのDBにログインし、report_versionテーブルに必要な情報をセットします。


$ psql -U trac_user trac-db

下記のSQLを参考に必要な情報を登録します。


INSERT INTO REPORT_VERSION VALUES (レポート番号, バージョン番号, 'タグ名');

最初の「レポート番号」は、1.で登録した際のレポートの番号です。

「チケットを見る」メニューからレポートの一覧を表示した際に、一番左側に表示されている番号のことです。

次のバージョン番号ですが、ちょっと詳細は分からないのですが、恐らく適当な数字OKかと。。。

なので、他のバージョンと被らない番号を適当に割り当ててあげればよいと思います。


最後にタグ名ですが、登録されているタグ名は「T&E Billing Reports」か「T&E Ticket/Hour Reports」の2つのみになっていますので、このどちらかの値をセットします。

違いは、レポートを出力される位置でしょうか。

「T&E Billing Reports」をタグ名として登録すると、Managementメニューの「Billing Reports」の箇所にレポートが出力されます。

一方、「T&E Ticket/Hour Reports」をタグ名として登録すると、「Ticket/Hour Reports」の箇所にそのレポートが出力されます。


例)

INSERT INTO REPORT_VERSION VALUES (23, 16, 'T&E Billing Reports');


3. レポートの編集


最後に、1.で作成したレポートを編集します。

先に書いたとおり、Managementメニューの「Start Date:」に入力された値は、特殊な変数$STARTDATEに「End Date:」で入力された値は、$ENDDATEに格納されています。

これを利用して、時間に関係するカラムへ問合せするようにSQLを作成します。


例えば、特定の期間内に作られた全チケットを出力したい場合は下記のSQLをセットします。


SELECT p.value AS __color__,
id AS ticket, summary, component, version, milestone, t.type AS type,
(CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter,
case
when status = 'closed' then '解決'
when status = 'new' then '未解決'
when status = 'assigned' then '未解決'
when status = 'reopened' then '未解決'
end as status
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
WHERE time >= $STARTDATE AND time < $ENDDATE
ORDER BY p.value, milestone, t.type, time

チケットは、ticketテーブルのカラム「time」に登録日がセットされています。

ですので、そのカラムに対して開始日($STARTDATE)と終了日($ENDDATE)が範囲内にあるチケットを抽出するように条件を組み込んでいます。


レポート名は、「期間を指定した全チケット」とでもしておきましょうか。

これで、指定した期間内に登録された全チケットを閲覧する事が可能になりました。

今回の例では、Managementメニューの「Billing Reports」の箇所に「期間を指定した全チケット」

というメニューが表示されていると思います。


ここで、抽出するチケットの登録された期間を入力してみます。


TE期間指定


※ 期間を指定する際は、「月/日/年」の形式になります。


上記の期間を入力した状態で、「期間を指定した全チケット」をクリックします。

(JavaScriptで各レポートのメニューが動的に変わっているようですね)


結果。


TE結果


作成日が、2007/07/01から2007/07/31までの全チケットが表示されました。


Timing and Estimationプラグインの一機能である、見積り時間や作業時間については入力せずにこうした期間を設定したレポートの出力を行う為だけに使うと言うのも便利かもしれませんね。


今回は、作成日に対する条件設定をしましたが、ticketテーブルの「change_time」には更新日が格納されていますので、その条件をセットする事で更新されたチケットを取り出すことも可能です。

また、レポートのSQL自体自由に変更する事が出来ますので、色々応用ができそうですね。