Shibuya.trac.8
Transcript of Shibuya.trac.8
![Page 1: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/1.jpg)
Tracのソース読んでみたー
2010/10/01 Shibuya.trac 第8回勉強会
ゆかわ2010年9月30日木曜日
![Page 2: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/2.jpg)
自己紹介
ハンドルネーム:wyukawa(Wataru Yukawa)
ブログ:http://d.hatena.ne.jp/wyukawa
Twitter:http://twitter.com/wyukawa
メーカー系のなんちゃってSE ほとんどJavaしか知りません(汗
2010年9月30日木曜日
![Page 3: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/3.jpg)
アジェンダ
Tracプラグインの作り方
Tracのアーキテクチャ
Tracプラグインの処理フロー
まとめ
2010年9月30日木曜日
![Page 4: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/4.jpg)
Tracプラグインの作り方
Componentクラスを継承
拡張ポイントをimplements
拡張ポイントのメソッドを実装
2010年9月30日木曜日
![Page 5: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/5.jpg)
HelloWorldプラグインclass HelloWorldPlugin(Component): implements(INavigationContributor)
# INavigationContributor methods def get_active_navigation_item(self, req): return 'helloworld' def get_navigation_items(self, req): yield ('mainnav', 'helloworld', html.A('Hello world', href= req.href.helloworld
2010年9月30日木曜日
![Page 6: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/6.jpg)
Tracのアーキテクチャ拡張が容易なプラグインアーキテクチャプラグインはコンポーネントからなる。Trac自身もプラグインとして実装されている。例:AdminModule, TicketModule, WikiModule, ...その点Eclipseに似ている。
2010年9月30日木曜日
![Page 7: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/7.jpg)
で、それを実現しているのは
2010年9月30日木曜日
![Page 8: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/8.jpg)
一応説明(翻訳)すると、ComponentクラスはシングルトンメタクラスはComponentMeta
ComponentManagerがComponentのライフサイクルを管理
拡張ポイントはInterfaceを継承
ExtensionPointで拡張ポイントを宣言
2010年9月30日木曜日
![Page 9: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/9.jpg)
ま、よくわかりませんw
http://www.flickr.com/photos/merec0/655780644
2010年9月30日木曜日
![Page 10: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/10.jpg)
Tracプラグインの処理フロー例はTicketSubmitPolicyPluginの管理画面からのリンク
IAdminPanelProviderを宣言しているのはAdminModule
TicketSubmitPolicyPluginはIAdminPanelProviderをimplementsしている(実装するのは get_admin_panelsとrender_admin_panelメソッド)
2010年9月30日木曜日
![Page 11: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/11.jpg)
図にするとこんな感じ
AdminModule
TicketSubmitPolicyPlugin
IAdminPanelProvider(get_admin_panels,
render_admin_panel)
2010年9月30日木曜日
![Page 12: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/12.jpg)
class AdminModule(Component):...略... panel_providers = ExtensionPoint(IAdminPanelProvider)...略... for provider in self.panel_providers: p = list(provider.get_admin_panels(req) or [])
class TicketSubmitPolicyPlugin(Component):...略... implements(IAdminPanelProvider,...) ...略... def get_admin_panels(self, req):...略... if req.perm.has_permission('TRAC_ADMIN'): yield ('ticket', u'チケットシステム', 'policy', u'サブミットポリシー')
ソースはこんな感じ
2010年9月30日木曜日
![Page 13: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/13.jpg)
まとめ
プラグインアーキテクチャとしてTracのアーキテクチャは面白い
が、しかし、コア部分はメタクラス全開なのでよくわかりません。。。orz
2010年9月30日木曜日
![Page 14: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/14.jpg)
結論として
に相当するような「Trac プラグイン開発 徹底攻略」きぼんぬ!
2010年9月30日木曜日
![Page 15: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/15.jpg)
情報源本家http://trac.edgewall.org/wiki/TracDev/PluginDevelopment
http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture
技術トレンディセミナー フレームワークとしてのTrachttp://www.slideshare.net/terada/trac-1340355
2010年9月30日木曜日
![Page 16: Shibuya.trac.8](https://reader035.fdocuments.in/reader035/viewer/2022062418/555a27a5d8b42ab3088b4b4e/html5/thumbnails/16.jpg)
ご清聴ありがとうございました。_m( )m_
2010年9月30日木曜日