スタートアップ立ち上げの 主力言語にgo言語を 採用してみた話

392249def52087746709c2b0c434b259?s=47 Shuji OCHI
February 24, 2018

スタートアップ立ち上げの 主力言語にgo言語を 採用してみた話

umeda.go#3での発表

392249def52087746709c2b0c434b259?s=128

Shuji OCHI

February 24, 2018
Tweet

Transcript

  1. ελʔτΞοϓ্ཱͪ͛ͷ ओྗݴޠʹHPݴޠΛ ࠾༻ͯ͠Έͨ࿩ VNFEBHP ӽஐम࢘

  2. ·ͣ͸ࣗݾ঺հ

  3. ӽஐम࢘ʢ͓ͪ͠Ύ͏͡ʣ w ϑϦʔΤϯδχΞ w ϞόΠϧιϦϡʔγϣϯͱιʔ γϟϧήʔϜͷձࣾΛܦͯ ೥ಠཱ w J04ΞϓϦ։ൃ w

    4XJGU0CKFDUJWF$ w σʔλ෼ੳ w 1ZUIPO
  4. ຊ೔ͷ͓࿩

  5. w ͜Ε·ͰͷܦҢ w ٕज़ͷ࿩ w ͍·ͷͱ͜Ζͷ݁࿦

  6. ͖͔͚ͬ

  7. None
  8. None
  9. None
  10. ాଜ݈ଠ࿠ࢯ .*/5גࣜձࣾ$&0ˍϑΝ΢ϯμʔ ݩɾγφϓεʢגʣ$&0ˍϑΝ΢ϯμʔ ࿈ଓىۀՈ

  11. ΦϯϥΠϯαϩϯ 4ZOBQTF ༗໊จԽਓΛଟ਺༴͠ɺΦϯϥΠϯα ϩϯͷᅘ໼ͱͳΔαʔϏε J04ΞϓϦͷ෦෼Λ։ൃ ʢ೥݄೔4PVUʣ ϦϦʔεݩגࣜձࣾγφϓε

  12. ࢑ఆ$50ʢతͳ΋ͷʣ Λ΍Δ͜ͱʹ w ։ൃϦʔυతͳ࢓ࣄ͸໿೥ͿΓ w αʔόαΠυ։ൃ΋ͦͷ͘Β͍ w ࠓӜౡɻɻɻ

  13. ͳʹ΍Δͷ

  14. None
  15. None
  16. None
  17. ͱ͍͏ͷ΋ɻɻɻ

  18. લճͷ൓ল

  19. ΦϯϥΠϯαϩϯ 4ZOBQTF ༗໊จԽਓΛଟ਺༴͠ɺΦϯϥΠϯα ϩϯͷᅘ໼ͱͳΔαʔϏε J04ΞϓϦͷ෦෼Λ։ൃ ʢ೥݄೔4PVUʣ ϦϦʔεݩגࣜձࣾγφϓε

  20. RJJUBDPN ʮϨΨγʔ։ൃ؀ڥΛࠓ෩ͷ։ൃʹ͚ۙͮΔͨΊʹҰ೥΍͖ͬͯͨ͜ͱʯΑΓ

  21. ٕज़తෛ࠴ͷࢁ w ։ൃνʔϜϝϯόʔθϩ໰୊ w όʔδϣϯ؅ཧ͞Εͯͳ͍໰୊ w ϩʔΧϧ։ൃ؀ڥ͕ଘࡏ͠ͳ͍໰୊ w ౰࣌͸ຊ൪؀ڥ͕։ൃ؀ڥ w

    ຊ൪ͷ&$ͷίʔυΛͦͷ··मਖ਼ w ̍ͭͷ&$Πϯελϯεʹશ෦৐͍ͬͯΔ໰୊ w -".1͕̍ͭͷ&$Πϯελϯεʹશ෦ೖ͍ͬͯΔ w FUD RJJUBDPN ʮϨΨγʔ։ൃ؀ڥΛࠓ෩ͷ։ൃʹ͚ۙͮΔͨΊʹҰ೥΍͖ͬͯͨ͜ͱʯΑΓ
  22. ࠾༻ w ஌໊౓͕ͳ͍ʢ͋ͨΓ·͚͑ͩͲʣதɺͲ͏΍ͬ ͯ༏लͳٕज़ऀΛ͋ͭΊΔ͔ w ͳʹ͔Θ͔Γ΍͍͢ັྗ͕ͳ͍ͱɻɻɻɻ

  23. ౜ಥͰ͕͢

  24. αϐΤϯεશ࢙

  25. ਓؒʹग़དྷͯଞͷಈ෺ʹग़དྷͳ͍͜ͱ ਓྨͷൃలͷ伴͸ɺ ஌Βͳ͍ਓಉ͕࢜ ڞ௨ͷཧ೦΍ཧ૝Λ৴͡Δ͜ͱ͕Ͱ͖ɺ Ұகஂ݁Ͱ͖͔ͨΒ

  26. lΤϯδχΞʹͱͬͯɺ ʮڞ௨ͷཧ೦΍ཧ૝Λମݱ͢Δ΋ͷʯ ͱ͸Կ͔ʁz

  27. ϓϩάϥϛϯάݴޠ

  28. ൺֱݕ౼ͯ͠ΈΔ

  29. ٕज़ͷ࠾༻ج४ ௨ৗ͸͜ͷ఺͕ॏࢹ͞ΕΔ w Ϣʔβਓޱ w ଟ͍ํ͕ྑ͍ͱ͞ΕΔ w ߹໨తੑʢػೳʣ w ࠷௿ݶ͸Έͨ͞ͳ͍ͱ

    w ϑΟϩιϑΟʔ w ։ൃɾઃܭࢥ૝
  30. ٕज़ͷ࠾༻ج४ w Ϣʔβਓޱ w ଟ͍ํ͕ྑ͍ͱ͞ΕΔ w ߹໨తੑʢػೳʣ w ࠷௿ݶ͸Έͨ͞ͳ͍ͱ w

    ϑΟϩιϑΟʔ w ։ൃɾઃܭࢥ૝ ຊ౰ʹେࣄͳͷ͸ͬͪ͜
  31. ٕज़͕·ͱ͍ͬͯΔࢥ૝͕૊৫Λࢧ഑͢Δ

  32. 8FC։ൃͷఆ൪Ͳ͜Ζ w 1)1ɺ3VCZɺ+BWBͱ͔ w ΤϯδχΞ૚͕ް͍ w τϨʔυΦϑ w ਓ਺ଟ͗͢ w

    ັྗతͳڝ߹΋ଟ͍ʢ͸ͣʣ w ͭ·Γ4/ൺখ͍͞ w ˠ࠾༻ίετʢखؒͱ࣌ؒʣߴ͍ w ˠ͕࣌ؒͳ͍
  33. +BWB4DSJQU w ࡢ೥൒೥ 3FBDU3FEVY ΍ͬͯͨ w 3FBDU3FEVYͦͷ΋ͷ͸͍͍͕ɻɻ w ͍ΘΏΔ+BWB4DSJQUർΕʹͳͬͨ w

    ڝ૪͕ܹ͍͠ɺ໺৺తɾ݂ؾ੝ΜͳจԽ w จԽ͕ͪ͝Όͪ͝Ό w มԽ͕଎͍ͷͰɺ௕͘࢖ͬͯϦϓϨʔεͮ͠Β͍αʔόαΠ υʹ͸ਖ਼௚Ͳ͏͔
  34. ؔ਺ܕݴޠ w FMJYJS͋ͨΓ͸ڵຯ͋Δ͚Ͳɺɺɺ w Ϣʔβ૚͕ബ͗͢ΔͷͰ͸ w पΓʹ͍ͳ͍ͷͰΠϝʔδΘ͔ͳ͍ w ϋΠϒϩ΢͗͢Δਓ͕ೖͬͯϋϯυϦϯάͰ͖ ͳ͔ͬͨΒͲ͏͠Α͏

  35. 4XJGU w ݸਓతʹ͸Ұ൪ಘҙ w αʔόαΠυ޲͚։ൃͷ༻్΋޿͕͖ͬͯͨΒ ͍͠ w ͱ͸͍͑લ్͸ෆಁ໌ w ࣌ظঘૣ͔΋

  36. 1ZUIPO w ΘΓͱܦݧ௕͍ w ݸਓతʹ͸Ұ൪ॱ౰ͳબ୒ w Ϣʔβ਺૿Ճத w ͪΐͬͱ๯ݥͯ͠Έ͍ͨؾ΋͢Δ

  37. HPݴޠ

  38. पΓͰɺHPΛ͸͡ΊͨΑɺ ͍ͬͯͬͯΔਓͰɺ HPΛ͚ͳ͍ͯ͠ΔਓΛݟͨ͜ͱ͕ͳ͍ ஌Γ߹͍ͷ1ZUIPOJTUB͕ ͸͡Ίͨͱ͍͏࿩Λྑ͘ฉ͘

  39. ͪΐͬͱௐ΂ͯΈΑ͏

  40. ຊΛങ͖ͬͯͨ

  41. ͜ͷਓͬͯɻɻɻ

  42. ೥લʹษڧͨ͠

  43. ͜ͷຊͷɻɻ

  44. Χʔχϋϯઌੜʂ

  45. Ͳ͏΍Β ͓ͬ͞Μʹ༏͍͠ ݴޠΒ͍͠

  46. ͓ͬ͞Μʹ༏͍͠ݴޠʢ̍ʣ w ϓϩάϥϛϯά͸$ݴޠͰ͸͡Ίͨ w ϙΠϯλͷ֓೦͕͋ΔʢΑΓચ࿅͞ΕͨܗͰʣ w +BWB4DSJQUർΕͰ΋͏ମྗ͕ͳ͍ w 1ZUIPOಉ༷ɺόοςϦʔಉࠝ w

    ४උɾ؀ڥߏஙָ͕ w γϯάϧόΠφϦ w Ϋϩε։ൃ͕σϑΥ w ˠΫϥ΢υίϯϐϡʔςΟϯά࣌୅ʹ΋޲͍ͯͦ͏
  47. ͓ͬ͞Μʹ༏͍͠ݴޠʢ̎ʣ w &NBDTʢ4QBDFNBDTʣͷαϙʔτ͕ߦ͖ಧ͍͍ͯΔ w ௥ՃΧελϚΠζ΄ͱΜͲແ͠Ͱɺ w ϦΞϧλΠϜͰHPMJOUνΣοΫ w อଘ࣌ͷHPGNU w

    BVUPDPNQMFUF ࣗಈิ׬ɾαδΣετ  w HPEPDදࣔ
  48. ืूͯ͠Έͨ ాଜ͞Μ͕֤छ4/4Ͱ΋ݺͼ͔͚·ͨ͠

  49. ݁Ռ w Ԡื͸ͦΕ΄Ͳଟ͘͸ͳ͔ͬͨʢ૝ఆ௨Γʣ w ͔͠͠Ԡืऀ͸Ͳͷํ΋ϋΠεϖοΫʂ w &ࢯʢαʔό։ൃ୲౰ʣ w HPܦݧ೥ w

    5ࢯʢΫϥ΢υΠϯϑϥ୲౰ʣ w "84ͷΤΩεύʔτߴෛՙαΠτͷܦݧ w HPܦݧ͋Γ w ͱΘ͔ͣिؒऑͰແࣄܖ໿Ͱ͖·ͨ͠ʂ
  50. ܦҢ  Ԡื ΩοΫΦϑ  ̍ ̌  ̍ 

    ̎  ϝϯόʔืू ٕज़ௐࠪɾॳظ։ൃ ։ൃຊ֨Խ ݱࡏʹࢸΔ ։ۀ४උ  ࣄۀܭըมߋ ̍ ̎
  51. ମ੍ w ݄͔Β࢝ಈ w ϑϧϦϞʔτ ؔ౦ ؔ੢ &ࢯ 5ࢯ 4ࢯ

    ݄δϣΠϯ༧ఆ
  52. w ݄͔Β࢝ಈ w ϑϧϦϞʔτ w υΩϡϝϯτڞ༗͸FTBJP w ೔ৗͷ࿈བྷ w 4MBDL

    w (JU)VCνέοτˍϨϏϡʔ ίϛϡχέʔγϣϯ
  53. ٕज़ͷ࿩

  54. ઃܭํ਑ w ૿ాږஶʮݱ৔Ͱ໾ཱͭγε ςϜઃܭͷݪଇʯ w υϝΠϯۦಈΛҙࣝ

  55. ߏ੒؅ཧ w %PDLFSʹΑΔίϯςφϕʔεͷӡ༻ w 'BDUPS"QQ w %PDLFS$PNQPTFʹΑΔ݁߹ࢼݧ w $*ɿ$JSDMF$* w

    σϓϩΠɿ"NB[PO&$4
  56. ߏ੒؅ཧʢ̎ʣ w औΓ૊Έத w GBDUPS"QQͷߟ͑ํ w ͬ͘͟Γ͍͏ͱɺɺ w ԿͰ΋ίʔυԽͯ͠؅ཧ w

    ԿͰ΋ࣗಈԽ w ؀ڥґଘ͢Δಈ࡞͸ઃఆʹΑͬͯ֎෦ʹ௥͍ग़͢ w ϩʔΧϧʹ΋ͷΛ࣋ͨͳ͍ w ֎෦αʔϏεʹग़དྷΔ͚ͩ೚ͤΔ
  57. γεςϜߏ੒ਤ $MPVEJOBSZ

  58. ϥΠϒϥϦɾϑϨʔϜϫʔΫ w ϥΠϒϥϦɾϑϨʔϜϫʔΫ w HPB w WJQFS w EBUBCBTFTRM YPˡ/FX

    w 03ϚούʔͰ͸ͳ͘ w %#εΩʔϚɾ42-͔ΒHPͷΞΫηείʔυΛੜ੒
  59. HPB w 8FC"1*αʔϏεΛ࡞ΔͨΊͷแׅతͳ࢓૊Έ w ಠࣗܗࣜͷ%4-ʢHPݴޠʣ w ίʔυδΣωϨʔλɾϑϨʔϜϫʔΫ

  60. HPBWTTXBHHFS HPB 4XBHHFS %4- HP :".- +40/ ੜ੒͢Δίʔυ HP TXBHHFS

    ෳ਺ݴޠ
  61. HPBͷར఺ w શ෦ೖΓ w ίϯτϩʔϥʢͷTDB⒎PMEJOH  w σʔλఆٛ w Τϯίʔμɾσίʔμ

    w ϩΨʔ w ϧʔλ w ΫϥΠΞϯτίʔυ w %4-ͷϑΝΠϧ෼ׂ͕͠΍͍͢ w 4XBHHFS TXBHHFSDPEFHFOͩͱ ͸ංେ͕ͪ͠ w ΠϯΫϦϝϯλϧʹඞཁͳ෦෼ͷίʔυ͚ͩ࠶ੜ੒ͯ͘͠ΕΔ w ΫϥΠΞϯτίʔυ·Ͱు͍ͯ͘ΕΔͷͰɺ&&ͷςετ·ͰHPBͱHPݴޠͷதͰ׬݁ͤ͞΍͍͢
  62. &&ςετ ςετ ର৅ ςετ ϓϩάϥϜ "1* ಺༰ νΣοΫ

  63. HPB%4- package design import ( . "github.com/goadesign/goa/design" . "github.com/goadesign/goa/design/apidsl" )

    var _ = Resource("bottle", func() { BasePath("/bottles") DefaultMedia(BottleMedia) Action("show", func() { Description("Get bottle by id") Routing(GET("/:bottleID")) Params(func() { Param("bottleID", Integer, "Bottle ID") }) Response(OK) Response(NotFound) }) }) ʙதུʙ Ϧιʔε ΞΫγϣϯ
  64. HPB%4- package design import ( . "github.com/goadesign/goa/design" . "github.com/goadesign/goa/design/apidsl" )

    var _ = Resource("bottle", func() { BasePath("/bottles") DefaultMedia(BottleMedia) Action("show", func() { Description("Get bottle by id") Routing(GET("/:bottleID")) Params(func() { Param("bottleID", Integer, "Bottle ID") }) Response(OK) Response(NotFound) }) }) (&5IUUQIPHFFYBNQMFDPNBQJWCPUUMFT ʙதུʙ
  65. HPB%4- package design import ( . "github.com/goadesign/goa/design" . "github.com/goadesign/goa/design/apidsl" )

    var _ = Resource("bottle", func() { BasePath("/bottles") DefaultMedia(BottleMedia) Action("show", func() { Description("Get bottle by id") Routing(GET("/:bottleID")) Params(func() { Param("bottleID", Integer, "Bottle ID") }) Response(OK) Response(NotFound) }) }) (&5IUUQIPHFFYBNQMFDPNBQJWCPUUMFT ʙதུʙ
  66. $MPVEJOBSZ w ը૾ͷอଘɾՃ޻ʹಛԽͨ͠Ϋϥ΢υαʔϏε

  67. εϚϗΞϓϦ͋Δ͋Δ w αʔό͔Βड͚औͬͨ ΞΠίϯը૾ͷαΠζ ͕ ௒ಛେ w Ϧετܥͷը໘දࣔͰ ϝϞϦѹഭ

  68. $MPVEJOBSZ w ΫϥΠΞϯταΠυͰμ΢ϯϩʔυ͢ΔαΠζ Λࢦఆ͢ΔͱɺՃ޻ͯ͠഑৴ͯ͘͠ΕΔ w ը૾ͷࢦఆ͸1VCMJD*%ͱ͍͏*%จࣈྻͰࢦఆ w αʔϏεଆ%#͔ΒΫϥΠΞϯτʹ͸ࣄલʹ 1VCMJD*%Λڭ͑Δ

  69. ࠓޙͷ՝୊ w ΋Ζ΋Ζ࢓૊Έ࡞Γ͕੔͖ͬͯͨ w ࣮૷ΛՃ଎͍ͯ͘͠ w ෛՙରࡦ

  70. ͱ͍͏Θ͚Ͱ

  71. ελʔτΞοϓ্ཱͪ͛ͷ ओྗݴޠʹHPݴޠΛ ࠾༻ͯ͠Έͨ

  72. ݁࿦

  73. ͍·ͷͱ͜Ζ ੒ޭͷ༧ײ ͔͠ͳ͍

  74. ࣭ٙԠ౴

  75. ͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