Python製プロジェクト管理フレームワークTracのインストールまわり

![trac_logo.png](https://qiita-image-store.s3.amazonaws.com/0/12499/480c59f8-c5cb-caa0-933a-b4e3a9cc1792.png)

# 0.初めに

ふと、チケット駆動開発を行いたいなぁ～と思い、数年前流行って今では中々聞かないTracが今どうなっているのか興味があったのでインストールしてみました。

Tracと言えば、Windows用のTrac Lightningが有名ですが、正直言ってプログラマーにはおすすめしません。
と言うのも、Trac Lightningはいろんなプラグインをゴテゴテに入れてしまい、正直自分では全く使わない機能が邪魔してて、一つずつ消すのが面倒なので、今回はピュアなTracのインストールして運用していく話を。

今回の話は、　
**Trac ver 1.0.4**を元に話しております。

Tracが一番流行ったv0.1及びv0.12の情報が一番WEBにありますが、今回は最新のv1.0.4を使います。設定が違う！と嘆かないでください。（嘆いた人ノw


# 1.ダウンロード 

Python製なので、pipでインストールが可能です。

- sudo pip install trac

これだけ。　（さすがPython！そこに惚れるw憧れるぅw）

#2.Tracの環境設定＆初期化

Tracで運用するプロジェクトの一式を保存するフォルダを作ります。

- mkdir Main

ひとまず僕はMainと言うフォルダを作りました。

- trac-admin ./Main initenv

trac-admin　でTracのコンフィグを行うことが出来ます。
./Main は先ほど作成したディレクトリで、
initenv はそのディレクトリで初期化するよって事です。

で、コマンドを叩くと、以下のように・・・なりません。
実際は英語なので、何となく進めてください。

![Screenshot from 2015-03-01 20:12:36.png](https://qiita-image-store.s3.amazonaws.com/0/12499/e5aea044-0bec-c145-f853-7e9b94ed0905.png)


項目は二ヶ所。プロジェクト名とデーターベースの選択。
プロジェクト名は今回はmain
データーベースはそのままエンターでデフォルトのSQLiteを使います。　SQLite最高w


#3.サーバー立ち上げ

僕はApachが大嫌いなので（僕の理解度を越えた巨大なので）、今回はせっかくPython何だから、簡易サーバーとか無いの？って思ったらTracに標準で入っていました。

- tracd --port 1121 ./Main

tracdはTracのサーバーアプリで、--portはポート番号の設定、書いてないけど--hostもあります。あとはディレクトリの宣言でおわり。

徐にブラウザを立ち上げ、疑心暗鬼に localhost:1121　にアクセスしてみてください。


![Screenshot from 2015-03-01 20:15:15.png](https://qiita-image-store.s3.amazonaws.com/0/12499/39915321-f9fe-91da-3ab7-75678f0322af.png)

すると、以下のサイトが現れ、リンクをクリックすると、

![Screenshot from 2015-03-01 20:15:38.png](https://qiita-image-store.s3.amazonaws.com/0/12499/be65a361-ab00-9f22-83dc-e246d086a38e.png)

になります。
（おや？メニューが英語だぞ？とお気づきの方はすみません、後述に日本語化の方法を書いておきますのでご了承ください。）

おめでとうございます。Tracのインストールは無事に完了しました。
次はパスワード及び日本語化の話。

#4.パスワードの作成

TracでのログインはBasic-loginになります。他のLogin方式にも選択出来た気がしますが、よく分からないのでパスします。

で、ここでもいろんなサイトにはApachiを使うよう書いてありますが、ここはPythonでハッシュコードを生成します。

```lang:pass.py
from optparse import OptionParser
import md5

# build the options
usage = "usage: %prog [options]"
parser = OptionParser(usage=usage)
parser.add_option("-u", "--username",action="store", dest="username", type = "string",
                  help="the username for whom to generate a password")
parser.add_option("-p", "--password",action="store", dest="password", type = "string",
                  help="the password to use")
(options, args) = parser.parse_args()

# check options
if (options.username is None) or (options.password is None):
   parser.error("You must supply both the username and password")
   
# Generate the string to enter into the htdigest file
realm = 'trac'
kd = lambda x: md5.md5(':'.join(x)).hexdigest()
str = ':'.join((options.username, realm, kd([options.username, realm, options.password])))

f = open("login","w")
f.write(str)
f.close()

```

公式のサンプルを少し修正し、
- python pass.py --username hoge --password hogehoge
とすると、loginと言うファイルが生成されます。

#5.ログイン

さて、loginファイルが出来たので、再度サーバーを立ち上げます。

- tracd --port 1121 --auth=*,login,trac ./Main

見ての通り、--authが追加されてます。
--auth は、--auth= <project name>,<pass file>,<Auth-Name> って所かな。
公式はまた違った名前でかかれていますが、僕のイメージ的なこうです。

これで起動すると、無事に行けばチケットの作成タブが増えます。

#6.日本語化

TracはSubversionを使っているので、まずは先にそれを入れておく。

- sudo apt-get install Subversion

とかとかで入れて、

- svn checkout http://svn.edgewall.org/repos/trac/trunk trac-1.0dev

で、ファイルをダウンロードし、

- easy_install Babel

- python setup.py extract_messages

- python setup.py update_catalog

- python setup.py install

でインストールします。

そして、再度Tracdを起動すると、メニューが少し日本語になったかと思います。


#7.最後に

Tracについて知っているかたは、今では少ないと思いますので、
http://ja.wikipedia.org/wiki/Trac
や、少し古いですが
http://itpro.nikkeibp.co.jp/article/COLUMN/20080414/298973/
をご覧いただければ様子がつかめるかも
（正直、Tracやチケット駆動に関して流行った時期が2010年あたりからなので、今ではもっと良い物があるかもしれません。また、Tracも2012年にVer1.0になり、今はVer1.0.4です。）

僕は、Tracを採用した理由は　Python製だからぁぁぁぁ～！！　ですw


#8.裏技テク？

もし、バックアップが必要な再は、trac-adminで指定したディレクトリー一式を丸まるコピーすれば良い。これが素晴らしい。
さらに、dbディレクトリに生のSQLiteがあるから、これさえあれば、再構築だって出来る。素晴らしい。

また、複数のプロジェクトがある時は、trac-adminで新規作成か既存のファイルをコピーし、

> tracd --host $HOST --port $PORT --auth=*,login,trac ./$Project1　\
                                --auth=*,login,trac ./$Project2　\

なスクリプトを作ればOK。素晴らしい。

TracはPython製のなので、きっとまだまだ裏技があると思われます。
サーバーにかんしても、uwsgiで動いているからアレコレできるんじゃないかなぁ～　ふっふっふw
駄文で失礼。w