
2018幎ããµãŒããŒã¬ã¹ã¯ãäžåºŠãå®è¡ããããšããªãå Žåã§ããã¢ããªã±ãŒã·ã§ã³ããã¯ãšã³ããäœæããæéã®æ¹æ³ã§ãã ã¯ããç¡æ°ã®ã¢ããªã±ãŒã·ã§ã³ãã«ããŒãMBaaSãŸãã¯BaaSã«ã€ããŠç¥ã£ãŠããŸããããµãŒããŒã¬ã¹ã¯åºæ¬çãªã¢ããªã±ãŒã·ã§ã³ã ãã§ãªããã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯å®è¡ã§ããªãã¹ã±ãŒã©ãã«ã§è€éãªããã¯ãšã³ãã«ãé©ããŠããããšã瀺ããããšæããŸãã
å æ¥ããã·ã¢ã§æåã®ãµãŒããŒã¬ã¹ã¯ã©ãŠã ã Swiftyãã©ãããã©ãŒã ã«åºã¥ãRusonyx Serverlessãçºè¡šããŸããã ãã©ãããã©ãŒã ã䜿çšããŠæåã®3ãæã¯ç¡æãªã®ã§ã誰ã§ããµãŒããŒã¬ã¹ã¢ãããŒããè©Šãããšãã§ããŸãã
ãã®èšäºã§ã¯ãèªèšŒããŠãŒã¶ãŒãããã¡ã€ã«ãã€ã¡ãŒãžã¹ãã¬ãŒãžããããŠå®éã«ã¯ãµãŒããŒã¬ã¹ã¢ãããŒãã䜿çšããã¿ã¹ã¯ç®¡çãåããç°¡åãªToDoã¢ããªã±ãŒã·ã§ã³ã®äœææ¹æ³ã説æããŸãã ããã¯åœç¶Swiftyã§è¡ããŸãããããã§ã®ã¢ãããŒãã¯ãã¹ãŠã®ãµãŒããŒã¬ã¹ãœãªã¥ãŒã·ã§ã³ã§ã»ãŒåãã§ãã å®æããã¢ããªã±ãŒã·ã§ã³ã®äŸã¯ããã«ãããŸã ã ããã³ããšã³ãã¯vue.jsã§èšè¿°ãããçµã¿èŸŒã¿ã®Object StorageïŒS3ïŒã§å®è¡ãããããã¯ãšã³ãã¯Goããã³Pythonã®é¢æ°ã§å®è¡ãããŸãã
ãã®ã¬ã€ãã«åæ Œããããã«JavaScriptãgoshechkiãããã³pythonã®ç¥èã¯å¿ èŠãããŸããã ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãã¯ã ããã§ååŸã§ããŸã ã
ãŠãŒã¶ãŒèªèšŒ
æåã®æ®µéã§ã¯ãã¢ããªã±ãŒã·ã§ã³ããã¯ãšã³ãçšã®é¢æ°èªäœãäœæããŸãã ãŸããSwiftyã¢ã«ãŠã³ããå¿ èŠã§ã ã ããã§äœæã§ããŸã ã ããã·ã¥ããŒãã«ãã°ã€ã³ãããšããã®ç»é¢ã衚瀺ãããŸãã

