$30 off During Our Annual Pro Sale. View Details »

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

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

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

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

Yoshinori Kawasaki

July 14, 2018
Tweet

More Decks by Yoshinori Kawasaki

Other Decks in Technology

Transcript

  1. ©2018 Wantedly, Inc.
    Wantedlyʹ͓͚Δ
    ϓϩμΫτɺٕज़ɺ૊৫
    7೥ؒͷਐԽ
    Rails Developers Meetup 2018 Day 3 Extreme
    13.Jul.2018 - Yoshinori Kawasaki (@kawasy)

    View Slide

  2. ©2018 Wantedly, Inc.
    ͖͔͚ͬ
    https://twitter.com/yoshi_hirano/status/1007042090142871553

    View Slide

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

    View Slide

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

    View Slide

  5. ©2018 Wantedly, Inc.
    શମͱͯ͠͸4/4ϓϥοτϑΥʔϜ
    w ͭͷΞΧ΢ϯτͰɺෳ਺ͷϓϩμΫτɾଟ਺ͷػೳ
    w ʮ͍͍࢓ࣄΛͯ͠ɺ͍͍ਓੜΛૹΕΔΑ͏ʹ͢Δʯ
    ϓϩϑΟʔϧͱιʔγϟϧάϥϑ
    w ͜Ε·Ͱ΍͖ͬͯͨ࢓ࣄɺϓϩδΣΫτɺ͜Ε͔Β΍Γ͍ͨ͜ͱ
    w ୭ͱͲͷΑ͏ͳϏδωε্ͷͭͳ͕ΓΛ΋͍ͬͯΔ͔
    άϥϑͷن໛
    w Τοδԯ
    w ϊʔυઍສ
    લఏ8BOUFEMZͱ͸

    View Slide

  6. ©2018 Wantedly, Inc.
    ݱࡏͷن໛ײ

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  10. ©2018 Wantedly, Inc.
    ্ཱͪ͛ϑΣʔζ

    View Slide

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


    w )FSPLV΂ΜΓɻඇΤϯδχΞͰ΋΢ΣϒαʔϏεެ։Ͱ͖Δ

    View Slide

  12. ©2018 Wantedly, Inc.
    ༗࢙Ҏલ
    w ॳظόʔδϣϯΛ౰࣌ΫοΫύουٕज़෦௕ͩͬͨηίϯ͞Μ͕ߴ
    ଎Խͯ͘͠ΕͨΒ͍͠ɻ࢒೦ͳ͕Βॳظόʔδϣϯ͸िؒͰΫϩʔ
    ζ


    View Slide

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

    View Slide

  14. ©2018 Wantedly, Inc.

    View Slide

  15. ©2018 Wantedly, Inc.
    ਖ਼ࣜϩʔϯν
    ૊৫
    w ϑϧλΠϜΤϯδχΞਓਓ
    ϓϩμΫτ
    w ·ͩ·ͩϢʔβͷྲྀೖ΋ఆண΋ͳ͍ɻച্΋θϩ
    w αʔϏε͕ϢʔβʹՁ஋Λಧ͚͍ͯͳ͍ঢ়ଶ
    w ͲΕ͚ͩૣ͘มߋͯ͠ɺͲΕ͚ͩࢼߦճ਺Λ૿΍ͤΔ͔ͷউෛ
    ΞʔΩςΫνϟ
    w )FSPLV΂ΜΓʂΠϯϑϥ͸Ҿ͖ଓ͖)FSPLVʹ͓·͔ͤ
    w ৭ؾΛͩͯ͠ɺਓͱձࣾҎ֎ͷϚονϯάػೳΛ։ൃࣦͯ͠ഊ


    View Slide

  16. ©2018 Wantedly, Inc.
    ୯݄ࠇࣈԽ
    ϓϩμΫτ
    w ϐϘοτΛܦͭͭɺϢʔβɾΫϥΠΞϯτ͕ఆண͠͸͡ΊΔ
    ΞʔΩςΫνϟ
    w )FSPLV΂ΜΓʂʂ·ͩ·ͩ)FSPLVʹ͓·͔ͤɻ57์өରԠ΋ίϚϯυҰͭͰ
    εέʔϧɻ
    ૊৫
    w ͦΕͰ΋ΤϯδχΞϦιʔε͸গͳ͍
    w ίΞͷՁ஋ͱͳΔʮ͍͍ग़ձ͍Λ૿΍͢͜ͱʯʹ஫ྗ
    w ͓ۚΛ෷ͬͯ͘ΕΔΫϥΠΞϯτ͞Μͷ ද໘తͳ
    ཁ๬͸ࢀߟʹ͢Δ͚ͲɺݴΘ
    Εͨͱ͓Γʹ͸͠ͳ͍
    w Ϣʔβ જࡏస৬ऀ
    ʹͱͬͯϫΫϫΫ͢Δ৔ॴͰ͋Δ͜ͱΛॏࢹ
    w ৭ؾΛͩͯ͠ɺ·ͬͨ͘ผͷαʔϏεΛ࡞Ζ͏ͱࣦͯ͠ഊ


    View Slide

  17. ©2018 Wantedly, Inc.
    ֦େϑΣʔζ

    View Slide

  18. ©2018 Wantedly, Inc.
    ϞόΠϧγϑτ
    ϓϩμΫτ
    w ΢Σϒ΋εϚʔτϑΥϯΞΫηε͕૿͖͑ͯͨ
    w J04"OESPJEΞϓϦͷϦϦʔε
    ΞʔΩςΫνϟ
    w ΑΓߴ౓ͳݕࡧମݧͷఏڙͷͨΊ&MBTUJDTFBSDIͷಋೖ
    w ಈతʹը૾ϦαΠζΛ͢Δը૾഑৴γεςϜͷߏங

    View Slide

  19. ©2018 Wantedly, Inc.
    ϞόΠϧγϑτ
    ΞʔΩςΫνϟ
    w ϞόΠϧϢʔβ΁ͷମݧ޲্ͱΠϯϑϥͷࣗ༝౓ΛٻΊͯ"84΁
    w ౰࣌ͷ)FSPLV͸64&BTUͷΈͩͬͨɻQJOHʹNT
    w ҰํͰɺ)FSPLVͷΑ͞ɺಛʹܧଓతσϦόϦʔͷ΍Γ΍͢͞ͱόοΫΤϯυ
    ͷεέʔϥϏϦςΟΛࣦ͍ͨ͘ͳ͍
    w l5XFMWF'BDUPS"QQzͷํ๏࿦ʹج͍ͮͨΠϯϑϥߏங
    w %PDLFSͷຊ൪౤ೖ
    w ͩΕͰ΋ɺ͍ͭͰ΋ɺͳΜͲͰ΋σϓϩΠՄೳ

    View Slide

  20. ©2018 Wantedly, Inc.
    ଟ໘ల։
    ϓϩμΫτ
    w 7JTJU͕ܧଓతͳ੒௕͢ΔҰํͰɺ৽͍͠Ձ஋Λಧ͚Δ͜ͱΛ໛ࡧ
    w ʮ࿩Λฉ͖ʹߦ͖͍ͨʯϘλϯͷຒΊࠐΈ+4΢ΟδΣοτ
    w ϏδωεΉ͚νϟοτ 8BOUFEMZ$IBU

    ΞʔΩςΫνϟ
    w νϟοτΞϓϦʹͱͬͯʮεϐʔυͱ҆ఆੑ͸ػೳʯ
    w ෳ਺3BJMTΞϓϦԽͱ'JSFCBTF3FBMUJNF%BUBCBTFͷಋೖ
    w νϟοτϝοηʔδ༻3BJMTͱϢʔβೝূɾೝՄ3BJMTͷ։ൃ

    View Slide

  21. ©2018 Wantedly, Inc.

    View Slide

  22. ©2018 Wantedly, Inc.
    ଟ໘ల։
    ΞʔΩςΫνϟ
    w ՝୊
    w ৽͍͠3BJMTΞϓϦΛ૿΍ͨ͢ΊͷΠϯϑϥλεΫ͕ଟ͍
    w σϓϩΠϑϩʔ͕3BJMTಛԽͰଞͷٕज़Λ؆୯ʹ࢖͑ͳ͍
    ૊৫
    w ϑϧλΠϜΤϯδχΞਓ
    w ϓϩμΫτ΍ػೳ୯ҐͰɺҰͭͷϛογϣϯΛ΋ͬͨখ͞ͳνʔϜ΁

    View Slide

  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Λ׆༻ͯ͠ߏங

    View Slide

  24. ©2018 Wantedly, Inc.
    ݱࡏͱࠓޙͷͱΓ͘Έ

    View Slide

  25. ©2018 Wantedly, Inc.
    ϚΠΫϩαʔϏεԽͷਐలͱ՝୊
    ϓϩμΫτ
    w 1FPQMFͷ57$.์ө
    w 7JTJUͷւ֎ల։ʹΑΓάϩʔόϧڌ఺ʹ
    ΞʔΩςΫνϟ
    w ʮϚΠΫϩαʔϏεͷπϥϛʹ޲͖߹͏ʯ
    ૊৫
    w ϑϧλΠϜΤϯδχΞਓ

    View Slide

  26. ©2018 Wantedly, Inc.
    ϚΠΫϩαʔϏεͷπϥϛʹ޲͖߹͏
    w ෼ࢄτϨʔγϯάʹΑΔPCTFSWBCJMJUZͷ࣮ݱ
    w *TUJPʹΑΔαʔϏεϝογϡಋೖ
    w άϥϑσʔλϕʔε%HSBQIͷಋೖʹΑΔߴ౓ͳάϥϑσʔλ׆༻
    w ܧଓతʹ੒௕ͤ͞ΔػցֶशϓϩμΫτج൫ͷ࣮ݱ
    w ػցֶशϓϩμΫτ։ൃͷʮϨʔϧʯΛෑ͘
    w ڞ௨ϓϩϑΟʔϧσʔλͷऔಘɾมߋɾ఻ൖ
    w ϓϩμΫτԣஅྖҬͷΦʔφʔγοϓΛ୭͕͔࣋ͭɻ
    w ʮมԽͷͨΊͷίετʯͷ࠷খԽ

    View Slide

  27. ©2018 Wantedly, Inc.
    ϓϩμΫτ؀ڥɾઓུʹԠͯ͡ɺΞʔ
    ΩςΫνϟΛมԽ͖ͤͯͨ͞
    ϢʔβՁ஋Λ૑Γɺૣ͘ಧ͚ΔͨΊ
    ʹɺٕज़ͱ૊৫Λม͑Δ
    ͢͜͠ະདྷΛݟਾٕ͑ͨज़త౤ࢿʹ
    Αͬͯɺ༏ҐੑΛੜΈग़͢
    ͓ΘΓʹ

    View Slide