Swarmã©ã€ãã©ãªã䜿çšãããšã1ãæéã«Swarmã䜿çšããªãã£ãå Žåãããé±æ«ã«å€ãã®ããšãã§ããŸãã ããã«éèŠãªããšã¯ããããªãã§ã¯ã§ããªãã£ãããšãå®è¡ã§ããããšã§ãã ãã®åæã©ã€ãã©ãªã¯ç¡æã§æäŸããŠããŸãã

æ¬æ¥ãSwarm + React㧠èšè¿°ãããåå¿æ§HolyGrail -on-steroidsã¢ããªã±ãŒã·ã§ã³ã§ããTodoMVC ++ãæçš¿ããŸãã 以äžã¯ãã¢ããªã±ãŒã·ã§ã³ã§ç€ºãããŠããæ©èœã®ãªã¹ãã§ãã
- ã€ã³ã¹ã¿ã³ãããŒã-ããŒãžã¯ãµãŒããŒäžã§ã¬ã³ããªã³ã°ãããå§çž®ãããHTMLãšããŠã¯ã©ã€ã¢ã³ãã«å±ããŸãã 次ã«ãã³ãŒããšããŒã¿ãååŸãããããŒãžã掻æ°ã¥ããŸãã åäœäžã®å圢JavaScript ã
- WebStorageã®ããŒã¿ãã£ãã·ã¥-äœæ¥çµæã倱ãããšãªããèªã¿èŸŒã¿ãé«éåãããªãã©ã€ã³ã§äœæ¥ããããšãã§ããŸãã
- ãªãã©ã€ã³äœæ¥-ããŒã¿ã¯ãã§ã«æ確ã«ãªã£ãŠããŸããããã£ãã·ã¥ãããã§ã¹ããè¿œå ãããšãHTML5ã¢ããªã±ãŒã·ã§ã³ã¯ã€ã³ã¿ãŒããããªãã§ããŒãããŠåäœã§ããŸãïŒ
- ãªã¢ã«ã¿ã€ã åæ-ããã€ãã®ããã¯ããŒã¯ãéãïŒWebStorageãä»ããåæïŒããæºåž¯é»è©±/ iPad /ä»ã®ãã©ãŠã¶ãŒïŒWebSocketïŒã§åãããŒãžãéããŸãã
- è€éã«åæãããããŒã¿æ§é ïŒã¯ããããã¯complex-syn-chro-ni-zi-ru-e-we-eã§ãïŒã
äžè¬ã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãåçŽãªïŒããŒã«ã«ïŒMVCã¢ããªã±ãŒã·ã§ã³ãšããŠããããã¯ãŒã¯ãžã®åç §ãªãã§èšè¿°ãããŸãã åæãšãã£ãã·ã³ã°ã¯Swarmã©ã€ãã©ãªã¬ãã«ã§å®å šã«è¡ãããã¢ããªã±ãŒã·ã§ã³ã¯ã¢ãã«ã®ããŒã«ã«ããã¯ããŒã³ã®ãããªãªããžã§ã¯ãã§åäœããŸãã
ãã®ãããããã«ã¢ããªã±ãŒã·ã§ã³èªäœããããŸãïŒ ppyr.usã
ã³ãŒãã¯æ¬¡ã®ãšããã§ããgithub.com / gritzko / todomvc-swarm
ã¢ããªã±ãŒã·ã§ã³ãšã©ã€ãã©ãªã®è©³çŽ°ãªåæã¯æ¬¡ã®è³æã«ãããŸãããçŸåšãã¬ããªã«ãCRDTãããã³çè«çæ ¹æ ã«é¢ããå€ãã®æçŽããããŸãã
çŸåšãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ã§åæã匷ãæ±ããããŠããŸãã ã€ã³ã¿ãŒããã倧æã®ãµãŒããŒãšã³ãããŒã§ã¯ãåæãå¿ èŠãšããããŸããŸãªã¹ãã¬ãŒãžãšããŒã¿åŠçããŒã«ããŸããŸãå¢ããŠããŸãã çå®ã®æºãšããŠã®1ã€ã®å€§ããªããŒã¿ããŒã¹ã®ååã¯ãæ¡åŒµãå°é£ã§ãã ããããç§ãã¡ã¯äž»ã«ã¯ã©ã€ã¢ã³ãã«ã€ããŠè©±ããŠããã ä»æ¥ãäžè¬ãŠãŒã¶ãŒã¯å€ãã®ããã€ã¹ãæã£ãŠããŸãã ããŒãããœã³ã³ã®ç»é¢ã«è¡šç€ºãããããŒã¿ãiPhoneã®ç»é¢ã«è¡šç€ºãããããŒã¿ãšäžèŽããªãå ŽåããŠãŒã¶ãŒã¯åæºããŸãã ã¬ããªã«ã®åæã¯ã©ãã§ãå¿ èŠã§ãããããŒã¿åæã·ã¹ãã ïŒSDïŒã¯ããã«ããŒã¿ããŒã¹ãšåãæ¶è²»è²¡ã«ãªããšèããŠããŸãã
çŸåšã®è©³çŽ°ã¯ãæ¥çã®ãªãŒããŒã§ãããåæã®æ±ºå®ããäœæ¥ã®çš®é¡ã段éãŸã§ããå®äºããŠããªãããšã§ãã GDocsã¯ãªãã©ã€ã³ã§ã¯ãŸã£ããæ©èœãããGTalkãšSkypeã¯äœç³»çã«ãã£ããå±¥æŽããã¬ããªã«ã倱ããŸããEvernoteã¯ããŸããŸãªãã°ã§æåã§ãã ãããŠããããã¯ãªãŒããŒã§ãã äžè¬ã«ãåæã®åé¡ã¯é©ãã»ã©è€éã§å€é¢çã§ãã Evernoteããè©Šããã ããã EvernoteãããŒã«ã«ã¢ããªã±ãŒã·ã§ã³ã®å ŽåãåŠçã¯80/20ãµãã»ãããäœæã§ããŸãã 圌ãMySQLãšPHPãæã£ãŠããããã«ãZuckerbergã¯facebookãæžããŸããã
åæã®åºæ¬çãªè€éãã¯äœã§ããïŒ å€å žçãªè€è£œããã³åæãã¯ãããžãŒã®ä»çµã¿ãã¬ããªã«IDã®ãµããŒãæ¹æ³ãç解ããŸãããã æãç°¡åãªæ¹æ³ã¯ããã¹ãŠãã»ã³ã¿ãŒã§è¡ãããšã§ãã ãã¹ãŠã®æžã蟌ã¿æäœã¯äžå€®ã®ããŒã¿ããŒã¹ã«éãŸããèªã¿åãæäœã®æ°ããçµæã¯ã»ã³ã¿ãŒããæ»ããŸãã ä¿¡é Œæ§ãé«ãã·ã³ãã«ãªããã«èŠããŸãããããã«3ã€ã®åŽé¢ããå°é£ã«è¿ã¥ãå§ããŸãã
- åæå®è¡æ§-åã®æäœã«å¯Ÿããçãããªã³ã«ãªã£ãŠããéãã¯ã©ã€ã¢ã³ãã¯å¥ã®ããšãäœãšãããŠããããã©ã®ããã«çµã¿åããããã¯ãã¯ãæ確ã§ã¯ãããŸãããã
- ãã¹ãŠã®æäœã1ã€ã®ãã€ã³ããçµç±ããã¹ããŒã ã®ã¹ã±ãŒãªã³ã°
- ã»ã³ã¿ãŒã顧客ã«å¿çããªãããå¿çãé ãå Žåãã€ã³ã¿ãŒããããäžååãªç¶æ ã§æ©èœããã
ãã®ã¹ããŒã ãã¹ã±ãŒãªã³ã°ããæåã®å žåçãªã¹ãããã¯ã å žåç㪠ããŒã¿ããŒã¹ã« å®è£ ãããŠãããã¹ã¿ãŒã¹ã¬ãŒãè€è£œã§ãã ãã¹ã¿ãŒã¯æäœãç·åœ¢ãã°ã«å ¥ãããã®ãã°ãã¹ã¬ãŒãã«é åžããã¹ã¬ãŒãã¯åãç·åœ¢é åºã§ããŒã¿ã¬ããªã«ã«é©çšããåãçµæãååŸããŸãã ããã¯èªã¿åãå€ã®ã¹ã±ãŒãªã³ã°ã«åœ¹ç«ã¡ãŸãããæçµçãªæŽåæ§èŠçŽ ãè¿œå ããŸãã ã¹ã¬ãŒãã¯è¥å¹²ã®é ãã䌎ã£ãŠæŽæ°ãããŸãã èšé²ã®åé¡ã¯æ®ããŸã-ãã¹ãŠã®èšé²ã¯åãã»ã³ã¿ãŒãééããŸãã ç·åœ¢åã¯ã PaxosãRaftãªã©ã®ã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ã䜿çšããŠåæ£ã¬ããªã«ã«æ¡åŒµã§ããŸãããç·åœ¢åã¯ããªãŒããŒããã€ãŸã ãã¹ãŠåãã»ã³ã¿ãŒã ã»ã³ã¿ãŒãéãããããšãæ°Žå¹³æ¹åã«æ¡å€§ãå§ããŸã-ããŒã¹ããç Žçãã«åæããŸãã ããã§ãç·åœ¢åãšACIDå šäœããåã®å°ããªACIDã«åŒãè£ãããŸãã
ãŸãããªãã©ã€ã³äœæ¥ã§ã¯ãã»ã³ã¿ãŒãšç·åœ¢åã®äºææ§ããããŸããã ãã¡ããããªãã©ã€ã³ã¯ãããããã§ã¯ãªãããšèšãããšãã§ããŸãããå®éã«ã¯ããªãã©ã€ã³ã¯å®æçã«çºçããŸãã ç§ãã¡ããã€ãŒãããããäœãã奜ããªããããã¯å®¹èªã§ããŸãããäœããããæ·±å»ãªå Žåãããã¯ã»ãšãã©ãããŸããã ããšãã°ããŠã§ã€ã¿ãŒãé»ç·ã蹎ããã€ã³ã¿ãŒããããæ¶ããå Žåã管çè ãã©ã€ããç¹æ» ãããŠè»ã§å°çãããŸã§é¡§å®¢ãã¬ã¹ãã©ã³ããè¿œãåºãããšã¯ã§ãããç¡æã§ãµãŒãã¹ãæäŸããããšãã§ããŸããïŒ IIKOå ±åèšç«è ã®Max Nalskyã®äŸïŒã
ããã«ããµãŒããŒåŽã§ã®ãããã®åéºã¯ãã¹ãŠã¯ã©ã€ã¢ã³ãåŽã«åœ±é¿ããŸããã ã¯ã©ã€ã¢ã³ãã¯ããµãŒããŒãäºãã«åæããçµæãå ±åãããŸã§åã«åŸ æ©ããŸãã æªåé«ããããžã§ã¯ãã§ã Meteorã¯ãªã¢ã«ã¿ã€ã ã§ã¯ã©ã€ã¢ã³ãã®åæãè©Šã¿ãå®éã«MongoDBãã¯ã©ã€ã¢ã³ãã«ãã£ãã·ã¥ããŸããã ãã¹ãŠãé®®æã«æ©èœãããããã«ããµãŒããŒã®å¿çãåŸ ã€ããšã¯ãã¬ã€ãã³ã·ãŒè£æ£ãã®ããªãã¯ã«ãã£ãŠé ãããŠããŸããã ã¯ã©ã€ã¢ã³ãã¯æäœããã£ãã·ã¥ã«ããŒã«ããŠãµãŒããŒã«éä¿¡ãããµãŒããŒã¯æ£åžžã«é©çšããããã©ããã確èªããé©çšãããŠããªãå Žåã¯ããããéä¿¡ããŸãã ãã®ã¢ãããŒãã¯çããã以äžã®ãã®ã§ãã ã-ã«ã·ã£ãè»ãã¬ã¬ãŒãžã«å ¥ããŸãããïŒã ãã¯ããéšåçã«ïŒã
ããã«ãç·åœ¢åã䌎ããã®ãããªè€éãªè©±ããããŸãã ããŠãããèå³æ·±ãã®ã¯ãç·åœ¢åã®ã¹ã³ã¢ãä»ããããŠããäžè¬çãªãœãªã¥ãŒã·ã§ã³ã調ã¹ãããšã§ãã GitãšCouchDBã®2ã€ã®è¯ãäŸããããŸãã Gitã¯Linus Torvaldsã«ãã£ãŠæžãããŸãããLinusTorvaldsã¯Linuxéçºè ã®äžã§ãŸãã«ãäžå¿ãã§ããã ããããããã圌ãäžå¿ããã£ããã§ãããäžå¿ãæ¡å€§çž®å°ããªããšéåžžã«æããçç±ã§ãã gitã§ã¯ããã¹ã¿ãŒãšãã¹ã¿ãŒã®ååã«åºã¥ããŠåæãè¡ãããŸãã ããŒã¿ã¯ããŒãžã§ã³ã®ãã€ã°ã©ããšããŠè¡šç€ºããããã¹ãŠã®äžŠåããŒãžã§ã³ã¯ãã€ãããŒãžããå¿ èŠããããŸãã ã¹ã±ãŒãªã³ã°-å®ç§ããªãã©ã€ã³-åé¡ãããŸããã CouchDBã§ãã»ãŒåãã§ãã ã¯ã©ã€ã¢ã³ãã«CouchDBã®ãããªããžãã¯ãããããè©Šã¿ããããŸã-pouchdbãšhood.ieã
ãã®åéã§å®å šã«æ°ãããã®ã¯CRDTã§ãããä»æ¥ç§ãã¡ã¯ããã«ã€ããŠè©±ããŠãããé·ãå°å ¥ã«ã€ããŠãã¿ãŸããã CRDTã¯ãåæ/å¯æ/ã¯ã©ãŠãã¬ããªã±ãŒãããŒã¿åã§ãã CRDTã®äžè¬çãªèãæ¹ã¯ãç·åœ¢åã®ä»£ããã«åé åºã䜿çšããããšã§ãã æäœã¯å€ãã®ã¬ããªã«ã§äžŠè¡ããŠå®è¡ã§ããäžéšã®æäœã¯ç«¶äºåããããŸãã ç°ãªãã¬ããªã«ã§çºçãããäºããç¥ããããã®ãã¡ã®1ã€ããæåãã§ã¯ãªããç°ãªãã¬ããªã«ã§ç°ãªãé åºã§é©çšãããŸãã 䜿çšãããããŒã¿æ§é ããå æé¢ä¿ã«éåããªãæäœã®ãã®ãããªç°¡åãªäžŠã¹æ¿ãã«èããããšãã§ããå Žåãã»ã³ã¿ãŒã«é¢é£ãããã¹ãŠã®åé¡ã¯åçŽã«è§£æ¶ãããŸãã
ãã1ã€ã®è³ªåã¯ãCRDTããŒã¿æ§é ãããã€ããããšããããšã§ãã çµå±ã®ãšãããã³ã³ãã¥ãŒãã£ã³ã°æ¶è²»è²¡å šäœ-å€æ°ãé åãé£æ³é å-ã¯ãCRDTã®åœ¢ã§éåžžã«å®çŸå¯èœã§ãã ãããŠããéãæ°ãããšïŒ 次ã«ãç·åœ¢åãšACIDã®ä¿èšŒããŸãã«å¿ èŠã§ããïŒ æ®å¿µãªãããæ°ãããã®ã¯å¿ããããå€ããã®ã§ããããšãå€æããŸããã äŒèšã§äœ¿çšãããããŒã¿æ§é -åå®ãæ®é«-ã¯éåžžã«CRDTã§ããããšãããããŸããã 確ãã«ãã«ããµã³ã¹æã«äŒèšã®äŒçµ±ã圢æããããšããã€ã³ã¿ãŒãããã¯ååšããªãã£ããããç·åœ¢åãªãã§æãåºããŸããã
CRDTã®çŽ æŽãããæŸå°æ©èœã¯ãã»ã³ã¿ãŒã«æ¥ç¶ãããŠããªããŠãå®å šã«æ©èœããã©ã€ãã¬ããªã«ã§ãã ãŸããã»ã³ã¿ãŒã«èµ°ãããšãªãããã¹ãŠã®æäœã®å³æé©çšã ãã®ãããªèªåŸæ§ãšé床ã¯ã2ã€ã®å Žåã«ç¹ã«é¢é£ããŸãã ãŸããã¢ãã€ã«ããã€ã¹çš-ä¿¡é Œæ§ã®äœãã€ã³ã¿ãŒãããã§ãå€åºå ã§äœ¿çšãããŸãã CRDTã䜿çšãããšãå°æ¥ã®äœ¿çšã«åããŠããŒã¿ãä¿åããããã¯ã°ã©ãŠã³ãã§åæããŠããŒã«ã«ã§éãã«äœæ¥ã§ããŸãã 第äºã«ãç¹ã«ãªã¢ã«ã¿ã€ã ã§ã®ã³ã©ãã¬ãŒã·ã§ã³æ©èœãåããã¢ããªã±ãŒã·ã§ã³ã®å ŽåïŒGoogle DocsãApple iCloudã«ã€ããŠèããŸãïŒã ãã®ãããªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããç¶æ ãã¯å€§ãããæ¥éã«å€åããŸãããµãŒããŒãžã®å®è¡ãšãã®éã¯ãcoã®äžã®éã§ãã
ããŒã¿ããªãã©ã€ã³ã§æäœã§ããéCRDTãã¯ãããžãŒããããŸãã Dropboxã¯ãã®åæAPIãæäŸããŸããStrongLoop ã Firebaseãªã©ããªã©ããããŸãã ãããã®ãã¹ãŠã®ãœãªã¥ãŒã·ã§ã³ã¯ãLast-Write-WinsïŒLWWïŒã®ååã«åºã¥ããŠåäœããŸããåã¬ã³ãŒãã«ã¯ã¿ã€ã ã¹ã¿ã³ããå²ãåœãŠããã倧ããªããŒã¯ãæã€ã¬ã³ãŒãã¯åã®ã¬ã³ãŒãããã«ããŸãã Cassandraã¯åãåçã«åºã¥ããŠããŸãã ãããŠãç§ãã¡ã®Swarmã©ã€ãã©ãªã§ãæãäžè¬çãªããªããã£ãã¯LWWãªããžã§ã¯ãã§ãã Swarmã®å©ç¹ã¯ãLWWã§è§£æ±ºã§ããªãããŒã¿æ§é ã§ãã ããšãã°ãç·šéäžã®ããã¹ãã
äžè¬ã«ãåæ£ã·ã¹ãã ã®Looking Glassã§ã¯ãéã®ããšãåœãŠã¯ãŸããŸãã éåžžã®ããã°ã©ãã³ã°èšèªã§ã¯ãæãåçŽãªæäœã¯å€æ°ã®å¢å++ã§ãã é åã®æäœã¯å°ãé£ããããªããžã§ã¯ããšé£æ³ã³ã¬ã¯ã·ã§ã³ã¯ããã«è€éã§ãã åæ£ã·ã¹ãã ã§ã¯ããã¹ãŠãæ£å察ã§ãïŒ LWWãªããžã§ã¯ããšé£æ³ã³ã³ããã¯ç¹ã«è€éã§ã¯ãããŸããã ç·åœ¢æ§é ïŒé åãããã¹ãïŒã¯éåžžã«è€éã§ãã«ãŠã³ã¿ãŒã¯éåžžã«è€éã§ãã ããã¯ãLWWãªããžã§ã¯ããæåã«è¡ãããCassandraã®äŸã§èŠãããšãã§ããã«ãŠã³ã¿ãŒã¯ããã®ãŸãŸã§ããŸã å®äºããŠããŸãã