ã¢ã«ãŠã³ããååŸããããé¢æ°èªäœã®äœæãéå§ã§ããŸãã Swiftyã«ã¯ããµã€ã³ã¢ããããµã€ã³ã€ã³ããã°ã¢ãŠãã®åºæ¬æäœãšããŠãŒã¶ãŒãããã¡ã€ã«ã®äœæãå€æŽãååŸãåé€ã®æ©èœãæäŸããèªèšŒãµãŒãã¹-èªèšŒãå«ãŸããŠããŸãã ãŸããFacebookãšã®çµ±åãããã³æ¢ã«äœæããããããã¡ã€ã«ãFacebookãããã¡ã€ã«ã«ãªã³ã¯ããæ©èœãåããŠããŸãã ãããããããã¯ãŸã å¿ èŠãããŸããã ãã¶ãåŸã§ã
èªèšŒãµãŒãã¹ãäœæããŸã ã
- Swifty-> Authentication ServicesãéããŸãã
- [èªèšŒããŒã¿ããŒã¹ã®äœæ]ãã¯ãªãã¯ããtodoappããŒã¿ããŒã¹ã«ååãä»ããŸãã ãã®ååã¯åŒãç¶ã䜿çšããŸãããå¿ èŠã«å¿ããŠããŒã¹ã«ååãä»ããããšãã§ããŸãã
ãã®çµæãå€ãã®ãã®ãäœæãããŸãã
- todoapp.baseé¢æ° -ãµã€ã³ã¢ããããµã€ã³ã€ã³ããã°ã¢ãŠãã®ãŠãŒã¶ãŒãäœæããOAuth 2.0ãããã³ã«ãå®è£ ããŸãã
- todoapp.fbé¢æ°-fbãä»ããŠãŠãŒã¶ãŒãèªèšŒã§ããŸãã
- todoapp.linké¢æ° -ãã§ã«äœæããããŠãŒã¶ãŒã®ã¢ã«ãŠã³ããfbã®ã¢ã«ãŠã³ãã«ãªã³ã¯ããŸãã
- todoapp.profilesé¢æ°-MongoDBã§ãŠãŒã¶ãŒãããã¡ã€ã«ãäœæãæŽæ°ãåé€ããŸãã
- Todoapp_mgo DB-ãŠãŒã¶ãŒã¢ã«ãŠã³ããä¿åããããã®Mongoã
- Todoapp_profiles-ãŠãŒã¶ãŒãããã¡ã€ã«ãä¿åããããã®Mongo DB ã
- èªèšŒããã«ãŠã§ã¢ïŒAuthMWïŒã¯ãAPIé¢æ°ã«ã¢ã¯ã»ã¹ãããšãã«ãtodoapp.baseé¢æ°ãçºè¡ããJWTããŒã¯ã³ããã§ãã¯ããããšã§ãŠãŒã¶ãŒèªèšŒãæ€èšŒã§ãããããã·ã§ãã ããŒã¯ã³ããªãããæ£ãããããŸãã-APIãžã®ãªã¯ãšã¹ãã¯æåŠãããŸãã
é¢æ°ã®ååã«ãããã䜿çšããŠããããããã©ã«ããŒã«åããŸãã ãããã£ãŠãtodoapp.newfunctionãšããååã®æ°ããé¢æ°ãäœæãããšãèªåçã«todoappãã©ã«ããŒã«å ¥ããnewfunctionãšããååã§ããã«è¡šç€ºãããŸãã é¢æ°ã®ãªã¹ãã«ã¯ã次ã®ã»ãããå«ãŸããŠããã¯ãã§ãïŒå³ãåç §ïŒã

