プチ技術メモ

技術系の情報を中心に適当に書いています

Tracのメール機能を活用してみる

仕事に役立てようとTracを導入したのですが、特定の人だけに利用が集中してメンバー全体に浸透出来ていませんでした。みんなに使ってもらうために「チケットをRSSリーダーで購読すると便利ですよ。」とか提案したりしましたが、実際に試してくれるのはほんの一部で、なかなかうまく行きませんでした。
そこで、今度はTracのメール通知機能を試してみたのですが、意外といい感じだったのでご紹介します。チケットが登録・変更される度に「報告者」と「担当者」と「関係者」にメールが送信されるので、ほとんど強制的にTracのチケットを読ませることができます。それによって、徐々に利用率が上がってきたような気がします。

環境

Tracのインストール方法はググればいろいろ見つかるので、ここでは省略します。

Pluginのインストール

メール通知機能を使用するにあたり役立つかもしれないプラグインを紹介します。

NeverNotifyUpdaterPlugin

チケットの更新者へのメール送信を止めます。チケットの更新者にまでメールが送られると、煩わしいというクレームが出たので導入しました。NeverNotifyUpdaterPlugin - Trac Hacks - Plugins Macros etc. - Tracからインストールして下さい。他のPluguinと違いtrac.iniで有効にする必要はありません。

iso-2022-jpで送信する

メールを携帯に送ると文字化けすると苦情が出たので、iso-2022-jpで送るようにしました。trac 0.11 でメール送信 — takanory.netを参考にnotification.pyを書き換えましたが、メールの本文に半角カナなどが含まれるとエンコードエラーが発生してメールが飛ばなかったので以下のようにencodeの引数にreplaceを追加しました。これにより、エンコードエラーとなる文字は"?"に置換されて送信されます。

self._charset.input_charset = 'utf-8'
pref = self.env.config.get('notification', 'mime_encoding').lower()
if pref == 'iso-2022-jp':
    self._charset = Charset('iso-2022-jp')
elif pref == 'base64':
    self._charset.header_encoding = BASE64
    self._charset.body_encoding = BASE64
    self._charset.output_charset = 'utf-8'
:
:
# sanity check
if self._charset.input_charset == 'iso-2022-jp':
    body = unicode(body, 'utf-8').replace(u'\uff5e', u'\u301c')
    body = body.encode('iso-2022-jp', 'replace')
elif not self._charset.body_encoding:
    try:
        dummy = body.encode('ascii')

SVNのコミット時にメールも送信する

TracSVNの連携についてはTrac&Subversion連携: 気の向くままに・・・などを参考に下さい。ただし、記事のままだとメールは送信されませんでした。フックスクリプトの中でキャッシュフォルダの環境変数を設定することで、メールの送信も行えるようになります。

#!/bin/sh
REPOS="$1"
REV="$2"
export LANG=ja_JP.UTF-8
export PYTHON_EGG_CACHE=/var/www/eggcache
/usr/local/bin/python ${REPOS}/hooks/trac-post-commit-hook \
-p "/var/tracdata/trac/(projectname)" \
-r "$REV"

/var/www/eggcacheの部分は各自の環境に合わせて書き換えて下さい。

Trac.iniを設定する

私の設定はだいたい以下のような感じです。SMTPサーバー関連の設定については各自に環境に合わせて書き換えて下さい。

[notification]
smtp_enabled = true
smtp_server = mail.example.com
smtp_from = notifier@example.com
smtp_replyto = myproj@projects.example.com
always_notify_reporter = true
always_notify_owner = true
always_notify_updater = false
use_public_cc = true
mime_encoding = iso-2022-jp

職場にTracを導入したけどイマイチ使われていないと、お悩みの方はメール通知機能を一度試してみてはいかがでしょうか?