Windowsで簡単にTracが構築できる[http://ultimania.org/trac Trac月]が公開されました。 = Tracとは? = Tracとは、オープンソースで開発されているバグトラッキングシステムです。まぁ、バグトラッキングシステムにもBuzillaをはじめ色々ありますが、Tracは次のような特徴があります。 * シンプルなユーザインタフェース * バグ修正とSubversionのソースコードの連携 * wikiの統合によるコミュニケーション機能 * 強力なリンク機能。[34]や#123などと書くだけで、Subversionのチェンジセットやチケットへリンクを貼ることができます。 Tracは、次のオープンソースプロジェクトで利用されています。 * [http://www.edgewall.com/trac/ Trac] * [http://springide.org/project SpringIDE] * [http://dev.rubyonrails.org/ Ruby on Rails] * [http://www.meadowy.org/meadow/ Meadow] * [http://www.namazu.org/trac-namazu/trac.cgi/wiki Namazu] Ruby on RailsやSpringIDEなど新鋭のプロジェクトを中心に採用が進んでおり、今最も注目のバグトラッキングシステムと言えるでしょう。 === 参考リンク === * [http://www.i-act.co.jp/project/products/products.html trac とは(インタアクト)] インタアクトのサイトでは、tracを日本語化したtrac-jaが配布されています。また、マニュアルの日本語化も行っています。 * [http://trac-hacks.org/wiki/ Trac Hack] 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で利用するには、設定ファイルに次のように記述します。 {{{ AuthType Basic AuthName "Trac Authentication" AuthUserFile /home/trac/.htpasswd Require valid-user ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi SetEnv TRAC_ENV "/tmp/trac" ついでに、SVNのリポジトリの設定も記述 DAV svn SVNPath /tmp/svn }}} == mod_python == cgiを使うと劇重だが、mod-pythonを使うとかなり早くなる。mod-pythonのインストールは、次の通り。 {{{ # apt-get install libapache2-mod-python2.3 }}} Apacheの設定は、上記の設定を次のように変更する。 {{{ ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi # SetEnv TRAC_ENV "/tmp/trac" SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv /tmp/trac # PythonOption TracEnvParentDir /tmp PythonOption TracUriRoot /trac }}} == 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 {{{ # 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 DefaultInit /etc/apache2/site-enabled/xxx ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi }}} === mod_fastcgi === {{{ FastCgiConfig -initial-env TRAC_ENV=/tmp/trac ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi }}} = プラグインと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みたいなもんですね。 = テンプレート = カスタムフィールド名を取得 {{{ }}} カスタムフィールドの値を取得 {{{ }}} = 管理について = == リポジトリとの同期 == 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を操作する改良版がある。 * http://trac-hacks.org/wiki/EmailtoTracScript == コミット時のメール送信をチケットの自動クローズ == 下記のサイトを参照 * http://yamashita.dyndns.org/blog/247 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 } }}} 参考: http://72.14.235.104/search?q=cache:wI3GMBbwzNIJ:homepage3.nifty.com/kimuraw/d/%3F11120109+cvs2svn+%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%80%80%E7%A7%BB%E8%A1%8C+dump&hl=ja&gl=jp&ct=clnk&cd=6 移行したくないモジュールがある場合は、CVSリポジトリの複製を作成し、複製したCVSリポジトリのモジュールを削除した後、変換処理を行う。 == XML-RPC == [http://trac-hacks.org/wiki/XmlRpcPlugin 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 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 }}} 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は総合運転試験(?)完了とか。 * ロール(プログラマ、テスター、管理者(開発管理/テスト管理)、その他) * ワークフロー * 各ロールによる操作の種別 * カスタムフィールド(グループ名、処理完了予定日など)