ã¹ãããã§ããŸãããããèªãã§ãã ãã
ãã®æ®µèœã¯ååãšããŠçç¥ã§ããŸãã èªèšŒãµãŒãã¹ãã©ã®ããã«æ©èœããããç解ããSwiftyãã©ã®ããã«æ©èœãããã«ã€ããŠããå°ãç解ãããå Žåãããã§ã¯ãããŸããã Goã§èšè¿°ãããtodoapp.baseé¢æ°ã¯ãåºæ¬çãªèªèšŒæ©èœãæäŸããŸãããã¢ããªã±ãŒã·ã§ã³ã®ããŒãºãæºããããã«ãã®æ©èœãæ¡åŒµããããšã劚ãããã®ã¯ãããŸããã ã©ã®ããã«å€æŽããŠãããµã€ã³ã€ã³ãšãµã€ã³ã¢ãŠãã«è§ŠããããšãªããåŒãç¶ãæ©èœããŸãã ãã®é¢æ°ã«ã¯ãAuthMWãšããååãä¿åããå€æ°SWIFTY_AUTH_NAMEããããŸãã ãã®é¢æ°ã¯ãMongoDBãšAuthMWèªäœãžã®ã¢ã¯ã»ã¹ãå¿ èŠãšããŸãããããã¯ãé¢æ°ã®ããããã£ã®[ã¢ã¯ã»ã¹]ã¿ãã«ç»é²ãããŠããŸãã 圌女ã¯ãé¢æ°ã«ã¢ã¯ã»ã¹ããããã«åŒã³åºãå¿ èŠããããªã³ã¯ãæã€REST APIããªã¬ãŒãæã£ãŠããŸãã
todoapp.baseé¢æ°ã¯ããŠãŒã¶ãŒIDãšãã¹ã¯ãŒããèŠæ±åŒæ°ãšããŠæž¡ãããšãæ³å®ããŠããŸãã ãã¹ã¯ãŒãã¯æå·åãããŠããŸãã
ãã®ãããªã¯ãšãªã®äŸã次ã«ç€ºããŸãã
* Sign up: https://api.swifty.cloud:8686/call/012.../signup&userid=user@yourmail.com&password=xxxxxxxx * Sign in: https://api.swifty.cloud:8686/call/012.../signin&userid=user@yourmail.com&password=xxxxxxxx * Log out: https://api.swifty.cloud:8686/call/012.../leave&userid=user@yourmail.com
ããšãã°ããµã€ã³ã€ã³ãæåããå ŽåïŒé¢æ°ãéä¿¡ããããã¹ã¯ãŒããæ£åžžã«æ€èšŒããå ŽåïŒãJWTããŒã¯ã³ä»ãã®JSONãåãåããŸããJWTããŒã¯ã³ã¯ãèªèšŒãæå¹ã«ãªã£ãŠããé¢æ°ã«ã¢ã¯ã»ã¹ãããã³ã«äœ¿çšããå¿ èŠããããŸãã JWTããŒã¯ã³ã¯ããã¢ã©ãŒèªèšŒã¹ããŒã ã«åºã¥ããŠäœæãããŸãã OAuth 2.0ãšBearerã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
èªèšŒãæåããªãå ŽåãåŒã³åºãããé¢æ°ã¯éå§ããããªã¯ãšã¹ãã¯ã³ãŒã401ãè¿ããŸãã
ãŠãŒã¶ãŒãããã¡ã€ã«ç®¡ç
ãã®ããããã¹ãŠã®é¢æ°ã«ã¯ãé¢æ°ãå®è¡ããããã«åŒã³åºãå¿ èŠããããªã³ã¯ã§ããREST API URLããããŸãã èªèšŒé¢æ°ã®ãã®ãªã³ã¯ãååŸããã«ã¯ãtodoapp.baseé¢æ°ãéãã[ããªã¬ãŒ]ã¿ãã«ç§»åããREST APIã®URLãã³ããŒããŠãAUTH_URLãšããŠä¿åããŸãã ããã«ããã®ãªã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã³ããšã³ãã®æ§æãã¡ã€ã«ã«æ¿å ¥ããå¿ èŠããããŸãã

