Wantedly における プロダクト、技術、組織 7年間の進化

Wantedly における プロダクト、技術、組織 7年間の進化

Wantedlyは2018年7月現在、多種多様な言語で実装された約70のマイクロサービス群によってサービス提供されています。シンプルなRailsアプリだった2011年の開発開始から、7年の間にアーキテクチャは大きく変化を続けてきました。また、インフラもHerokuからスタートし、2014年のAWS移行に伴うDocker導入、2016年のKubernetes導入など大きな意思決定を続けています。

本セッションでは、プロダクト戦略の変遷を振り返りながら、どのようなタイミングと意思決定でアーキテクチャ・開発体制・技術基盤を作り上げてきたのか、事例をご紹介します。

0f9840a3c048e0f0adc2f9411bca91dd?s=128

Yoshinori Kawasaki

July 14, 2018
Tweet

Transcript

  1. ©2018 Wantedly, Inc. Wantedlyʹ͓͚Δ ϓϩμΫτɺٕज़ɺ૊৫ 7೥ؒͷਐԽ Rails Developers Meetup 2018

    Day 3 Extreme 13.Jul.2018 - Yoshinori Kawasaki (@kawasy)
  2. ©2018 Wantedly, Inc. ͖͔͚ͬ https://twitter.com/yoshi_hirano/status/1007042090142871553

  3. ©2018 Wantedly, Inc. 7೥Λ20෼Ͱ ۦ͚଍Ͱ࿩͠·͢

  4. ©2018 Wantedly, Inc. Railsͷ࿩͸΄ͱΜͲ͠·ͤΜ

  5. ©2018 Wantedly, Inc.  શମͱͯ͠͸4/4ϓϥοτϑΥʔϜ w ͭͷΞΧ΢ϯτͰɺෳ਺ͷϓϩμΫτɾଟ਺ͷػೳ w ʮ͍͍࢓ࣄΛͯ͠ɺ͍͍ਓੜΛૹΕΔΑ͏ʹ͢Δʯ 

    ϓϩϑΟʔϧͱιʔγϟϧάϥϑ w ͜Ε·Ͱ΍͖ͬͯͨ࢓ࣄɺϓϩδΣΫτɺ͜Ε͔Β΍Γ͍ͨ͜ͱ w ୭ͱͲͷΑ͏ͳϏδωε্ͷͭͳ͕ΓΛ΋͍ͬͯΔ͔  άϥϑͷن໛ w Τοδԯ w ϊʔυઍສ લఏ8BOUFEMZͱ͸
  6. ©2018 Wantedly, Inc. ݱࡏͷن໛ײ

  7. ©2018 Wantedly, Inc. ओͳϓϩμΫτ ڊେͳRailsΞϓϦʴα ϚΠΫϩαʔϏε܈

  8. ©2018 Wantedly, Inc. ຊମΞϓϦ ͷϚΠΫϩαʔϏε

  9. ©2018 Wantedly, Inc. ຊମΞϓϦ rails stats +----------------------+--------+--------+---------+---------+-----+-------+ | Name |

    Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+--------+--------+---------+---------+-----+-------+ | Controllers | 34499 | 29175 | 504 | 2675 | 5 | 8 | | Helpers | 8262 | 7008 | 1 | 879 | 879 | 5 | | Jobs | 553 | 422 | 25 | 41 | 1 | 8 | | Models | 45537 | 32639 | 634 | 2978 | 4 | 8 | | Mailers | 2327 | 1978 | 38 | 212 | 5 | 7 | | Javascripts | 33895 | 24907 | 685 | 5454 | 7 | 2 | | Libraries | 21526 | 18426 | 119 | 636 | 5 | 26 | | Tasks | 1893 | 1401 | 0 | 12 | 0 | 114 | | Concern specs | 5396 | 4661 | 12 | 39 | 3 | 117 | | Controller specs | 16406 | 13732 | 2 | 23 | 11 | 595 | | Feature specs | 14109 | 11104 | 0 | 66 | 0 | 166 | | Helper specs | 777 | 669 | 1 | 2 | 2 | 332 | | I18n specs | 30 | 25 | 0 | 0 | 0 | 0 | | Job specs | 274 | 243 | 0 | 0 | 0 | 0 | | Lib specs | 4739 | 3948 | 5 | 14 | 2 | 280 | | Mailer specs | 960 | 820 | 2 | 11 | 5 | 72 | | Model specs | 26295 | 21833 | 0 | 24 | 0 | 907 | | Policy specs | 325 | 282 | 0 | 0 | 0 | 0 | | Request specs | 75 | 50 | 0 | 0 | 0 | 0 | | Serializer specs | 73 | 61 | 0 | 0 | 0 | 0 | | Service specs | 8163 | 6812 | 3 | 12 | 4 | 565 | | Validator specs | 53 | 41 | 0 | 0 | 0 | 0 | +----------------------+--------+--------+---------+---------+-----+-------+ | Total | 226167 | 180237 | 2031 | 13078 | 6 | 11 | +----------------------+--------+--------+---------+---------+-----+-------+ Code LOC: 115956 Test LOC: 64281 Code to Test Ratio: 1:0.6
  10. ©2018 Wantedly, Inc. ্ཱͪ͛ϑΣʔζ 

  11. ©2018 Wantedly, Inc. ༗࢙Ҏલ ૊৫ w ϑϧλΠϜΤϯδχΞਓ ΞʔΩςΫνϟ w ຊମΞϓϦͷJOJUJBMDPNNJU

    5VF4FQ   w )FSPLV΂ΜΓɻඇΤϯδχΞͰ΋΢ΣϒαʔϏεެ։Ͱ͖Δ 
  12. ©2018 Wantedly, Inc. ༗࢙Ҏલ w ॳظόʔδϣϯΛ౰࣌ΫοΫύουٕज़෦௕ͩͬͨηίϯ͞Μ͕ߴ ଎Խͯ͘͠ΕͨΒ͍͠ɻ࢒೦ͳ͕Βॳظόʔδϣϯ͸िؒͰΫϩʔ ζ  

  13. ©2018 Wantedly, Inc. ਖ਼ࣜϩʔϯν 

  14. ©2018 Wantedly, Inc. 

  15. ©2018 Wantedly, Inc. ਖ਼ࣜϩʔϯν ૊৫ w ϑϧλΠϜΤϯδχΞਓਓ ϓϩμΫτ w ·ͩ·ͩϢʔβͷྲྀೖ΋ఆண΋ͳ͍ɻച্΋θϩ

    w αʔϏε͕ϢʔβʹՁ஋Λಧ͚͍ͯͳ͍ঢ়ଶ w ͲΕ͚ͩૣ͘มߋͯ͠ɺͲΕ͚ͩࢼߦճ਺Λ૿΍ͤΔ͔ͷউෛ ΞʔΩςΫνϟ w )FSPLV΂ΜΓʂΠϯϑϥ͸Ҿ͖ଓ͖)FSPLVʹ͓·͔ͤ w ৭ؾΛͩͯ͠ɺਓͱձࣾҎ֎ͷϚονϯάػೳΛ։ൃࣦͯ͠ഊ 
  16. ©2018 Wantedly, Inc. ୯݄ࠇࣈԽ ϓϩμΫτ w ϐϘοτΛܦͭͭɺϢʔβɾΫϥΠΞϯτ͕ఆண͠͸͡ΊΔ ΞʔΩςΫνϟ w )FSPLV΂ΜΓʂʂ·ͩ·ͩ)FSPLVʹ͓·͔ͤɻ57์өରԠ΋ίϚϯυҰͭͰ

    εέʔϧɻ ૊৫ w ͦΕͰ΋ΤϯδχΞϦιʔε͸গͳ͍ w ίΞͷՁ஋ͱͳΔʮ͍͍ग़ձ͍Λ૿΍͢͜ͱʯʹ஫ྗ w ͓ۚΛ෷ͬͯ͘ΕΔΫϥΠΞϯτ͞Μͷ ද໘తͳ ཁ๬͸ࢀߟʹ͢Δ͚ͲɺݴΘ Εͨͱ͓Γʹ͸͠ͳ͍ w Ϣʔβ જࡏస৬ऀ ʹͱͬͯϫΫϫΫ͢Δ৔ॴͰ͋Δ͜ͱΛॏࢹ w ৭ؾΛͩͯ͠ɺ·ͬͨ͘ผͷαʔϏεΛ࡞Ζ͏ͱࣦͯ͠ഊ 
  17. ©2018 Wantedly, Inc. ֦େϑΣʔζ 

  18. ©2018 Wantedly, Inc. ϞόΠϧγϑτ ϓϩμΫτ w ΢Σϒ΋εϚʔτϑΥϯΞΫηε͕૿͖͑ͯͨ w J04"OESPJEΞϓϦͷϦϦʔε ΞʔΩςΫνϟ

    w ΑΓߴ౓ͳݕࡧମݧͷఏڙͷͨΊ&MBTUJDTFBSDIͷಋೖ w ಈతʹը૾ϦαΠζΛ͢Δը૾഑৴γεςϜͷߏங 
  19. ©2018 Wantedly, Inc. ϞόΠϧγϑτ ΞʔΩςΫνϟ w ϞόΠϧϢʔβ΁ͷମݧ޲্ͱΠϯϑϥͷࣗ༝౓ΛٻΊͯ"84΁ w ౰࣌ͷ)FSPLV͸64&BTUͷΈͩͬͨɻQJOHʹNT w

    ҰํͰɺ)FSPLVͷΑ͞ɺಛʹܧଓతσϦόϦʔͷ΍Γ΍͢͞ͱόοΫΤϯυ ͷεέʔϥϏϦςΟΛࣦ͍ͨ͘ͳ͍ w l5XFMWF'BDUPS"QQzͷํ๏࿦ʹج͍ͮͨΠϯϑϥߏங w %PDLFSͷຊ൪౤ೖ w ͩΕͰ΋ɺ͍ͭͰ΋ɺͳΜͲͰ΋σϓϩΠՄೳ 
  20. ©2018 Wantedly, Inc. ଟ໘ల։ ϓϩμΫτ w 7JTJU͕ܧଓతͳ੒௕͢ΔҰํͰɺ৽͍͠Ձ஋Λಧ͚Δ͜ͱΛ໛ࡧ w ʮ࿩Λฉ͖ʹߦ͖͍ͨʯϘλϯͷຒΊࠐΈ+4΢ΟδΣοτ w

    ϏδωεΉ͚νϟοτ 8BOUFEMZ$IBU  ΞʔΩςΫνϟ w νϟοτΞϓϦʹͱͬͯʮεϐʔυͱ҆ఆੑ͸ػೳʯ w ෳ਺3BJMTΞϓϦԽͱ'JSFCBTF3FBMUJNF%BUBCBTFͷಋೖ w νϟοτϝοηʔδ༻3BJMTͱϢʔβೝূɾೝՄ3BJMTͷ։ൃ 
  21. ©2018 Wantedly, Inc. 

  22. ©2018 Wantedly, Inc. ଟ໘ల։ ΞʔΩςΫνϟ w ՝୊ w ৽͍͠3BJMTΞϓϦΛ૿΍ͨ͢ΊͷΠϯϑϥλεΫ͕ଟ͍ w

    σϓϩΠϑϩʔ͕3BJMTಛԽͰଞͷٕज़Λ؆୯ʹ࢖͑ͳ͍ ૊৫ w ϑϧλΠϜΤϯδχΞਓ w ϓϩμΫτ΍ػೳ୯ҐͰɺҰͭͷϛογϣϯΛ΋ͬͨখ͞ͳνʔϜ΁ 
  23. ©2018 Wantedly, Inc. ϚΠΫϩαʔϏεԽͷ͸͡·Γ ϓϩμΫτ w 1FPQMFͷ։ൃ։࢝ͱϦϦʔε w ը૾ॲཧɺػցֶशɺฒߦॲཧͳͲ3VCZ͕ಘҙͰͳ͍෼໺΁ͷͱΓ͘Έ͕ඞཁʹ ΞʔΩςΫνϟ

    w ,VCFSOFUFTͷຊ൪౤ೖɻ"84&$্ʹΫϥελΛߏங w దࡐదॴͳٕज़બఆ͕Մೳʹ w 3VCZ 1ZUIPO (PMBOH /PEFKT $ 3VTU w ҰॠͰ৽͍͠ΞϓϦαʔόΛݐͯΒΕΔੈք w ϞϊϦεͱಉ͙͡Β͍ͷؾܰ͞Ͱػೳ௥Ճ w %PDLFSpMFͱLTͷϚχϑΣετϑΝΠϧΛϨϙδτϦʹ༻ҙ͢Δ͚ͩ w σʔλ෼ੳج൫΋LTΛ׆༻ͯ͠ߏங 
  24. ©2018 Wantedly, Inc. ݱࡏͱࠓޙͷͱΓ͘Έ 

  25. ©2018 Wantedly, Inc. ϚΠΫϩαʔϏεԽͷਐలͱ՝୊ ϓϩμΫτ w 1FPQMFͷ57$.์ө w 7JTJUͷւ֎ల։ʹΑΓάϩʔόϧڌ఺ʹ ΞʔΩςΫνϟ

    w ʮϚΠΫϩαʔϏεͷπϥϛʹ޲͖߹͏ʯ ૊৫ w ϑϧλΠϜΤϯδχΞਓ 
  26. ©2018 Wantedly, Inc. ϚΠΫϩαʔϏεͷπϥϛʹ޲͖߹͏ w ෼ࢄτϨʔγϯάʹΑΔPCTFSWBCJMJUZͷ࣮ݱ w *TUJPʹΑΔαʔϏεϝογϡಋೖ w άϥϑσʔλϕʔε%HSBQIͷಋೖʹΑΔߴ౓ͳάϥϑσʔλ׆༻

    w ܧଓతʹ੒௕ͤ͞ΔػցֶशϓϩμΫτج൫ͷ࣮ݱ w ػցֶशϓϩμΫτ։ൃͷʮϨʔϧʯΛෑ͘ w ڞ௨ϓϩϑΟʔϧσʔλͷऔಘɾมߋɾ఻ൖ w ϓϩμΫτԣஅྖҬͷΦʔφʔγοϓΛ୭͕͔࣋ͭɻ w ʮมԽͷͨΊͷίετʯͷ࠷খԽ 
  27. ©2018 Wantedly, Inc.  ϓϩμΫτ؀ڥɾઓུʹԠͯ͡ɺΞʔ ΩςΫνϟΛมԽ͖ͤͯͨ͞  ϢʔβՁ஋Λ૑Γɺૣ͘ಧ͚ΔͨΊ ʹɺٕज़ͱ૊৫Λม͑Δ 

    ͢͜͠ະདྷΛݟਾٕ͑ͨज़త౤ࢿʹ Αͬͯɺ༏ҐੑΛੜΈग़͢ ͓ΘΓʹ