ããã«ã¡ã¯ ãã®èšäºã¯ãSailfish OSã¢ãã€ã«ãã©ãããã©ãŒã åãã®ã¢ããªã±ãŒã·ã§ã³éçºã«é¢ããäžé£ã®èšäºã®ç¶ãã§ãã ä»åã¯ãSailfishã¢ããªã±ãŒã·ã§ã³ã§ãã£ãŒããæäœããããšã«çŠç¹ãåœãŠãŸãã ã©ã€ãã©ãªã®æ€çŽ¢ãšæ¥ç¶ãããã³æ°åŠé¢æ°ã®ã°ã©ãã®è¡šç€ºæ¹æ³ã«ã€ããŠèª¬æããŸãã ææ¡ããããœãªã¥ãŒã·ã§ã³ã¯Saiflsh OSãã©ãããã©ãŒã ã«éå®ããããã®ã§ã¯ãªããäžè¬ã«QtQuickã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããããšã«æ³šæããŠãã ããã
ã¿ã¹ã¯ã®èª¬æ
Sailfish OSãå®è¡ããŠããããã€ã¹ã§äœæ¥ãããšã³ãžãã¢ãåŠçãåŠç«¥ã®ããŒãºãæºããèšç®æ©ã¢ããªã±ãŒã·ã§ã³ãäœæããããšã«ããŸããã ã¢ããªã±ãŒã·ã§ã³ã«ã¯æ¬¡ã®ã³ã³ããŒãã³ããå«ãŸããŠããå¿
èŠããããŸãã
- ã·ã³ãã«ãªæäœãšé«åºŠãªæäœã®2ã€ã®æäœã¢ãŒããåããé»åã
- è¡åã®å ç®ãä¹ç®ãã©ã³ã¯ãšè¡ååŒã®èšç®ãããã³è»¢çœ®ããµããŒãããè¡åã®èšç®ã®ãµãã·ã¹ãã ã
- æ¬¡ã®æ¹çšåŒãè§£ããããã¯ïŒæå€§4床ã®çޝ乿¹çšåŒãææ°æ¹çšåŒããã³äžè§æ¹çšåŒã
æ¹çšåŒãè§£ãããã®ãããã¯ã«ãã°ã©ãã衚瀺ããæ©èœã远å ããããšã«ããŸããã QMLã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ã¯ãŒã¯å
ã§ãã®åé¡ã解決ããã«ã¯ã次ã®ã¢ãããŒããé©çšã§ããŸãã
- QuickQanavaãªã©ã®å€éšã©ã€ãã©ãªãæ¥ç¶ããŸãã
- QML Canvasãªããžã§ã¯ãã䜿çšããŸãã
- C ++ã§ç¬èªã®ã³ã³ããŒãã³ããå®è£
ããã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããŸãã
QuickQanavaã©ã€ãã©ãªã¯ãSailfish OSãã©ãããã©ãŒã ã§ã¯ãŸã å©çšã§ããªãQt 5.8ã§åäœããŸãã QML Canvasãªããžã§ã¯ãã䜿çšãããšãé«ã¬ãã«ã®JavaScriptèšèªã䜿çšã§ããW3Cæšæºãšäºææ§ã®ããAPIãæäŸããŸããããã«ããããµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšã§ããå¯èœæ§ãåºãããŸãã
ã°ã©ãã®è¡šç€ºã«ã¯æ·±å»ãªèšç®ã¯å¿
èŠãªããã·ãŒã³ãé »ç¹ã«åæç»ããå¿
èŠããªããããå€éšJavaScriptã©ã€ãã©ãªã䜿çšããŠãããžã§ã¯ãã§QML Canvasã䜿çšããããšã«ããŸããã
QML Canvasããã³Context2D
QML CanvasèŠçŽ ã䜿çšãããšãçŽç·ãæ²ç·ãã·ã³ãã«ã§è€éãªåœ¢ç¶ãã°ã©ãã£ãã¯ã¹ãã°ã©ãã£ãã¯ç»åãžã®ãªã³ã¯ãæç»ã§ããŸãã ãŸããããã¹ããè²ã圱ãã°ã©ããŒã·ã§ã³ããã¿ãŒã³ãæç»ãããããã¯ã»ã«ã¬ãã«ã§ç»åãæäœãããããããšãã§ããŸãã
Canvasåºåã¯ãç»é¢ã«è¡šç€ºãããã»ããç»åãã¡ã€ã«ãšããŠä¿åããããURLã«ã·ãªã¢ã«åããããšãã§ããŸãã
ãã£ã³ãã¹ã®ã¬ã³ããªã³ã°ã¯ãéåžžã¯
ãã€ã³ãä¿¡å·ã®åŠçã®çµæãšããŠã
Context2Dãªããžã§ã¯ãã䜿çšããŠ
å®è¡ãããŸãã ãªããžã§ã¯ãèªäœã¯ã
HTML Canvas 2D Context仿§ãå®è£
ã
ãŸã ãããã¯ã
HTML Canvasãªããžã§ã¯ãã«ãå®è£
ãããŠãããQMLã¢ããªã±ãŒã·ã§ã³ã®Webãã©ãŠã¶ãŒã§äœ¿çšããããã«èšèšãããJavaScriptã©ã€ãã©ãªã䜿çšã§ããŸãã çŸåšã3次å
ã³ã³ããã¹ãã¯
Context2Dãªããžã§ã¯ãã§ã¯ãµããŒããããŠããŸããã
QML Canvasãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããæãåçŽãªäŸãèããŠã¿ãŸãããã
import QtQuick 2.0 Canvas { id: mycanvas width: 100 height: 200 onPaint: { var ctx = getContext("2d"); ctx.fillStyle = Qt.rgba(1, 0, 0, 1); ctx.fillRect(0, 0, width, height); } }
äŸã®æåã®è¡ã«ã¯
QtQuick 2.0ãå«ãŸããŠããŸããæ¬¡ã«
CanvasèŠçŽ ãå®çŸ©ãã
id ã
widthããã³
heightãã©ã¡ãŒã¿ãŒãèšå®ããŸãã èŠçŽ èªäœã«ã¯èŠçŽ ããªããä»»æã®ã¹ããŒã¹ãå æã§ãããšããäºå®ã«ãããå¹
ãšé«ããæç€ºçã«èšå®ããããèŠçŽ ã®ç«¯ãããŒãžäžã®ä»ã®èŠçŽ ãšæ¥ç¶ããããšã«ããã寞æ³ãæå®ããå¿
èŠããããŸãã ãµã€ãºãæå®ããªãå Žåãã¢ã€ãã ã¯è¡šç€ºãããŸããã ãã®äŸã§ã¯ãæåã®ã¢ãããŒãã䜿çšããŸãã
ãã£ã³ãã¹èŠçŽ ãã¢ã¯ãã£ãã«ãªããšã
ãã€ã³ãä¿¡å·ãããªã¬ãŒãããŸãã ãã®åŠçã¯
onPaintã¡ãœããã§è¡ãããŸãã ãã®äžã§ãã³ã³ããã¹ããååŸããŠè¡šç€ºãã
ctx倿°ã«ä¿åããŸãã
getContextã®ãã©ã¡ãŒã¿ãŒã®è©³çްãªèª¬æã¯ãããšãã°
ããã«ãããŸã ã Qtã¯2次å
ã®è¡šç€ºã³ã³ããã¹ããžã®ã¢ã¯ã»ã¹ã®ã¿ãæäŸããããšã«æ³šæããŠãã ããã
次ã«ãã³ã³ããã¹ãã䜿çšããŠé·æ¹åœ¢ã衚瀺ããŸãã
ctx.fillStyleã¯ãé·æ¹åœ¢ã®å¡ãã€ã¶ãè²ãèšå®ããŸãã æåã®3ã€ã®ãã©ã¡ãŒã¿ãŒã¯ãèµ€ãç·ãéã®æåã«ãã£ãŠè²ã決å®ãã4çªç®ã®æåã¯éæåºŠã決å®ããŸãã
ctx.fillRectïŒxãyãwãhïŒã¯ã
xãš
yãéå§ã®åº§æšãšããŠã
wãš
hãå¹
ãšé«ããšããŠäœ¿çšããŠæç»ããŸãã
æç»ã«äœ¿çšã§ããã³ã³ããã¹ãã¡ãœããã®äžèЧã¯
ãå
¬åŒããã¥ã¡ã³ãã«èšèŒã
ããŠããŸã ã ãã®èšäºã®ãã¹ãŠã®æ¹æ³ãæ€èšããããã§ã¯ãããŸãããç»åã®åº§æšã¯å·Šäžé
ããå§ãŸãããšã«æ³šæããŠãã ããã OX軞ã¯å³ã«äŒžã³ãOY軞ã¯äžäžããŸãã
å€éšã©ã€ãã©ãªã䜿çšãã
ãã¡ãããåã«èšå®ããã¿ã¹ã¯ã¯ã
Context2D APIã䜿çšããŠçŽæ¥è§£æ±ºã§ããŸããããå€éšã©ã€ãã©ãªã䜿çšããå¯èœæ§ãæ€èšããããšã«ããŸããã ãã®APIã¯ãã¹ãŠã®äž»èŠãªãã©ãŠã¶ãŒã§äœ¿çšã§ãããããSailfish OSã®éçºè
ã¯ãã¿ãŒã²ããæ©èœã®å®è£
ãä¿é²ãã倿°ã®æ¢åã®ã©ã€ãã©ãªãŒã䜿çšã§ããŸãã ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã
D3.jsã©ã€ãã©ãªã䜿çšããããšã«ããŸããã
ã·ã§ãŒãã¬ãã¥ãŒD3.js
D3.jsã¯ãããŒã¿ãåŠçããã³èŠèŠåããããã®JavaScriptã©ã€ãã©ãªã§ãã çŸåšãD3.jsã¯ãã°ã©ãã£ã«ã«ããŒã¿åŠçããã³ããããçš®é¡ã®ãã£ãŒããšã°ã©ãã®äœæã«äœ¿çšãããæã人æ°ã®ãããã¬ãŒã ã¯ãŒã¯ã®1ã€ã§ãã
D3.jsèªäœã¯ãå€ãã®åé¡ã解決ã§ããå€§èŠæš¡ãªãããžã§ã¯ãã§ããããããã®ã©ã€ãã©ãªãHTMLã¢ããªã±ãŒã·ã§ã³ã«çµ±åããå¯äžã®æ¹æ³ã¯ãããŸããã ããªãåçŽãªçµ±åã¢ãããŒãã䜿çšããŸããããä»ã®ã¢ããªã±ãŒã·ã§ã³ã§ãããŸãæ©èœããã¯ãã§ãã
QMLã¢ããªã±ãŒã·ã§ã³ã§ã®D3.jsã®çµ±å
æåã«ãã©ã€ãã©ãªãããŠã³ããŒãããŠãã¿ãŒã²ããããã€ã¹ã§äœ¿çšå¯èœã«ããå¿
èŠããããŸãã Sailfish OSäžã®QMLã³ã³ããŒãã³ãã¯ãªãœãŒã¹ã«ã³ã³ãã€ã«ããããåå¥ã®ãã¡ã€ã«ãšããŠé
ä¿¡ãããããšã«æ³šæããŠãã ããã ãã®çµæããã¹ãŠã®JavaScriptäŸåé¢ä¿ãåå¥ã®ãã¡ã€ã«ãšããŠæãŸãããã®ã«ãªããŸãã
D3.jsã¯ãd3.jsãšåŒã°ããå¥ã®ãã¡ã€ã«ãšãd3.min.jsã«ããçž®å°ããŒãžã§ã³ã§æäŸãããŸãã éçºäžãçž®å°çã¯QMLãšã³ãžã³ã«ãã£ãŠæ£ããããŒããããªãããšãããã£ããããå®å
šçã䜿çšããããšããå§ãããŸã-èŠæ
ãªãã§åäœããŸãã
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããžã§ã¯ãã®qml / pagesãã£ã¬ã¯ããªã«d3.jsãã¡ã€ã«ãé
眮ããŸããã ãã®ãã£ã¬ã¯ããªã®å
容å
šäœãã¿ãŒã²ããããã€ã¹ã«ã³ããŒãããããããã¡ã€ã«ã¯ãããžã§ã¯ããšãšãã«ã³ããŒãããŸãã ãã®ãã¡ã€ã«ã¯QMLãããžã§ã¯ãã®
DISTFILESãªã¹ãã«ãå«ãŸããŠãããããQtCreatorã¯ä»ã®ãã¡ã€ã«ã®ãªã¹ãã«è¡šç€ºããŸãã
ã°ã©ãã衚瀺ããã³ã³ããŒãã³ããäœæãã
ã¢ããªã±ãŒã·ã§ã³ã®äžéšãšããŠã3ã€ã®é¢æ°ã®ã°ã©ãã2次å
å¹³é¢ã«è¡šç€ºããå¿
èŠããããŸãã èæ
®ããããã¹ãŠã®é¢æ°ã¯ã暪座æšã®å€ã«äŸåããŸãã ã»ã°ã¡ã³ãã«å®æ§çã«è¡šç€ºããããã«ãçŸåšè¡šç€ºãããŠããã»ã°ã¡ã³ãã®äžéå€ãèšç®ããããšã«ããŸããã
æ§ç¯ã®äžè¬çãªããžãã¯ãå¥ã®
Plotã³ã³ããŒãã³ãã«å
¥ããŸãã æ¬¡ã®æ©èœãæäŸããŸãã
- ãã£ãã·ã§ã³ä»ãã®ã°ãªããã衚瀺ããŸãã
- ãžã§ã¹ãã£ãŒã䜿çšããŠè¡šç€ºããã座æšã倿ŽããŸãã
- èšç®å€ã«ããã°ã©ã衚瀺ã 䜿çšå Žæã«ç¹å®ã®æ©èœãå®è£
ããå¿
èŠããããŸããåºæ¬ã¿ã€ãã¯ãã®æ©èœãæäŸããŸããã
ç¹å®ã®äœ¿çšå Žæã§ã¯ãã°ã©ãã®å€ãèšç®ãã颿°ã1ã€ã ãæ±ºå®ããå¿
èŠããããŸãã
åºæ¬ã³ã³ããŒãã³ãã®æ§é ãèæ
®ããŠãã ããã
import QtQuick 2.0 import "d3.js" as D3 Canvas {
ãŸããå¿
èŠãªã©ã€ãã©ãªãæ¥ç¶ããŸããQtQuickã³ã³ããŒãã³ãã®ã»ãããšãD3.jsã©ã€ãã©ãªèªäœã§ãã JavaScriptãã¡ã€ã«ã®æ¥ç¶ã¯ãä»ã®QMLãã¡ã€ã«ã®æ¥ç¶ã«äŒŒãŠããŸãã ãã®åé¡ã解決ããããã«ã
importããŒã¯ãŒãã䜿çšãããŸãã
JavaScriptãã¡ã€ã«ã®æ¥ç¶ã«é¢ããå®å
šãªæ
å ±ã¯ã
å
¬åŒããã¥ã¡ã³ãã«èšèŒãããŠã
ãŸã ã ã€ã³ããŒãæã®äž»ãªåŽé¢ã¯ããã®ããã¥ã¡ã³ãã§å®çŸ©ãããŠãããã¹ãŠã®é¢æ°ãå©çšã§ããååãæå®ããããšã§ãã ã³ãŒãã§ã¯ããã®ãªããžã§ã¯ãã®ååã
D3ã«ä»ããŸãã ã
Plotã®ã«ãŒãèŠçŽ ã¯
Canvasã§ãã ããã®äžã«æ
å ±ã衚瀺ããŸãã ãã®èŠçŽ ã§èšç®ãšãžã§ã¹ãã£ãŒåŠçãå®è¡ããããã«ãäžé£ã®ããããã£ãšé¢æ°ãå®çŸ©ããŸããã éèŠãªã®ã¯
onPaint-ç»åã¬ã³ããªã³ã°ã€ãã³ãã®ãã³ãã©ãŒã§ãã
Canvasã«é¢ããåèŠçŽ ã¯
Itemã§ã ãããã¯ã
PinchAreaããã³
MouseAreaãªããžã§ã¯ãã®åãªãã³ã³ãã
ã§ã ã ãããã®ãªããžã§ã¯ãã¯ããã³ããžã§ã¹ãã£ãåŠçããè¿äŒŒã®ã¬ãã«ãå¶åŸ¡ãããã©ãã°ããŠåº§æšè»žã®äœçœ®ãå¶åŸ¡ããããã«è¿œå ãããŸããã ãžã§ã¹ãã£ãŒããŒã¿ãã³ãã©ãŒã¯ãã°ã©ãã®æç»ã«äœ¿çšããã座æšãæŽæ°ããŸãã
衚瀺ããã»ã¹ã®æŠèŠ
ã¬ã³ããªã³ã°ããã»ã¹ã¯æ®µéçã«èæ
®ãããŸãããäžæ¹ã§ãã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒããèŠãŠã詳现ãèªåã§çè§£ã§ããããã§ãã åæã«ãå°é£ãåŒãèµ·ããå¯èœæ§ã®ããéèŠãªãã€ã³ãã«æ³šç®ããŸãã
äž»èŠãªèŠçŽ ã§ãã座æšã°ãªãããšé¢æ°ã°ã©ãã衚瀺ããã«ã¯ã
d3.line颿°ã䜿çšããŸãã ãã®é¢æ°ã䜿çšãããšãä»»æã®ããªã©ã€ã³ãšçŽç·ã衚瀺ã§ããŸãã 颿°ãžã®å
¥åã¯ããŒã¿ã®é
åã§ãã ããã䜿çšããã«ã¯ã次ã®ãã©ã¡ãŒã¿ãŒãæ§æããå¿
èŠããããŸãã
- é
åèŠçŽ ãã瞊座æšãšæšªåº§æšãååŸããããã«ãžã§ãã¬ãŒã¿ãŒãæ§æããŸãã
- ç·ãçžäºã«æ¥ç¶ããæ¹æ³ã瀺ããŸãã
- æ
å ±ã衚瀺ããã°ã©ãã£ã«ã«ã³ã³ããã¹ãã瀺ããŸãã
ã°ã©ãç·ã®ç»åã圢æããäŸãèããŠã¿ãŸãããã
var context = plot.getContext('2d'); var xScale = d3.scaleLinear() .range([leftMargin, width]) .domain([minX, maxX]); var yScale = d3.scaleLinear() .range([height - bottomMargin, 0]) .domain([minY, maxY]); var line = d3.line().x(function (d) { return xScale(d[0]); }).y(function (d) { return yScale(d[1]); }).curve(d3.curveNatural).context(context);
ãŸããã¹ã±ãŒã«
d3.scaleLinearãèšå®ããŸããããã«ãããã°ã©ãã®ã¹ã±ãŒãªã³ã°ã®äœæ¥ãç°¡çŽ åãããŸãã
rangeïŒïŒã¡ãœããã®åŒã³åºãã§ç»åã®ç©ççãªå¢çã瀺ãã
domainïŒïŒã¡ãœããã®åŒã³åºãã§ã°ã©ãã®å¢çã瀺ãã ãã§ååã§ãã æšªåº§æšã瞊座æšã®ã¹ã±ãŒã«ã圢æããããããã
xScaleããã³
yScale倿°ã«æžã蟌ãŸããŸãã
次ã«ãã°ã©ãå€ã®é
åããã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããç·ã«ã€ããŠèª¬æããŸãã ã¡ãœããåŒã³åºã
xïŒïŒã§ãé
åã®æåã®èŠçŽ ãæœåºãã
xScaleã¹ã±ãŒã«ã䜿çšããŠå€æãã颿°
ãæž¡ããŸãã åæ§ã®é¢æ°ãåŒæ°ãšããŠ
yïŒïŒã¡ãœããåŒã³åºãã«æž¡ãããé
åã®2çªç®ã®èŠçŽ ã®åŒã³åºãã®ã¿ã«æž¡ãããŸãã æ¬¡ã«ãèŠçŽ éã®éä¿¡æ¹æ³ãèšå®ããŸãããã®å Žåã¯
d3.curveNaturalã§ãã D3.jsã¯ãæ²ç·ãæ§ç¯ããããã®èšå€§ãªæ°ã®ãªãã·ã§ã³ããµããŒãããŠã
ãŸã ããããã«ã€ããŠã¯ã
å
¬åŒããã¥ã¡ã³ãã§èªãããšãã§ã
ãŸã ã ç·ã®äœæã®æåŸã«ãç»åã®ã°ã©ãã£ãã¯ã³ã³ããã¹ãã«é¢é£ä»ããŸãã
ç·ãæãã«ã¯ãäœæããç·ãåŒã³åºããŠãå¿
èŠãªåº§æšã®é
åãæž¡ããŸãã
line([[1, 2], [2, 15], [3, 8], [4, 6]])
åæ§ã«ã軞ã衚瀺ããããã«ç·ãæãããŸãã
åæç»ã®éå§æã«ãã£ã³ãã¹ãå®å
šã«ã¯ãªã¢ãããããšã«æ³šæããŠãã ããã ããã¯ãåã®ç»åãçŸåšã®ç¶æ
ã®è¡šç€ºã«å¹²æžããªãããã«ããããã«å¿
èŠã§ãã ãŸãããŠãŒã¶ãŒãã°ã©ããæ¡å€§ããããèŠçŽ ã®è¡šç€ºã®å¢çã倿Žããããšãæ°ããç»åã衚瀺ãããŸãã
ããããã³ã³ããŒãã³ãã®äœ¿çš
ãã®ã³ã³ããŒãã³ãã䜿çšããŠã颿°ããšã«3ã€ã®ã°ã©ãã®è¡šç€ºãå®è£
ããŸããã ãã£ãŒãããšã«ãããŒãžãäœæããŸããã ãããã®ããŒãžã§ã¯ãå€ãèšç®ãããŠã°ã©ãã衚瀺ãããŸãã
åãã£ãŒãã®äžè¬çãªæ§é ã以äžã«ç€ºããŸãã
Page { property var elem property var border property var rootLine id: page backNavigation: plot.controlNavigation() Plot { id: plot anchors.margins: Theme.horizontalPageMargin width: parent.width height: parent.height function drawPlot(line) { line(getPoints()); } function getPoints() {
ã«ãŒãèŠçŽ ã¯ãã°ã©ãã衚瀺ããããã«ã¹ã¿ãã¯ã«ããã·ã¥ãããããŒãžã§ãã ãã©ã¡ãŒã¿ãŒã¯ãæ¹çšåŒã®ä¿æ°ãã°ã©ãã衚瀺ããããã®åæå¢çãããã³é¢æ°ã®æ ¹ã®äœçœ®ã瀺ãç·ã§ãã
次ã«ããŠãŒã¶ãŒããã£ãŒããæäœããå Žåãããã²ãŒã·ã§ã³ããªãã«ããŸãã ããã«ããããžã§ã¹ãã£ã誀ã£ãŠããŒãžããæ»ãã®ãé²ããŸãã
ããŒãžäžã®å¯äžã®èŠçŽ ã¯
PlotèŠçŽ ã§ãã 䜿çšå¯èœãªãã¹ãŠã®ã¹ããŒã¹ãå æããããšãæç€ºçã«ç€ºããã°ã©ãã®è¡šç€ºã«äœ¿çšãããŸãã
drawPlotã¡ãœãããå®çŸ©ããŸãã ãã®ã¡ãœããã¯ã颿°ãå衚瀺ããå¿
èŠããããã³ã«åŒã³åºãããŸãã
åŒæ°ãšããŠãäžã«ç€ºãããã«ã
PlotèŠçŽ ã§æ§æãããè¡ãæž¡ãããŸãã ãããåŒã³åºããŠã
getPointsïŒïŒã¡ãœããã®çµæãæž¡ããŸãã æåŸã®æ¹æ³ã¯ãåã
ã®ãã£ãŒãã«åºæã®ãã€ã³ãã®ã»ããã圢æããŸãã
ãããªãã¯ã¹èšç®ã¢ããª
ãã®æ
å ±ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã«åæ§ã®æ©èœãç°¡åã«å®è£
ã§ããããšãé¡ã£ãŠããŸãã ãŸããMatrix Calculatorã¢ããªã±ãŒã·ã§ã³ã®é¢æ°ã®å®è£
ã«ã€ããŠè©³ããã¯ã
OpenRepos.netãªããžããªããã€ã³ã¹ããŒã«ãããã
BitBucketãªããžããªã§å©çšå¯èœãªãœãŒã¹ã³ãŒãã§ã©ã€ãã©ãªãæäœããããšã
ã芧ãã ãã ã
ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã¯ãªãŒã³ã·ã§ããã以äžã«ç€ºããŸãã
UPD ïŒã¢ããªã±ãŒã·ã§ã³ã®ã¹ã¯ãªãŒã³ã·ã§ããã远å ããŸããã