ãŸããã¢ããªã±ãŒã·ã§ã³ã§ãŠãŒã¶ãŒãããã¡ã€ã«ã管çã§ããããã«ãtodoapp.profilesã®API URLãå¿ èŠã§ãã ãã®é¢æ°ãéãããããªã¬ãŒãã¿ãã«ç§»åããŠãREST API URLãã³ããŒããPROFILE_URLãšããŠä¿åããŸãã
ãŠãŒã¶ãŒã¢ãã¿ãŒç®¡ç
ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒã¢ãã¿ãŒãã¢ããããŒãããçµã¿èŸŒã¿ã®ãªããžã§ã¯ãã¹ãã¬ãŒãžã«ãã¡ã€ã«ãä¿åããæ¹æ³ã瀺ãããšãã§ããŸãã ãŠãŒã¶ãŒã®åçã¯ç¹å¥ãªæ©èœã䜿çšããŠã¢ããããŒããããçµã¿èŸŒã¿ã®ãªããžã§ã¯ãã¹ãã¬ãŒãžã«ä¿åãããŸãã ç»åãžã®ã¢ã¯ã»ã¹ã¯ãé¢æ°ãŸãã¯æšæºã®S3 APIã䜿çšããŠååŸã§ããŸããã¢ã¯ã»ã¹ããŒã¯ãUIã®[ãªããžã§ã¯ãã¹ãã¬ãŒãž]ã³ã³ãããŒã«ã¿ãã§ååŸã§ããŸãã
ç»å管çæ©èœãäœæããã«ã¯ïŒ
- ã¿ãæ©èœ->æ°èŠæ©èœ->ãªããžããªããïŒãã³ãã¬ãŒãïŒã«ç§»åããŸãã ãã¹ãŠã®é¢æ°ãã³ãã¬ãŒãã¯ããããªãã¯gitãªããžããªswifty.demoã«ä¿åãããŸãã ãã®ãªããžããªã¯ããã©ã«ãã§éžæããå¿ èŠããããŸãã
- Avatar managementïŒpythonïŒfunctionãéžæããNextãã¯ãªãã¯ããŠãæ°ããtodoapp.avataré¢æ°ã®ååãå ¥åããŸãã äœæãã¯ãªãã¯ããŸãã
- 次ã«ã[ããªã¬ãŒ]ã¿ãã«ç§»åãã[ããªã¬ãŒã®è¿œå ]ãã¯ãªãã¯ããŠãREST APIïŒURLïŒãéžæããŸãã 衚瀺ããããªã³ã¯ãã³ããŒããŠãPICTURE_URLãšããŠä¿åããŸãã
次ã«ãObject Storageã«ãã±ãããäœæããŠããŠãŒã¶ãŒã®åçãä¿åããå¿ èŠããããŸãã
- [ãªããžã§ã¯ãã¹ãã¬ãŒãž]-> [ãã±ããã®äœæ]ã¿ãã«ç§»åããŸãã æ°ãããã±ããã«todoappimagesãšããååãä»ããŸãã
- [æ©èœ]ã¿ãã«ç§»å-> todoapp.avatar->ã¢ã¯ã»ã¹-> [è¿œå ]ãã¯ãªãã¯ãã[ãªããžã§ã¯ãã¹ãã¬ãŒãž]ãæ°ããäœæããtodoappimgaesãã±ãããéžæããŠã[è¿œå ]ãã¯ãªãã¯ããŸãã
ããã§ãé¢æ°ã¯æå®ããããã±ããã«ã¢ã¯ã»ã¹ã§ããŸãã ãšãŠãã·ã³ãã«ã§ãé¢æ°å ã®ãã±ãããžã®ã¢ã¯ã»ã¹ãç»é²ããå¿ èŠã¯ãããŸããã æå®ããå¿ èŠãããã®ã¯ãç°å¢å€æ°ã䜿çšããŠç»åãä¿åãããã±ããã®é¢æ°ã®ã¿ã§ãã
- ã¿ãæ©èœ-> todoapp.avatar->å€æ°ã«ç§»åããå€æ°ã®äœæãã¯ãªãã¯ããŸãã
- å€æ°å-BUCKET_NAMEãšãã®å€-todoappimagesãå ¥åããŸãã
ã¿ã¹ã¯ç®¡ç
å®éãã¿ã¹ã¯ç®¡çã¢ããªã±ãŒã·ã§ã³ãäœæããŠããŸãããæçµçã«å¯Ÿå¿ããæ©èœãäœæãããšããæ¥ãŸããã ã¿ã¹ã¯ãäœæããå®äºæžã¿ãšããŠããŒã¯ããã¿ã¹ã¯ãåé€ã§ãããã³ãã¬ãŒãããããŸãã
é¢æ°ãäœæããŸãã
- ã¿ãæ©èœ->æ°èŠæ©èœ->ãªããžããªããïŒãã³ãã¬ãŒãïŒã«ç§»åããŸãã
- TODOã¢ããªã±ãŒã·ã§ã³é¢æ°ïŒpythonïŒãéžæãã[次ãž]ãã¯ãªãã¯ããŠãæ°ããtodoapp.tasksé¢æ°ã®ååãå ¥åããŸãã äœæãã¯ãªãã¯ããŸãã
- 次ã«ã[ããªã¬ãŒ]ã¿ãã«ç§»åãã[ããªã¬ãŒã®è¿œå ]ãã¯ãªãã¯ããŠãREST APIïŒURLïŒãéžæããŸãã 衚瀺ããããªã³ã¯ãã³ããŒããŠãTASKS_URLãšããŠä¿åããŸãã
次ã«ãã¿ã¹ã¯ãä¿åããããŒã¿ããŒã¹ãå¿ èŠã§ãã æãç°¡åãªãªãã·ã§ã³ã¯MongoDBã§ãã
- Mongo Database-> Create Databaseã¿ãã«ç§»åããtodoapp_tasksãšããããŒã¿ããŒã¹ãäœæããŸãã
- [æ©èœ]ã¿ãã«ç§»å-> todoapp.tasks->ã¢ã¯ã»ã¹-> [æ°ããããŒã¿ããŒã¹ãè¿œå ããŠè¿œå ]ã
ããã§ãé¢æ°ã¯todoapp_tasksããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ã§ããswiftyã©ã€ãã©ãªã䜿çšããŠé¢æ°ããã¢ã¯ã»ã¹ã§ããŸãã次ã«äŸã瀺ããŸãã
db = swifty.MongoDatabase(os.getenv('TASKS_DB_NAME'))
ç°å¢å€æ°ãããŒã¿ããŒã¹åã§ç»é²ããã ãã§ãïŒ
- ã¿ãæ©èœ-> todoapp.tasks->å€æ°ã«ç§»åããå€æ°ã®äœæãã¯ãªãã¯ããŸãã
- å€æ°å-TASKS_DB_NAMEãšãã®å€-todoapp_tasksãå ¥åããŸãã
æ©èœã®èªèšŒãæå¹ã«ãã
ãŠãŒã¶ãŒèªèšŒçšã®ããã¯ãšã³ããšãã¢ããªã±ãŒã·ã§ã³ã®ããã¯ãšã³ããæ§æããæ©èœèªäœãããå Žåã¯ãèªèšŒãæå¹ã«ããŠãæ¿èªããããŠãŒã¶ãŒã®ã¿ããããã¡ã€ã«ãã¢ãã¿ãŒãã¿ã¹ã¯ç®¡çæ©èœã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
ç¹å®ã®æ©èœã®ããŒã¯ã³æ€èšŒãæå¹ã«ããæ¹æ³ïŒ
- [é¢æ°]ã¿ãã«ç§»åããé¢æ°todoapp.tasksããã³todoapp.avatarãéžæããŸãã
- [èªèšŒã®ç®¡ç]ãã¯ãªãã¯ããŠtodoappãµãŒãã¹ãéžæãã[æå¹ã«ãã]ãã¯ãªãã¯ããŸãã
ããã§ãé¢æ°todoapp.tasksããã³todoapp.avatarã¯ãtodoapp.baseã䜿çšããŠçæãããæ£ããJWTããŒã¯ã³ãæã€ãŠãŒã¶ãŒã«å¯ŸããŠã®ã¿å®è¡ãããŸãã
äžèšã®ãã¹ãŠã®ã¢ã¯ã·ã§ã³ã®åŸãé¢æ°ã®ãªã¹ãã¯æ¬¡ã®ããã«ãªããŸãã

