Windowsで簡単にTracが構築できるTrac月が公開されました。
Tracとは?
Tracとは、オープンソースで開発されているバグトラッキングシステムです。まぁ、バグトラッキングシステムにもBuzillaをはじめ色々ありますが、Tracは次のような特徴があります。
- シンプルなユーザインタフェース
- バグ修正とSubversionのソースコードの連携
- wikiの統合によるコミュニケーション機能
- 強力なリンク機能。[34]や#123などと書くだけで、Subversionのチェンジセットやチケットへリンクを貼ることができます。
Tracは、次のオープンソースプロジェクトで利用されています。
Ruby on RailsやSpringIDEなど新鋭のプロジェクトを中心に採用が進んでおり、今最も注目のバグトラッキングシステムと言えるでしょう。
参考リンク
インタアクトのサイトでは、tracを日本語化したtrac-jaが配布されています。また、マニュアルの日本語化も行っています。
Tracの拡張機能、マクロなどが投稿されているサイトです。
インストール
適当に作ったパッケージがhttp://ultimania.org/debian/にあります。/etc/apt/sources.listに次の行を追加し、
deb http://ultimania.org/debian/ ./ deb http://www.backports.org/debian/ sarge-backports main contrib
apt-getでインストールしてください。
# apt-get install trac python2.3-japanese-codecs
ここでは、Subversionのリポジトリで日本語を扱うために、python2.3-japanese-codecsをインストールしておきます。
依存関係でインストールできない場合
下記のパッケージも一緒にインストールしてみるとよい。
- python2.3-subversion
- python2.3-sqlite
- python2.3-clearsilver
セットアップ
Tracを利用するには、SubversionのリポジトリとTracのデータベースを生成します。
Subversionのディレクトリの作成
# svnadmin create /tmp/svn
Tracのプロジェクトの作成
# rm -rf /tmp/trac # trac-admin /tmp/trac initenv Creating a new Trac environment at /tmp/trac Trac will first ask a few questions about your environment in order to initalize and prepare the project database. Please enter the name of your project. This name will be used in page titles and descriptions. Project Name [My Project]> Project Ultimania ☆プロジェクト名 Please specify the connection string for the database to use. By default, a local SQLite database is created in the environment directory. It is also possible to use an already existing PostgreSQL database (check the Trac documentation for the exact connection string syntax). Database connection string [sqlite:db/trac.db]> Please specify the absolute path to the project Subversion repository. Repository must be local, and trac-admin requires read+write permission to initialize the Trac database. Path to repository [/var/svn/test]> /tmp/svn ☆Subversionのリポジトリのパス Please enter location of Trac page templates. Default is the location of the site-wide templates installed with Trac. Templates directory [/usr/share/trac/templates]> Creating and Initializing Project Configuring Project trac.repository_dir ...
次のようにやってもok。
# trac-admin /tmp/trac initenv "Project Name" sqlite:db/trac.db /tmp/svn /usr/share/trac/templates
Tracの簡易起動
# tracd -p 8081 /tmp/trac
これで、tracdを起動したホストの8081ポートへブラウザでアクセスすると、Tracを利用することができます。
PostgreSQLの利用
PythonからPostgreSQLを利用するpsycopg(Debianの場合python2.3-psycopgパッケージ)をインストールし、
conf/trac.iniファイルのdatabaseプロパティを下記のように設定する。
database = postgres://<ユーザ名>:<パスワード>@localhost/<データベース名>
例えば、次のように記述
database = postgres://trac:tracpass@localhost/trac
データベースを作成しておく必要があるが、下記のようにutf-8で作成する必要があるので注意。
$ createdb --encoding utf-8 trac
Webから利用
CGI
Tracは簡易Webサーバが入っているとはいえ、ふつーはApacheを使います。Apacheで利用するには、設定ファイルに次のように記述します。
<LocationMatch "/[[:alnum:]]+/login">
AuthType Basic
AuthName "Trac Authentication"
AuthUserFile /home/trac/.htpasswd
Require valid-user
</LocationMatch>
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/trac">
SetEnv TRAC_ENV "/tmp/trac"
</Location>
ついでに、SVNのリポジトリの設定も記述
<Location /svn>
DAV svn
SVNPath /tmp/svn
</Location>
mod_python
cgiを使うと劇重だが、mod-pythonを使うとかなり早くなる。mod-pythonのインストールは、次の通り。
# apt-get install libapache2-mod-python2.3
Apacheの設定は、上記の設定を次のように変更する。
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/trac">
# SetEnv TRAC_ENV "/tmp/trac"
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /tmp/trac
# PythonOption TracEnvParentDir /tmp
PythonOption TracUriRoot /trac
</Location>
FastCGI
FastCGIは、アプリケーションプロセスをWebサーバと別に実行しておき、Webサーバとアプリケーションプロセスで通信する仕組みである。この方法もmod_pythonと同様に高速化できるが、より汎用的に作られている。 mod_fastcgiとmod_fcgidの2種類がある。mod_fcgidの方が新しく安定しているようなので、mod_fcgidを利用することをお勧めする。
mod_fcgid
# apt-get install libapache2-mod-fcgid # a2enmod fcgid
/etc/apache2/mod-enabled/fcgid.conf
<IfModule mod_fcgid.c> # TRAC_ENVもしくはTRAC_ENV_PARENT_DIRを設定 DefaultInitEnv TRAC_ENV /home/trac/test # DefaultInitEnv TRAC_ENV_PARENT_DIR /home/trac AddHandler fcgid-script .fcgi SocketPath /var/lib/apache2/fcgid/sock </IfModule> DefaultInit /etc/apache2/site-enabled/xxx ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi <Location "/trac"> </Location>
mod_fastcgi
FastCgiConfig -initial-env TRAC_ENV=/tmp/trac ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi <Location "/trac"> </Location>
プラグインとWikiマクロ
Tracは、プラグインとWikiマクロの2つの機能によって、Trac自身を拡張することができます。
Wikiマクロ
Wikiマクロは、Wikiを拡張するためのマクロです。Tracをセットアップしたディレクトリのwiki-macroディレクトリにマクロ(*.py)を置くことによって、マクロを利用することができます。
プラグイン
python2.3-setuptoolsパッケージをインストールしてください。 プラグインによりTracに様々な機能を追加することができます。プラグインをインストールするには、python2.3-setuptoolsパッケージをインストールしておく必要があります(sargeのsetuptoolsパッケージは古いためうまくプラグインをビルドできません。最初に示したapt-lineをご利用ください)。プラグインをインストールするには、プラグインをビルドし、eggファイルを作成します。
# python setup.py bdist_egg # ls dist/ TracXMLRPC-0.1-py2.4.egg
eggファイルをpluginsディレクトリにコピーします。ちなみにeggはJavaでいうjarみたいなもんですね。
テンプレート
カスタムフィールド名を取得
<?cs var:ticket.fields["custom_field"].label ?>
カスタムフィールドの値を取得
<?cs var:ticket["custom_field"] ?>
管理について
リポジトリとの同期
Tracのプロジェクトを作成した後で、SVNリポジトリを置き換えたりして最初の状態から変更すると、リポジトリブラウザでエラーが発生します。そのような場合、resyncコマンドで同期を取ります。
$ trac-admin /home/trac/repo resync
デフォルトのコンポーネントとマイルストーンの削除
tracのプロジェクトはデフォルトでcomponent1、component2の2つのコンポーネントと、milestone1、milestone2、milestone3、milestone4の4つのマイルストーンが登録してあります。まずは、これらのコンポーネントとマイルストーンを削除し、プロジェクトをきれいにします。
# trac-admin /home/trac/repo component remove component1 # trac-admin /home/trac/repo component remove component2 # trac-admin /home/trac/repo milestone remove milestone1 # trac-admin /home/trac/repo milestone remove milestone2 # trac-admin /home/trac/repo milestone remove milestone3 # trac-admin /home/trac/repo milestone remove milestone4
コンポーネントの削除、追加
コンポーネントを追加するには、
# trac-admin /home/trac/repo component add mycomponent owner
とする。ownerはコンポーネントのオーナを指定。
マイルストーンの追加と削除
マイルストーンを追加するには、
# trac-admin /home/trac/repo milestone add 1.0
とする。
権限の表示/変更
権限の表示は次のようにする。
# trac-admin /home/trac/repo permission list anonymous BROWSER_VIEW anonymous CHANGESET_VIEW anonymous FILE_VIEW anonymous LOG_VIEW anonymous MILESTONE_VIEW
追加は、次の通り。
# trac-admin /home/trac/repo permission add TRAC_ADMIN
取り敢えず、TRAC_ADMINを与えとけば、全ての権限を持たせることができる。 権限のリストは、次の通り。
| BROWSER_VIEW | ブラウザによる閲覧 |
| CHANGESET_VIEW | チェンジセットの閲覧 |
| CONFIG_VIEW | 設定の閲覧 |
| FILE_VIEW | ファイルの閲覧 |
| LOG_VIEW | ログの閲覧 |
| MILESTONE_[ADMIN,CREATE,DELETE,MODIFY,VIEW] | マイルストーンの各種操作 |
| REPORT_[ADMIN,CREATE,DELETE,MODIFY,SQL_VIEW,VIEW] | リポートの各種操作 |
| ROADMAP_[ADMIN,VIEW] | ロードマップの各種操作 |
| SEARCH_VIEW | 検索表示 |
| TICKET_[ADMIN,APPEND,CHGPROP,CREATE,MODIFY,VIEW] | チケットの各種操作 |
| TIMELINE_VIEW | タイムラインの閲覧 |
| TRAC_ADMIN|全ての権限。神。 | |
| WIKI_[ADMIN,CREATE,DELETE,MODIFY,VIEW] | WIKIの各種操作 |
チケットタイプの追加
デフォルトのチケットタイプは、defect(バグ)、enhancement(機能追加要求)、task(タスク)の3つ。チケットタイプを追加するには、次のようにする
# trac-admin /home/trac/repo ticket_type add <チケットタイプ>
emailからチケットを作成
contrib/emailfilter.pyを次のようにしてTRACのホームを指定する。
TRAC_ENV_PATH = '/home/trac/project'
適当な場所にコピーして、/etc/aliasesに次のように記述。
bugs: |/usr/local/trac/contrib/emailfilter.py
これで、bugsユーザにメールを送るとチケットととして登録されるようになる。Fromがレポーターに、SubjectがSummaryに、メール本体がDescriptionになる。デフォルトのemailfilter.pyは日本語を正しく処理できない。添付の #ref(emailfilter.py) を利用すること。
また、次のURLにメールからTracを操作する改良版がある。
コミット時のメール送信をチケットの自動クローズ
下記のサイトを参照
Windowsで操作するときは、次のようなpost-commit.batを利用
::----------------------------- ::Call the TRAC post-commit hook :: SET REPOS=%1 SET REV=%2 SET SVNLOOK=svnlook.exe SET TRAC_ENV=C:\trac-project FOR /F "usebackq delims==" %%i IN (`"%SVNLOOK%" log -r %REV% %REPOS%`) DO SET LOG=%%i FOR /F "usebackq delims==" %%i IN (`"%SVNLOOK%" author -r %REV% %REPOS%`) DO SET AUTHOR=%%i python.exe C:/trac/contrib/trac-post-commit-hook" -p "%TRAC_ENV%" -r "%REV%" -u "%AUTHOR%" -m "%LOG%"
コミット時にオープンされたチケット番号が記述されていないとコミットをリジェクト
http://projects.edgewall.com/trac/browser/trunk/contrib/trac-pre-commit-hook
日本語ファイルがリポジトリブラウザで文字化けする
pythonのjapanese-codesモジュールをインストールし、trac.iniでデフォルトの文字コードを変更します。
- japanese-codesモジュールのインストール
# apt-get install python2.3-japanese-codecs
- trac.iniの設定
[tracリポジトリ]/conf/trac.iniを変更
[trac] default_charset = japanese.shift_jis
python2.4以上であれば、
[trac] default_charset = cp932
とする。
その他
Pukiwikiからの移行
- pukiwiki2trac http://cheesy.dip.jp/diary/?p=55
CVSからSVNへの移行
cvs2svnを利用する。
単純な移行
$ cvs2svn --encoding=euc-jp -s ~/svnrepos ~/cvsroot
--encodingはコミットメッセージのエンコーディング。Windowsで利用している場合、Shift_JISとかにすると良いかもしれない。
複数のCVSリポジトリを1つのSubversionリポジトリへ変換
#!/bin/sh
SRC_CVSROOT=CVS_src # 作業用にコピーしたCVSリポジトリ
DST_SVNROOT="${HOME}/Library/svn-repos" # subversionのリポジトリ
URL_SVNROOT=file://${DST_SVNROOT}
copy_repos() {
projname=${1}
echo "== ${projname} =="
cvs2svn --no-prune \
--dump-only --dumpfile=svn-${projname}.dmp \
${SRC_CVSROOT}/${projname}
svn mkdir -m "project moved from CVS" ${URL_SVNROOT}/${projname}
svnadmin load ${DST_SVNROOT} --parent-dir=${projname} < svn-${projname}.dmp
#rm -f svn-${projname}.dmp
}
移行したくないモジュールがある場合は、CVSリポジトリの複製を作成し、複製したCVSリポジトリのモジュールを削除した後、変換処理を行う。
XML-RPC
TracXMLRPCを利用すると、クライアントプログラムからXML-RPCを利用してTracを操作することができます。プラグインをビルドして、pluginsディレクトリにコピーし、XML-RPCでアクセス許可するユーザにXML_RPC権限を与えます。XML-RPC権限を与えるには、次のようにします。
$ trac-admin /home/trac/test permission add okamototk XML_RPC
LDAPPlugin
LDAPプラグインを利用すると、Tracの認証をLDAPを利用して行えるようになる。 httpd.confは下記の通り。
ScriptAlias /trac/ldap-test /usr/share/trac/cgi-bin/trac.cgi
<Location "/trac/ldap-test">
SetEnv TRAC_ENV "/home/trac/ldap-test"
AuthType Basic
AuthBasicProvider ldap
AuthName "Trac Authentication"
AuthLDAPURL "ldap://localhost/dc=nodomain?cn?sub?(objectClass=*)"
AuthzLDAPAuthoritative off
Require valid-user
</Location>
trac.iniは次のようにする。
[trac] ... # trac-adminからパーミッションを変更するにはこの設定が必要 permission_store = LdapPermissionStore ... [ldap] enable = true # ユーザが俗するDN basedn = ou=sales,dc=nodomain # ユーザIDを識別する属性 uidattr = cn # tracのパーミッションを指定する属性(デフォルトがtracpermなので実は設定不要) permattr=tracperm manage_groups = true store_bind = true # LDAPを操作するときのユーザのDNとパスワード bind_user = cn=Manager,dc=nodomain bind_passwd = secret
LDAP側の設定は、次のようなtrac.schemaを定義しておく。
# trac
# Generated by LDAP Studio on 2007/05/20 14:03:24
attributetype ( 1.2.3.4.5.6.897
NAME 'tracperm'
DESC 'Trac Permission'
SUP name
)
objectclass ( 1.2.3.4.5.6.567
NAME 'tracAccount'
DESC 'Trac managed object.'
SUP top
AUXILIARY
MAY tracperm
)
/etc/ldap/schemaに保存し、slapd.confでincludeしておく。
グループの作成は、groupOfNamesオブジェクトとtracAccountオブジェクトを持つオブジェクトを作成する。tracAccoountの持つtracperm属性で、tracのパーミッション(WIKI_ADMIN,TRAC_ADMIN等)を指定する。ldap-test:WIKI_ADMIN等とすると、特定のTracプロジェクトへのみ設定を行うことができる。 グループへパーミッションを付与するときは、
# trac-admin /home/trac/ldap-test permission add @mygroup TRAC_ADMIN
のように@を先頭に付けると、LDAPの名前となる。このとき、tracpermには、ldaptest:TRAC_ADMINのようにプロジェクト毎の設定が付与される。
注意
SQLiteのアップグレード
Tracは、PythonのバージョンとSQLiteのバージョンに依存しています。正しく動作しない場合は、PythonのバージョンとSQLiteのバージョンを確認する。SQLiteのバージョンを上げたいときは、次のようにして、SQLite2.xのDBをSQLite3.xのDBに変換する。
# sqlite trac.db .dump > dump.sql # sqlite3 trac3.db ".read dump.sql" # mv trac3.db trac.db
Excelインポート
- sqliteのJDBCドライバを利用?
- Webからアップロードでプレビューして登録できると素敵
- チケットが割り振られたExcelがダウンロードできるとか。
- Tracが管理できないフィールドはヘッダに記述
カスタマイズ
- チケットの種類
障害、機能拡張、タスク
- 優先度
| 優先度 | 障害の記述 | タスク/機能拡張の基準 |
| blocker | システム全体の停止、環境の破壊等、アプリ自身以外にも大規模な影響を及ぼすバグ | プロジェクトやシステム全体に大きな影響を及ぼすタスク、機能 |
| critical | セキュリティホール、データの消失等、致命的なバグ | 他の重要なタスクを止めたり、システム全体に対するAPIの変発生する機能拡張てしまうタスク/機能拡張 |
| major | 通常のバグ | 通常の優先度 |
| minor | バグの手段が存在し、修正しなくても利用に差し障りの無いレベルのバグ | 実施しなくても策があるタスク/機能拡張 |
| trivial | タイポやコメントの間違い等、システムの動作に影響しないバグ。 | 実施しなくてもシステム開発に影響を及ぼさないタスク/機能拡張 |
Trac導入時に考えること
- Tracの分け方(業務、業務共通、基盤)
- コンポーネントの分け方(jarの単位、協力会社の単位)
- チケットの種類(task(タスク),defect(故障),enhancement(拡張),課題,)
- マイルストーン/リリースの基準(1.0aはユニットテスト完了、1.0bは結合テスト完了、1.0rcは総合運転試験(?)完了とか。
- ロール(プログラマ、テスター、管理者(開発管理/テスト管理)、その他)
- ワークフロー
- 各ロールによる操作の種別
- カスタムフィールド(グループ名、処理完了予定日など)