ãã€ã³ãã«å°éããŸãã ã©ã€ãã©ãªã®åäœã瀺ãããã«ãSwarm + Reactã§TodoMVCãäœæããããšã«ããŸããã å®éãSwarm + Reactã®æåã®TodoMVCã¯7æã«Andrei Poppã«ãã£ãŠ1æ¥ä»¥å ã«æžãããŸãããããã®ã³ãŒãã¯ã ã€ãã£ãªããã£ã㯠ãã§ã¯ãããŸããã§ããã ä»åã¯ãç·åœ¢ã³ã¬ã¯ã·ã§ã³ïŒ Vector ïŒããµãŒããŒã¬ã³ããªã³ã°ãããããã®ã°ããºãè¿œå ããŸããã ããã«ãéåžžã®TodoMVCã¯å°ãéå±ã§åœ¹ã«ç«ããªãããã«æããŸããã ããšãã°ãReact + flux TodoMVCãèŠããšãèè ãåçŽãªã¢ããªã±ãŒã·ã§ã³ã§ããããã¹ãŠã®ããªãã¯ãã ãŸããŠããçç±ãç解ããããšã¯éåžžã«å°é£ã§ãã ãããã£ãŠã1ã€ã®æ©èœ-ååž°æ§ãè¿œå ããŸããã TabããŒãæŒããšããŠãŒã¶ãŒã¯ãã¹ãããããåããªã¹ãã«ç§»åããŸãã ãŸããã€ã³ã¿ãŒãã§ã€ã¹ããªã¢ã«ã¿ã€ã åæã«é©åãããŸããã ãã®ãããªã¢ããªã±ãŒã·ã§ã³ã¯ããã§ã«å°ãªããšãããã€ãã®å®éçãªå©ç¹ãè¡šããŠããŸãã ãŸãããŠãŒã¶ãŒéã§ç°¡åã«å ±æã§ããããã«ãURLã«ã¢ããªã±ãŒã·ã§ã³ã®ã¹ããŒã¿ã¹ã衚瀺ãå§ããŸããã äžè¬çã«ãæ¢ããããšã¯å°é£ã§ããã éå»ã®ãªã¢ã«ã¿ã€ã ãããžã§ã¯ãã®éçºãšæ¯èŒããŠãSwarmã®äººã«ã¯ããçš®ã®å£ã®å®åº«ãããããã€ãä»ã®äººãåãããã«æãããããã®ããããŸããã
ã¢ããªã±ãŒã·ã§ã³ãšã©ã€ãã©ãªã®è©³çŽ°ãªåæã¯ã次ã®è³æã«ãããŸãã
@swarm_jsãããžã§ã¯ãtwitterã®ã¢ããããŒãããã©ããŒããŠãã ããã