Posted by & filed under 開発.


アリエルの開発は、いわゆる チケット駆動開発 に分類されるわけですが、課題/バグ管理システムに Trac を使っています。最近の Trac 自体の開発は活発とは言えないし、Apache Bloodhound も出てきたりしていて、その未来がどうなるのか懐疑的なところもありますが、懸命に保守してくれる開発者もいるので、まだまだ数年は安心して使えるように思います。

そんな Trac は minimalistic な基本方針により、足りない機能をプラグインで拡張するのが一般的です。このプラグインという過去の遺産が Trac を課題管理システムとして有力な候補の1つに押し上げているとも言えます。Trac のプラグインは TracHacks で探してそのリポジトリからインストールできます。プラグインを PyPI からインストールできるように trac.plugins の名前空間を使う 方法もありますが、PyPI で公開されているパッケージを俯瞰すると、おそらくは歴史的な経緯でこちらの方がマイナーな方法にみえます。

 

アリエル製 Trac プラグイン

さてタイトルの本題です。アリエルで開発した Trac プラグインを紹介します。詳細な説明はリンク先をみてもらうとして、その目的や背景と用途を簡単に紹介します。

これらのプラグインの見た目はこんな感じです。

trac-dummy1
trac-dummy2
trac-dummy3

 

TracTicketReferencePlugin

minimalistic な方針とのトレードオフですが、チケット同士の関連付けを行う機能すらありません。私の知っているバグ管理システム (Bugzilla, Mantis, Redmine) で、この機能が標準で提供されていないのは Trac だけです。いまどき全く困ったもんです … という経緯から作られたのがこのプラグインです。最低限のチケットの関連付けとコミットフックとの連携ができるようになっています。

InterTrac でのチケット関連付けの 要望 は社内外からあるのですが、Trac 自体の TracLinks と InterTrac との境界が曖昧で、それらをどう扱えば良いのかがちょっと調べた限りでは、よく分からなくてずっと放置状態です。がんばればできそうだけど、そのモチベーションもインセンティブもないような機能は、最近だとクラウドファンディングしたりするといいのかもしれないなと思ったりもします。

TracMultiSelectBoxPlugin

この機能も minimalistic な方針とのトレードオフです。複数選択リストが標準で提供されていません。この種のプラグインも古からのものから、リッチ UI なものから、探せばたくさんあります。軽量/シンプルな機能性と Trac 本体で提供される text の list フォーマットを使う ことで将来的な互換性も保持することを狙いとして作りました。いずれ Trac 自身に複数選択リストの機能が入るでしょうから、それまでの繋ぎとして使うプラグインです。

TracChangeFileBiffPlugin

限定的な用途ですが、コミットフックでリポジトリ連携するときに特定のファイルパターンを検知して、そのチケットにフラグを立てるプラグインです。上記のサンプル画像では、*.properties に対してプロパティファイルというフラグを立てます。TracMultiSelectBoxPlugin と併用すると便利です (もともと TracMultiSelectBoxPlugin はこのプラグインのために作ったものでした) 。社内では、プロパティファイルの他に、メッセージカタログに対する更新を監視して、チケットが fix された後にテスターがベリファイするときに日本語/英語のメッセージ確認を見逃さないようにするために使っています。

 

その他のプラグイン

アリエルでは20~30個ほどのプラグインを使っています。ほとんどは一般的によく使われるものだと思うので、最近導入したプラグインで良かったものをいくつか紹介します。

TracAdvancedSearchPlugin

Trac の標準検索機能はデータベースに対する検索となるため、データの増加に伴ってどんどん遅くなります。以前は Trac の標準検索機能で10秒前後かかっていた全文検索が、このプラグインにより1秒未満に短縮されました。全文検索のバックエンドには Apache Solr を使います (いまのところ対応しているのも Solr のみ) 。Solr の構築はちょっとややこしいですが、そのコスト以上の快適さを得られます。

いまの仕組みとしてチケットにコメントが追加されるごとに、そのチケット情報とコメントのテキストを全てインデクシングし直すといった効率の悪いことをやっています。それでもアリエルの環境 (インデクシングのリクエストを非同期モードにする、チケットのコメントは数百程度) では、特に運用トラブルが起きていないので大丈夫そうです。まだマージされていませんが、#29 の pull request を取り込むと全部検索のノイズを減らせます。

TracTicketFieldsLayoutPlugin

上記の1番目のサンプル画像で「基本項目」と「拡張項目」にグルーピングされているのに気付きました? Trac を運用していく中でどうしてもカスタムフィールドが増えてしまいますね。いろいろなフィールドがあってごちゃごちゃになりがちです。これらの項目は◯◯の運用に使うものといったグルーピングをすることで、見た目がすっきりするだけでなく、フィールドを探すのも容易になります。管理画面の UI も優れていて簡単に設定できます。

TracChangeFileBiffPlugin のデータの持ち方もこのプラグインの実装をお手本にさせて頂きました。

WikiExtrasPlugin

もうメンテナンスされていないようで残念な感じですが、Trac での表現力をあげるマクロやアイコン (上山根 祐輔氏 が クリエイティブ・コモンズ 表示 3.0 ライセンス で公開しているもの) を提供します。見た目はこんな感じです。

trac-wikiextras1
 
trac-wikiextras2

 
trac-wikiextras3

 

メンテナンスされていないプラグインに対するパッチ

過去の遺産であるプラグインが多いのは Trac の魅力の1つですが、便利なプラグインであってもメンテナンスされていないものもたくさんあります。アリエルで利用しているプラグインの中にも TracHacks へパッチを投稿したものの、残念ながらメンテナー不在で対応してくれなかったりすることもあります。社内でパッチを管理するのが面倒になってきたのと、github に置いておく方が社内外でも扱いやすく、他にも困っている人がいたら役に立つかもしれないし、どんどん公開していくことにしました。同じようにパッチ管理している人がいたら活用してください。

今後も何か問題があったら増えていくかもしれません。


関連文書:

3 Responses to “アリエルの開発を支える Trac プラグイン”

  1. avatar

    TechFeeds (@JapanTechFeeds)

    アリエルの開発を支える Trac プラグイン [開発] [trac] [blog-tech] – ありえるえりあ:アリエルの開発は、いわゆる チケット駆動開発 に分類されるわけですが、課題/バグ管理システムに Trac を使ってい.. http://t.co/oF4Ea4gf9Q