ã¢ããªã±ãŒã·ã§ã³ãå ¬é
ã¢ããªã±ãŒã·ã§ã³ã®ããã³ããšã³ãã«å¯ŸåŠããŸãããã ããã³ããšã³ãã¯vue.jsã§èšè¿°ãããŠãããèšå®ãã¡ã€ã«ã«é¢æ°ãžã®ãªã³ã¯ãè¿œå ãããã®æŽæ°ãããèšå®ã§ã¢ããªã±ãŒã·ã§ã³ãåæ§ç¯ããã ãã§ãã ããã§ã¯ãã¹ãŠãã·ã³ãã«ã§ãããvue.jsãšJavaScriptã®ç¥èã¯å¿ èŠãããŸããã
ã¢ããªã±ãŒã·ã§ã³ãåæ§ç¯ããã«ã¯ãnode.jsãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ãæã¡ã§ãªãå Žåã¯ãå ¬åŒã¬ã€ãã䜿çšããŠãã ããã Macããæã¡ã®å Žåã¯ã ãã¡ãã«åªããã¬ã€ãããããŸã ã ãŸãããªããžããªãŒãã³ã³ãã¥ãŒã¿ãŒã«ãã«ããã«ã¯gitãå¿ èŠã§ãã ããŠãã ããïŒ
# git clone https://github.com/swiftycloud/swifty.todoapp
ãã®åŸã
/swifty.todoapp/src
ãã©ã«ããŒã«ç§»åããŠããæ°ã«å ¥ãã®ãšãã£ã¿ãŒã§
config.js
ãã¡ã€ã«ãéããŸãã ããã§å€æ°ã以åã«ä¿åãããã®ã«å€æŽããå¿ èŠããããŸãã
export const AUTH_URL = "https://api.swifty.cloud/call/991..."
export const PROFILE_URL = "https://api.swifty.cloud/call/281..."
export const PICTURE_URL = "https://api.swifty.cloud/call/e6a..."
export const TASKS_URL = "https://api.swifty.cloud/call/4b1..."
FBã«é¢é£ããå€æ°ã¯ãŸã å¿ èŠãããŸããã
次ã«ãã¢ããªã±ãŒã·ã§ã³ãåæ§ç¯ããå¿ èŠããããŸãã
# npm run build
...
ãã«ããå®äºããŸããã distãã£ã¬ã¯ããªãŒããããã€ããæºåãã§ããŸããã
ã¢ããªã±ãŒã·ã§ã³ããã«ãããåã«ãããŒã«ã«ã§ãã¹ãããããšãã§ããŸãã
# npm run serve
httpïŒ// localhostïŒ8080ã®ãã©ãŠã¶ããã¢ã¯ã»ã¹ããŸã
Object Storageã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®éçãã¡ã€ã«ãä¿åããŸãã [ãªããžã§ã¯ãã¹ãã¬ãŒãž]ã¿ãã«ç§»åããtodoappãã±ãããäœæãã/ swifty.todoapp / dist
/swifty.todoapp/dist/
ãã©ã«ããŒãããã¡ã€ã«ãã¢ããããŒããããã©ã«ããŒåã確èªããŸãïŒæåã§äœæããå¿ èŠããããŸãïŒã
æåŸã®ã¹ãããã¯ãã¢ããªã±ãŒã·ã§ã³ãå ¬éããããšã§ãã [詳现]-> [HTTPãµãŒããŒèšå®]ãã¯ãªãã¯ãããã±ããã®HTTPãµãŒããŒãæå¹ã«ããŸãã 衚瀺ããããªã³ã¯ãã³ããŒããŠãã©ããŒããŸã-ãããããªãã®ã¢ããªã±ãŒã·ã§ã³ã§ãïŒ

ããã§ãã¢ã«ãŠã³ããäœæããŠå®éã«è©Šãããšãã§ããŸãã ããã§æ©èœç»é¢ã«ç§»åãããšãèªèšŒããããã¡ã€ã«ã®èªã¿èŸŒã¿ãªã©ã®ããã«æ©èœãèµ·åãããã°ããã§ããããšãããããŸãã
次ã¯ïŒ
ãµãŒããŒã¬ã¹ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããæ¹æ³ã®ç°¡åãªäŸã瀺ããŸããã 人æ°ã®ããæ©èœã®ãã³ãã¬ãŒãã¯ãŸã ãããããããæ°ããã¢ããªã±ãŒã·ã§ã³ã®ã¢ã€ãã¢ã¯ãã£ãšãããããããŸãã ãã³ãã¬ãŒããè©ŠããŠãé¢æ°ãæžããã¢ã€ãã¢ãã¢ããªã«ããŠãã ããã
ãããŠãã¡ããããµãŒããŒã¬ã¹å šè¬ãç¹ã«Swiftyã«ã€ããŠè³ªåãããå Žåã¯ãé£çµ¡ãã ããã
ã楜ãã¿ãã ããïŒ