goaを導入した話

42a3fcdaaa492f3e1cf0fe7e6bbf4251?s=47 kyokomi
June 16, 2017

 goaを導入した話

クラスター株式会社のバックエンドWebAPI開発時にgoaを導入した話。Tipsなどを

42a3fcdaaa492f3e1cf0fe7e6bbf4251?s=128

kyokomi

June 16, 2017
Tweet

Transcript

  1. goaΛಋೖͨ͠࿩

  2. 1 ͸͡Ίʹ

  3. @k_yokomiʢ͖ΐ͜Έʣ Ϋϥελʔגࣜձࣾ ɾ2ʙ3೥͘Β͍ͣͬͱGoॻ͍ͯ·͢ ɾͪΐͬͱAndroidΤϯδχΞ΍ͬͯ·ͨ͠ ɾ࠷ۙ͸ɺterraform + AWSͱ͔΋ ɾਓ͕଍Γͳ͍ͷͰϑϧελοΫԽ͕ਐΜͰΔ ɾUnityʢC#ʣ΋গʑॻ͍ͯ·͢ ɾܕ݄ਥ

  4. None
  5. ͪΐͬͱ͚ͩαʔϏε঺հ ɾ୭Ͱ΋खܰʹόʔνϟϧϧʔϜΛ࡞Δ͜ͱͷͰ͖Δ αʔϏεͰ͢ ɾΠϕϯτͱ͔ϛʔςΟϯάͱ͔ࠓ೔Έ͍ͨͳษڧձ ΋VR্Ͱ։࠵ͨ͠ΓͰ͖·͢ ɾҠಈ͕໘౗ͱ͔ɺձ৔ͷΩϟύͷ౎߹Ͱʙͱ͍͏໰ ୊͕ղܾͰ͖·͢

  6. όοΫΤϯυͷAPI͸શͯgoaͰ͢ ओͳAPI͸ɺҎԼͷ3ͭʹͳΓ·͢ɻ͢΂ͯgoa੡Ͱ͢ ɾuserؔ࿈ͷAPI ɾroomؔ࿈ͷAPI ɾόον༻౳ͷinternalͷAPI

  7. goaΛಋೖͨ͠ཧ༝ Έͳ͞ΜAPIυΩϡϝϯτॻ͍ ͯ·͔͢ʁ

  8. APIυΩϡϝϯτखͰॻ͘ͷ໘౗ ͗͢Δʂʂʂʂʂʂ ࢓༷͕มΘΒͳ͍͸͕ͣແ͍ ΜͰ͢ʂʂʂʂʂ

  9. goa࠾༻ཧ༝ ɾAPIυΩϡϝϯτͷ࡞੒ͱߋ৽͕ਏ͔ͬͨ ɾAPIυΩϡϝϯτແ͠΋ݕ౼͕ͨ͠ɺ͋ͬͨ΄͏͕ ѹ౗తʹΫϥΠΞϯτΤϯδχΞͷ࡞ۀޮ཰͕ྑ͍ ɾechoΛ࢖͍͕ͬͯͨಛʹechoʹ͢Δཧ༝΋ͳ͔ͬ ͨʢૉͷhttpͰ΋ྑ͔ͬͨʣ

  10. goaಋೖޙʹࢥͬͨ͜ͱ ɾgoaͷdesignͷஈ֊ͰResponseͷMediaTypeͳͲͷ ڞ௨ԽΛߟ͑Δ͏ͪʹAPIઃܭ͕ચ࿅͞Ε͖ͯͨ ɾසൟʹ࢓༷͕มΘͬͨΓϦιʔε໊ͷมߋ࣌ʹվम ൣғ͕গͳ͘ࡁΜͰαΫαΫ։ൃͰ͖ͨ ɾಋೖ౰ॳͳ͔ͬͨ೔ຊޠυΩϡϝϯτ͕ἧͬͯͯɺ ѹ౗తײँ

  11. 2 ಋೖͷTips

  12. generate͢Δखॱ ɾdoc.goʹgo generate༻ͷίϝϯτΛهࡌ ɾgenͱ͍͏σΟϨΫτϦʹ_designԼͷมߋ࣌ʹຖճ ্ॻ͖Ͱੜ੒͠ɺඞཁͳίʔυΛίϐϖ͢Δ ɾ͜ͷgenσΟϨΫτϦ͸.gitignoreͰcommit͠ͳ͍Α͏ ʹ͠ɺCIͰgenerate͢ΔΑ͏ʹͨ͠ //go:generate goagen -o

    gen main --force -d github.com/Xxxxx/xxxxxxx_room_api/_design //go:generate goagen -o gen app -d github.com/Xxxxx/xxxxxxx_room_api/_design //go:generate goagen -o gen swagger -d github.com/Xxxxx/xxxxxxx_room_api/_design
  13. genΛcommit͠ͳ͍ཧ༝ ɾ࠷ॳ͸commitͯͨ͠ΜͰ͕͢ɺgenerateͨ͠ίʔυ ͷࠩ෼ͷϨϏϡʔ͕ແବͩͬͨ ɾgoaͱgoagenͷversionΛͪΌΜͱݻఆ͢Ε͹ɺCI Ͱgenerateͯ͠΋໰୊ͳ͍͸ͣ ɾݱঢ়ಛʹ໰୊ͳ͠

  14. swaggerͷ഑෍ ɾswagger.jsonͱHTMLΛஔ͘ઐ༻ͷS3Λ༻ҙ ɾCIʹ͸WerckerΛ࢖͍ͬͯͯɺϑΟʔνϟʔϒϥϯ νͷஈ֊Ͱ΋swagger.jsonΛϨϏϡʔͰ͖ΔΑ͏ʹS3 ʹPut͍ͯ͠·͢ ɾPutͨ͠swaggerͷURL͸githubͷPRʹίϝϯτ͢ Δܗʹ͍ͯ͠·͢

  15. githubͷPRʹίϝϯτͯ͘͠ΕΔ ɾs3ʹ഑ஔͨ͠swagger-uiͷHTMLΛURLࢦఆͰฦ͠ ͯ͘ΕΔʢ͜ΕΛ։͘ͱઃܭϨϏϡʔ͕͙͢ग़དྷΔʣ

  16. None
  17. ಛఆͷprefix͕͍ͭͨϒϥϯνͷͱ͖͚ͩ

  18. 3 ͪΐͬͱࠔͬͨ఺ ʢ࢖͍ํ͕ѱ͍આ΋͋Δʣ

  19. middlewareͰΤϥʔΛฦ͢ͱ໰୊͕ى͖ͨ ɾmiddlewareͱcontrollerͷڱؒʹ͋Δॲཧ͕ϋϯυ ϦϯάͰ͖ͳ͍ ɾͦͷͨΊɺResponseHeader΁ͷOriginͷઃఆ͕ߦ ΘΕͳ͍ ɾͱΓ͋͑ͣࣗલͰResponseHeaderʹOriginΛઃఆ ͢ΔmiddlewareΛॻ͍ͨ

  20. dev؀ڥͷ৔߹͸ʙΈ͍ͨͳ͜ͱ͸Ͱ͖ͳ͍ ɾOriginͷઃఆΛdevelop؀ڥͱproduction؀ڥͰมߋ ͔ͨͬͨ͠ ɾͦ΋ͦ΋ɺAPIઃܭʹ؀ڥґଘ͢Δ΋ͷΛஔ͍ͯΔ ͷ͕ϚζΠઆʁ ɾͱΓ͋͑ͣ྆ํॻ͍͓ͯ஡Λ୙ͨ͠

  21. ྑ͍ରॲํ๏౳͋Γ·ͨ͠Β ͋ͱͰڭ͍͑ͯͩ͘͞%

  22. ͓ΘΓ