Trac プラグイン開発

アルバイト

年末年始にたくさん寝過ぎたせいか、夜にあんまり眠れなくなってきた。元気だから大丈夫だろう。

バグ修正

軽微なバグ修正を3件 fix した。些細なバグや UI 系の改善でチケット登録されたら、テスターの方々のお仕事増やして申し訳ないなとも思う。

開発方法論の改善提案の1つでもあるけど、曖昧なデザインの明確化、チケットの reopen 頻度、影響範囲の把握、この辺りの暗黙知をどうナレッジ化させるかが品質改善への大きな課題だと思う。

Trac のクロスリファレンスプラグイン

昨日、調べていたものの続き。

やりたいことは MasterTicketsPlugin – Trac Hacks - Plugins Macros etc. に近い。このプラグインはチケットの依存関係 (ブロックと非ブロック) を追加することを目的としている。あと、おまけで役に立つのかどうか分からないけど、graphviz でグラフ化したレポートも出せるらしい。

このプラグインを拡張することも考えたけど、チケットの依存関係と関連は競合しないし、目的が異なるものを一緒にする煩雑さもあるので新規に作ることにした。このプラグインのコードを読みながら TracDev – The Trac Project のドキュメントをあわせたら雰囲気が分かった。

Trac の Component の拡張は、メタクラスの代わりに implemtns メソッドに任意のインターフェースクラスを定義する。Python の __metaclass__ は1つのクラス定義しか受け取れない。たぶんインターフェースの多重継承っぽいことをメタクラスでやりたいから implements メソッドを定義している。

以前 euroPython へ行ったときに mitsuhiko が型オブジェクトを返すファクトリ関数を使った implements メソッドを紹介していたことを思い出した *1プラグインの仕組みはこうやって実装するのかと興味深かった。

今週の 10% ルールはこの作業にしとこう。