ãªãã§ïŒ
JIRA ã ConfluenceããŸãã¯ä»ã®ã¢ãã©ã·ã¢ã³è£œåã®ããã£ããã£ã³ã°ãã®åé¡ã«èå³ãæã£ãããšã®ãã人ãªã誰ã§ãããããã®ç®çã®ããã®ã¢ãã©ã·ã¢ã³SDKãããããšãç¥ã£ãŠããŸãã
ãããŠããã®SDKãå°ãªããšã1åæãäžãã人ã¯ãç¹ã«çã®éãå°ãå€ãåå¿ãããªãå Žåãããããã¹ãŠã«åãçµãã®ã«ã©ãã ãã®æéãšå°ããªç°è²ã®ããã¯ã¹ãè²»ããã¹ãããæ³åããŸãã
éèŠãªãããžã§ã¯ãã®äœæ¥ã®æçæã§ãå£æ» çãªæéäžè¶³ã§ã顧客ã®1人ãConfluenceã®å°ããªãã®ããã蟌ãããJIRAã®ãªã³ã¯ãé衚瀺ã«ããããã«èŠæ±ãããšããç¹ã«å€±æããŸãã ãããŠãã¯ã©ã€ã¢ã³ãã¯ã圌ããæ°åã害ããç¿æ £ãæã£ãŠãããã®ãåŸ ã€ããã«æ±ããããªããã°ãªããŸããã ãããŠãã¯ã©ã€ã¢ã³ãã¯ãã°ãã°æ®å¿µãªããäœãå©ããããªãå°ä»»ã®ããã°ã©ããŒãæã£ãŠãããšããäºå®ã«ãã£ãŠåé¡ã¯æªåããŸãã ã¢ãã©ã·ã¢ã³è£œåã®ãã©ã°ã€ã³ã®éçºã«é¢ããç¥èããªããæ°æ¥ã§è§£æ±ºããŸããã
ã©ããããã¢ãã©ã·ã¢ã³ã®äººãã¡ããããç解ããŠããããã Speakeasyãã¯ãããžãŒããŠãŒã¶ãŒãšç®¡çè ã«æ瀺ããŸããã æè¡èªäœã¯ãã¯ãæ°ãããã®ã§ã¯ãããŸãã-åæã®ããŒã¿çã®ãã¬ãŒã³ããŒã·ã§ã³ã¯ããã©ã°ã€ã³éçºè åãã®ç«¶äºã§ããCodegeist 2011ãšäžèŽããããã«ã¿ã€ãã³ã°ãåãããŸããããå®çšŒåã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããããšãæããŠãå€ããå°ãªããå®å®ããããŒãžã§ã³ãåºãŠããŠããããã§ãã
Speakeasyã¯ãAtlassian SDKãšã¯ç°ãªãããŠãŒã¶ãŒã«è¡šç€ºããããã®ã®ã¿ãã«ã¹ã¿ãã€ãºã§ããŸããJavaScriptãããŒã¯ã¢ããããŸãã¯ã¹ã¿ã€ã«ãè¿œå ããŠããŒãžãå€æŽããŸãã ãã ããããã¯SDKã䜿çšãããããã¯ããã«ç°¡åã§ãã Firefoxã¢ããªã³ã®Greasemonkeyã§ãåæ§ã®ããšãè¡ãããŸãããããã§ã¯1ã€ã®ãã©ãŠã¶ãŒã«éå®ãããããšã¯ãªãããŠãŒã¶ãŒãä»ã®ãã©ãŠã¶ãŒã«å ·äœçã«ã€ã³ã¹ããŒã«ããããšã匷å¶ããŸããã
誰ããããå¿ èŠãšããŸããïŒ
Speakeasyããã¹ãŠã®ãŠãŒã¶ãŒãJIRAãšConfluenceãã«ã¹ã¿ãã€ãºã§ããããã«ãããã¹ãã¯ãããžãŒãšåŒã¶ã®ã¯é åçã§ãããæããã«ããã¯å®å šã«çå®ã§ã¯ãããŸããã ã»ãšãã©ã®å ŽåïŒåžžã«ã§ã¯ãããŸãããïŒãåºæ¬çãªJavaScriptããã°ã©ãã³ã°ã¹ãã«ãšHTML + CSSã¬ã€ã¢ãŠããå¿ èŠã§ãã ãã ãããã®ããã«Atlassian SDKã®ããã¯ãèªãå¿ èŠã¯ãããŸããïŒ ãããŠãããã¯äžåéãè±èªã§äœçŸãã®èå³æ·±ãèå³ããããããŒãžã§ãã
ãããã£ãŠãSpeakeasyããå©çãåŸãããšãã§ãã人ã ã®éã§ãç§ã¯ã©ã³ã¯ä»ãããŸãã
- éçºè ãããã«ã¯Webéçºè ã ãããã®äººã ã¯ãè¿œå ã®ãã¬ãŒãã³ã°ãªãã§ã»ãšãã©ããã«ãSpeakeasyã䜿çšããŠæ¡åŒµæ©èœãäœæã§ããŸãã
- 管çè 管çè ã¯ãå€ãã®å Žåãããã°ã©ãã³ã°ã®æ¹æ³ãç¥ã£ãŠããããæ°ã«å ¥ãã®ãŠãŒã¶ãŒåãã«äœããã®æ¡åŒµãè¡ãããšãã§ããŸãã ãŸããSpeakeasyã䜿çšããå ŽåããŠãŒã¶ãŒèªèº«ãæ¡åŒµæ©èœã䜿çšãããã©ããã決å®ãããšèãããšãçžäºã«æä»çãªé¡ãã®éãæäœããããã®å€§ããªã¹ããŒã¹ãåŸãããŸãã
- éçºè ã®ãã¯ããããããŸãããSDKãç 究ããã®ã«2é±éããããããã«1ãæéå®éšãââè¡ããŸãããšãããã¬ãŒãºã®åŸããããŒãžã£ãŒã¯æ²ããããšã¯ãªããªããæ確ãªïŒãŸãã¯ã»ãŒããããªïŒè¯å¿ããã£ãŠãåŠã¶ããšã¯äœããããŸããïŒ ããã«ãããè¡ã£ãŠãã ããã芪æãªãïŒã
ãããŠããã«æŠãã«ïŒ
ã·ã³ãã«ã§äŸ¿å©ãªæ¡åŒµæ©èœããŒãããäœæããŸãããã ãã¹ãŠã®äŸã¯Confluence 3.5çšã§ãã ææ°ã®ããŒãžã§ã³4.0ã¯ãŸã 人ã ã«ããŸãæäŸãããŠããŸããã ãã ãã次ã®ã»ãšãã©ãã¹ãŠã4çªç®ã®ããŒãžã§ã³ã«é©ããŠããŸãã ãããã£ãŠãJIRAã®æ¡åŒµæ©èœã®éçºã«åºæ¬çãªéãã¯ãããŸããã
äŸ0ãããã¯ãŸã£ããäŸã§ã¯ãããŸãã-Speakeasyã®ã€ã³ã¹ããŒã«
ãŸãããµãŒããŒã«Speakeasyãã€ã³ã¹ããŒã«ããå¿ èŠãªæš©éãé åžãã管çè ãå¿ èŠã§ãã
Speakeasyã®ææ°ããŒãžã§ã³ã§ã¯ãªãã ãã©ã°ã€ã³äº€æããã³å¯Ÿå¿ããmavenãªããžããªã§é åžãããŸã ã
ãã©ã°ã€ã³ã®ã€ã³ã¹ããŒã«åŸãã©ã®ãŠãŒã¶ãŒã°ã«ãŒããæ¡åŒµæ©èœãäœæããæš©å©ãæã¡ãã©ã®ãŠãŒã¶ãŒã°ã«ãŒãããããã®æ¡åŒµæ©èœãèªåèªèº«ã«å«ããããšãã§ãããã決å®ããå¿ èŠããããŸãïŒç®¡ç-ãã©ã°ã€ã³-æ¢åã®ç®¡ç-Speakeasyãã©ã°ã€ã³-æ§æïŒã
ããã©ã«ãã§ã¯ã管çè ãSpeakeasyã«æ¡åŒµæ©èœãå«ããããšã¯èš±å¯ãããŠããªãããšã«æ³šæããŠãã ããã ããã¯æããã«ã»ãã¥ãªãã£äžã®çç±ã§è¡ãããŸãã ãã ãããã¹ãã·ã¹ãã ã§ã¯ãã管çè ã«æ¡åŒµæ©èœã®æå¹åãèš±å¯ãããèšå®ããªã³ã«ããããšãã§ããŸãã
äŸ1-å±¥æŽ
ãã®äŸã§ã¯ãããŒãžã®å±¥æŽãžã®ãªã³ã¯ãç®ç«ã€å Žæã«è¿œå ããŠãããããããŠã³ã¡ãã¥ãŒã§æ¯åãã®ããŒãžã®èåŸãã¯ããŒã«ããªãããã«ããŸãã
Speakeasyæ¡åŒµæ©èœã®ããããŒãžã«ç§»åããŸãã
[ã€ã³ã¹ããŒã«]ãªã³ã¯ãã¯ãªãã¯ãã衚瀺ããããã€ã¢ãã°ã§ãŠã£ã¶ãŒãã®äœ¿çšãéžæãããŠã£ã¶ãŒãèªäœã§ãæ¡åŒµæ©èœã®äžæã®èå¥åãååãããã³èª¬æãå ¥åããŸãã
ãã®åŸããã®ãããªããã©ã¡ãŒã¿ãŒããšæšæºã®ãã¹ãã³ã³ãã³ããå«ãæ¡åŒµæ©èœãäœæãããã€ã³ã¹ããŒã«ãããŸãã ã詳现-ç·šéããã¿ã³ã䜿çšãããšãã·ã³ãã«ã§äŸ¿å©ãªWebãšãã£ã¿ãŒã«ã¢ã¯ã»ã¹ã§ããæ¡åŒµæ©èœã®æ°è¡ãããã°ã©ã ã§ããŸãã
JavaScriptã®ã¡ã€ã³ããžãã¯ãå«ããå¿ èŠããããããmain.jsãã¡ã€ã«ã«èå³ããããŸãã
/** * @context page */ var $ = require('speakeasy/jquery').jQuery; $(document).ready(function() { var href = $('a#action-view-history-link').attr('href'); $('a#view-change-link').after(", <a href='"+ href +"'>view history</a>"); });
ãã®ãããªè¡ãæžãããšã¯ãJSãšjQueryãç¥ã£ãŠãã人ã«ãšã£ãŠã¯é£ããããšã§ã¯ãããŸããããJavaScriptã䜿ã£ãŠããªã人ã¯googleã䜿ã£ãŠåæ§ã®ã³ãŒããæžãããšãã§ããŸãã ãããšã¯å¥ã«ãã³ã¡ã³ãã«ã¯ã@context pageããšãããšã³ããªã®ã¿ãèšèŒããŸãã ãã®ã¹ã¯ãªãããå®è¡ããã³ã³ããã¹ãïŒèªã¿åããããŒãžã¿ã€ãïŒã瀺ããŸãã WikiããŒãžã«ã®ã¿èå³ãããããã®ããŒãžã§ã³ã³ããã¹ãã®ãªã¹ããèŠã€ããããšãã§ããŸã ã
çµæãšããŠåŸããããã®ã¯æ¬¡ã®ãšããã§ãã
äŸ2-æ å ±æäŸ
æšæºUIã§äœããå€æŽããããšã¯çŽ æŽãããããšã§ãããå€æŽãããUIã«æ°ããæ å ±ãå ¥åã§ãããšããã«è¯ãã§ãã
詳现ã«ã€ããŠã¯ãJavaScript / JQueryã®ãã¹ãŠã®æ©èœïŒRESTãSOAPãXML-RPCïŒã䜿çšã§ããŸãã 幞ããªããšã«ãConfluenceãšJIRAã«ã¯ãã®ãããªã€ã³ã¿ãŒãã§ã€ã¹ããããŸã ã
æãã·ã³ãã«ãªRESTã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠã¿ãŸãããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ãConfluenceããããŸããŸãªãšã³ãã£ãã£ã«é¢ããæ å ±ã®ã¿ãååŸã§ããŸãã ããŒãžãäœæããæ¥ä»ãèŠæ±ããŠãæåŸã®ç·šéã®æ¥ä»ã®æšªã«ããæšæºã®Confluenceã€ã³ã¿ãŒãã§ã€ã¹ã«ããŒãžãææ©çã«é 眮ããŸãã
ãã®å Žåã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
/** * @context page */ var $ = require('speakeasy/jquery').jQuery; $(document).ready(function() { var pageId = $('input#pageId').attr('value'); var serviceUrl = '/rest/prototype/1/content/' + pageId + '.json'; $.getJSON( serviceUrl, function(data) { $('li.page-metadata-modification-info a:first').after(" on " + data.createdDate.friendly); }); });
å€æŽãããUIã¯æ¬¡ã®ãšããã§ãã
ãªããªã ããŒãžã®èªã¿èŸŒã¿æã«ãã¹ãŠã®ã¹ã¯ãªãããæ©èœããããããŠãŒã¶ãŒã¯ãæ¥ä»ããªãçªç¶è¡šç€ºãããããªã©ã®ãã¡ãã€ããã«æ°ä»ããŸããã
äŸ3-æéå³å®
Speakeasyæ¡åŒµæ©èœã«ã¯ãã¢ãã©ã·ã¢ã³è£œååºæã®æ©èœãå«ãŸããŠããŸãã ãã®äžã«ã¯WebItemã§ã®äœæ¥ããããŸãã ç°¡åã«èšãã°ãããŒãžã®ã¡ãã¥ãŒé ç®ãæšæºé ç®ã®é£ã«è¿œå ããæ©äŒããããŸãã
ãããè¡ãã«ã¯ãæ¡åŒµæ©èœå ã«web-items.jsonãã¡ã€ã«ããããå¿ èŠãªã¡ãã¥ãŒé ç®ãèšè¿°ããŠããŸãã äŸã«çŽè¡ããŸãããïŒ
[ { "section" : "system.content.action/primary", "label" : "Revert", "url" : "", "cssName" : "stiltsoft-web-item", "weight" : 25 } ]
ããã«ããã[ããŒã«]ã¡ãã¥ãŒã«[å ã«æ»ã]ãšããæ°ããã¢ã€ãã ãäœæãããŸãã URLãã©ã¡ãŒã¿ãŒã¯å¿ èŠãªã¢ãã¬ã¹ã«èšå®ã§ããŸãããå°ãè€éã§URLãèšå®ãããJavaScriptã§ãã®ã¢ã€ãã ã«ããžãã¯ãè¿œå ããŸããïŒä»¥äžãåç §ïŒã
ã¢ã€ãã èªäœã¯åã®ããŒãžã®ãªããžã§ã³ã«ãã°ããããŒã«ããã¯ããããã«å¿ èŠã§ãããããã«å¿ããŠJavaScriptã³ãŒãã¯ãã®ãªããžã§ã³ã®æ°ãèšç®ããŸãã
/** * @context atl.general */ var $ = require('speakeasy/jquery').jQuery; $(document).ready(function() { var pageId = $('input#pageId').attr('value'); var revision = $("meta[name='page-version']").attr('content'); $('a.revert-web-item').attr('href','/pages/revertpagebacktoversion.action?pageId='+pageId+'&version='+(revision-1)); });
ãã®ã¢ã€ãã ã¯æ¬¡ã®ããã«ãªããŸãã
äŸ4-ã€ã³ã¿ã©ã¯ãã£ã
SpeakEasyéçºè ã¯ãæ人ãã¡ãçŸããã€ã³ã¿ãŒãã§ãŒã¹ãäœæããããšãå¿ããŸããã§ããã Speakeasyèªäœã«ã¯ãopenOnePanelDialogã¡ãœããã䜿çšããŠãConfluence / JIRAèªäœã®ã¹ã¿ã€ã«ã§çŸãããã€ã¢ãã°ãäœæããæ©èœãå«ãŸããŠããŸãã ããã¯ã³ãŒãã§ã©ã®ããã«èŠãããã§ãïŒ
/** * The main module * * @context atl.general */ var $ = require('speakeasy/jquery').jQuery; var dialog = require('speakeasy/dialog'); $(document).ready(function() { $('span#title-text').after("<span class='stiltsoft-source'><a href='#' id='stiltsoft-view-source'>View source</a></span>"); $('a#stiltsoft-view-source').click(function(){ var url=$('a#action-view-source-link').attr('href'); $.get(url,function(data){ dialog.openOnePanelDialog( { 'header':'Page source', 'content':$(data).find('div#content'), 'submitLabel':'OK', 'cancelClass':'stiltsoft-cancel', 'submit':function(dialog,callback){ callback.success(); } }); } ); return false; }); });
ãã®ã³ãŒãã¯ãããŒãžã¿ã€ãã«ã«[ãœãŒã¹ã®è¡šç€º]ãªã³ã¯ãè¿œå ããŸããå®éã«ã¯ãããŒãžã®ãœãŒã¹ã³ãŒããå«ãçŸãããã€ã¢ãã°ã衚瀺ãããŸãã CSSã䜿çšããæ¡åŒµæ©èœã«ã¯ãè¿œå ã®ãã€ã¢ãã°ãã¿ã³ãé衚瀺ã«ããéæ³ããŸã ãããŸããããããšãã°ãããã¯æãéèŠã§ã¯ãããŸããã
ãã®ãããªäœããããã¯ç»é¢äžã«èŠããŸãïŒ
1ã€ã®ãã€ã¢ãã°ã ãã§ã¯äžååãªå Žåã¯ã AUIã©ã€ãã©ãªïŒAtlassian User InterfaceïŒã䜿çšããå¿ èŠããããŸãã ããã¯ãAtlassian補åã®ã€ã³ã¿ãŒãã§ãŒã¹ãçµã¿ç«ãŠãåºæ¬çãªèŠçŽ ïŒãã€ã¢ãã°ããããã¢ãããããããããŠã³ã¡ãã¥ãŒãªã©ïŒããã¹ãŠå«ããå®å šã«ã¯ã©ã€ã¢ã³ãåŽã®JavaScriptã©ã€ãã©ãªã§ãã ãããã£ãŠãAUIã䜿çšããæ¡åŒµæ©èœã®å€èŠ³ã¯ãä»ã®ã€ã³ã¿ãŒãã§ã€ã¹ãšå€ãããŸããã
ãã®æè¡ã«ããã«ãçªå ¥ãããã«ã¯ã AUI Demo ã AUI Sandboxã«ã¢ã¯ã»ã¹ããŠãããã®èŠçŽ ãå°ãè©ŠããŠã¿ãããšããå§ãããŸãã
äŸ5-ããžãã¯
æãæ laãªäººã¯ãç¹å¥ãªFirefoxãã©ã°ã€ã³ïŒ ã«ã¢ããã·ã«åºã¥ããŠäœæãããïŒã䜿çšã§ããŸããããã«ãããããŒãžãèŠèŠçã«å€æŽããçµæã®å€æŽãSpeakEasyæ¡åŒµæ©èœã®åœ¢åŒã§ä¿åã§ããŸãã
ãããŠããã¡ãããäžåºŠèŠãã»ããããã§ãã éçºè ããã®ãããªïŒ
次ã¯ïŒ
Speakeasyãã¯ãããžãŒã¯é²åãç¶ããŠããŸãããèšããŸã§ããªããè¶ èªç¶çãªãã®ã¯ãããŸããã ãããã䟿å©ã§äŸ¿å©ãªæ¹æ³ããããŸãã Speakeasyãã¢ãã©ã·ã¢ã³è£œåã®ãæšæºããã¯ãããžãŒã«ãªããã©ããããŸãæšæºé ä¿¡ã«ãªããã©ããã¯ãã©ã€ã¿ãŒã®æ¡å€§ã®æéãšæŽ»åã瀺ããŠããŸãã ããããããã¯ä»æ¥ç§ãã¡ã®ç掻ãå°ã楜ã«ããããšã劚ããŸãã:)