Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Wantedly の技術とアーキテクチャ / 2023年度 新人研修

Altech
April 20, 2022

Wantedly の技術とアーキテクチャ / 2023年度 新人研修

2023年度 Wantedly 新人研修で使用した資料です。

Altech

April 20, 2022
Tweet

More Decks by Altech

Other Decks in Programming

Transcript

  1. ©2021 Wantedly, Inc. Ϣʔβʔʹఏڙ͍ͯ͠ΔαʔϏε αʔϏεͱͯ͠͸େ͖͘ Visit, Engagement, People ͷ3͕ͭଘࡏ ΞϓϦϓϥοτϑΥʔϜͱͯ͠͸

    Web, iOS, Android ͷ3ͭʹల։ Engagement ͸ Web ϓϥοτϑΥʔϜͷΈʹల։ αʔϏεΛ ϓϥοτϑΥʔϜʹ ల։͢Δ ɾɾͱ͍͏ؔ܎ੑ
  2. ©2021 Wantedly, Inc. ͍ͭ͘ͷίϯϙʔωϯτ͕͋Δ͔ʁ ·ͣ͸ίʔυϕʔεʢϦϙδτϦʣͰ਺͑ͯΈΑ͏ Web ΞϓϦ wantedly-frontendɿݸਓϢʔβʔ޲͚ɺwww.wantedly.com wantedly-admin-frontendɿاۀϢʔβʔ޲͚ɺadmin.wantedly.com wantedlyɿWeb

    ΞϓϦʴόοΫΤϯυγεςϜͷ྆ํΛؚΉ Railsɺwww.wantedly.com perkɿैۀһ޲͚ɺWeb ΞϓϦͱόοΫΤϯυγεςϜ͕౷߹͞Εͨ Railsɺperk.wantedly.com iOSΞϓϦɺAndroidΞϓϦʢϞόΠϧΞϓϦʣ visit-iosɿVisit ΞϓϦͷ iOS ϓϥοτϑΥʔϜ޲͚࣮૷ app-androidɿVisit ΞϓϦͷ Android ϓϥοτϑΥʔϜ޲͚࣮૷ yashima-iosɿPeople ΞϓϦͷ iOS ϓϥοτϑΥʔϜ޲͚࣮૷ yashima-androidɿPeople ΞϓϦͷ Android ϓϥοτϑΥʔϜ޲͚࣮૷ Web ΞϓϦ͸͜ΕΒʹҠߦ͍ͯ͘͠ํ޲ੑ
  3. ©2021 Wantedly, Inc. ࠷্Ґͷ֊૚ͷίϯϙʔωϯτ ೚ҙͷίϯϙʔωϯτͷ಺ɺଞ͔ΒಠཱʹσϓϩΠ͕Մೳͳ΋ͷ → ࣮ߦٕज़͸ҟͳΓಘΔɾɾɾJavaScript, Swift, Kotlin, Browser,

    ... → σϓϩΠઓུɾϦϦʔεઓུ͸ҟͳΓಘΔ ྫɿiOS ϓϥοτϑΥʔϜͷ Wantedly Visit ΞϓϦ͸ɺApp Store ʹਃ੥Λߦ͍ɺਃ੥͕௨ͬͯϦϦʔε͞Ε Δ͜ͱͰϢʔβʔͷ໨ʹݟ͑Δվળɾػೳ௥Ճ͕ߦΘΕΔɻίʔυͷߋ৽͸ஈ֊తʹߦΘΕΔɻ ྫɿWeb ϓϥοτϑΥʔϜͷΞϓϦ͸ɺΞΫηεͨ͠ॠؒʹ࠷৽ͷίʔυ͕μ΢ϯϩʔυ͞Ε࣮ͯߦ͞ΕΔɻ Q. ͖ͬ͞͸ίʔυϕʔεΛ਺͚͑ͨͲʁ զʑ͸ Git ͱ GitHub Λ࢖͍ͬͯΔͷͰɺίϯϙʔωϯτ͝ͱʹϦϙδτϦΛ෼͚ͯ։ൃϑϩʔʹམͱ͍ͯ͠Δ
  4. ©2021 Wantedly, Inc. ίϥϜɿΞϓϦɾϓϥοτϑΥʔϜͱٕज़ ࣮ߦ͢Δج൫͕ҟͳΔͷͰ͋Ε͹ɺ࠷దͳ࡞Γํ΋ҟͳΔ → ϓϩάϥϛϯάݴޠ͕ҟͳͬͨΓɺσϓϩΠઓུ͕มΘͬͨΓ͢Δ → ίϯϙʔωϯτͱͯ͠΋ผͷ΋ͷͱͯ͠࡞Δ͜ͱʹͳΔ ҰํͰɺ͜ΕΛղܾ͢ΔԾ૝Խɾந৅Խͱ͍͏ํ޲ੑ͸ৗʹଘࡏ͢Δ

    ͨͱ͑͹ Flutter ͷΑ͏ͳٕज़Λ࢖͑͹ Apps ͷίϯϙʔωϯτ਺͸ݮΒͤΔ͔΋ʁ ࣮ࡍɺWeb ϒϥ΢βͱ͍͏͋Δछͷந৅Խͷٕज़ʹΑͬͯ Mac OS ͱ Windows OS ͰผʑͷΞϓϦΛ࡞Δ ඞཁ͕ͳ͘ͳ͍ͬͯΔͷ͕ݱࡏɻ ʮ൚༻ܕͷιϦϡʔγϣϯʯͱʮಛԽܕͷιϦϡʔγϣϯʯͷ૬Ⴅ͕ɺͲ ͷΑ͏ʹҠΓมΘ͍͔ͬͯ͘͸ٕज़ͷྲྀΕΛཧղ͢ΔҰͭͷ੾ΓޱʹͳΔ
  5. ©2021 Wantedly, Inc. ಄ͷମૢɿ$IBU(15͸(6*Λஔ͖׵͑Δ͔ʁ ͜͜·Ͱѻ͖ͬͯͨΞϓϦ͸શͯɺGUI ͱ͍͏ʮࢹ֮ʯΛϕʔεͱͨ͠ 
 UI ύϥμΠϜ ChatGPT

    ͷΑ͏ͳʮݴޠʯΛϕʔεͱͨ͠ UI ͸ GUI Λஔ͖׵͑ΔͩΖ͏ ͔ʁ ͋Δ͍͸ GUI ͷར఺ͱ͸ԿͩΖ͏͔ʁ ʰΦϒδΣΫτࢦ޲ UI σβΠϯ - ࢖͍΍͍͢ιϑτ΢ΣΞͷݪཧʯ- ্໺ֶ
  6. ©2021 Wantedly, Inc. ίϥϜɿϚΠΫϩαʔϏεɾΞʔΩςΫνϟʹ͍ͭͯ ࣮ଶͱͯ͠ϝΠϯͷ Rails ͷൺ཰͸݁ߏେ͖͍ 👉 ͦΕࣗମ͸໰୊Ͱ͸ͳ͍ ϚΠΫϩαʔϏεɾΞʔΩςΫνϟΛ࠾༻͍ͯ͠Δͷ͸ɺʮඞཁͳͱ͖ʹ෼͚ͯ࡞ΕΔΑ͏ʹ͢ΔʯͨΊͰ͋ͬ

    ͯʮ͋Β΋ͷΛ෼͚ͯ࡞ΔʯͨΊͰ͸ͳ͍ͨΊ γεςϜͷ෼ׂͷ࢓ํʁ υϝΠϯʢҙຯతͳ·ͱ·ΓʣͰ෼ׂ͢Δ ݁ߏ೉͘͠ɺϓϩμΫτՁ஋΁ͷಎ࡯ྗ͕ཁٻ͞ΕΔ ٕज़తͳಈػͰ෼ׂ͢Δ͜ͱ΋͋Δ͕ɺͦͷ৔߹΋੹຿Λߟ͑ͯԿΒ͔ͷҙຯతͳ·ͱ·ΓΛఆٛ͢Δ
  7. ©2021 Wantedly, Inc. ίϯϙʔωϯτಉ࢜ͷ࿈ܞ ҟͳΔٕज़Ͱ࣮૷͞ΕͨίϯϙʔωϯτΛڠௐͯ͠ಈ͔ͨ͢Ίʹ͸ API ͕ॏཁ ΠϯλʔϑΣΠε͕εΩʔϚͱͯ͠දݱ͞Εͯɺ࣮૷Ͱܕ͕อূ͞ΕΔ͜ͱ Protocol BuffersɿεΩʔϚͷهड़ʹ࢖͏

    σʔλΛόΠφϦͰදݱ͢ΔγϦΞϥΠθʔγϣϯɾϑΥʔϚοτͰ΋͋Δ ཁ͢ΔʹʮͳʹΛૹΔ͔ʯͷͨΊͷ࢖͏ٕज़ gRPC, Cloud Pub/Subɿඪ४Ͱ༻ҙ͍ͯ͠Δ௨৴ٕज़ ཁ͢ΔʹʮͲ͏ૹΔ͔ʯͷͨΊͷ࢖͏ٕज़
  8. ©2021 Wantedly, Inc. ΦϯϥΠϯॲཧͱΦϑϥΠϯॲཧ γεςϜʹ͓͚ΔॲཧͷओͳτϦΨʔ͸γεςϜ֎෦͔Βͷ API ίʔϧ ৭ʑͳઢҾ͖͸Մೳ͕ͩɺΦϯϥΠϯॲཧͱݺ͹ΕΔ͜ͱ͕͋Δ ҰํͰɺͦΕҎ֎ͷτϦΨʔʹΑͬͯॲཧ͕࢝·Δ͜ͱ͕͋Δ ΦϑϥΠϯॲཧʢόονॲཧʣͱݺ͹ΕΔ

    ΦϯϥΠϯॲཧͱΦϑϥΠϯॲཧͱ͍͏ݴ༿Ͱগ͠ݟ௨͕͠ྑ͘ͳΔ Wantedly ʹ͓͚Δόονॲཧ Kubernetes ͷ CronJob ػೳͰδϣϒͱͯ͠ఆظ࣮ߦ͕Մೳ Argo Workflow Ͱδϣϒಉ࢜ͷ࿈ܞ͕ՄೳʢδϣϒAΛॲཧͨ͠ޙʹδϣϒBΛॲཧ͍ͨ͠ʣ ίϯϙʔωϯτʢϚΠΫϩαʔϏεʣΛ·͍ͨͩ࿈ܞ΋Ͱ͖Δ
  9. ©2021 Wantedly, Inc. ୯ҰͷγεςϜͱଟ਺ͷΞϓϦ Wantedly ͱ͍͏αʔϏεͷγεςϜ͔Β೚ҙͷΞϓϦ͕࡞ΒΕΔ ʮγεςϜͷ͜ͷ෦෼͸͜ͷΞϓϦ͔Β͔͠ݺ͹Εͳ͍ʯͱݴͬͨҰൠੑͷ͋Δෆม৚݅͸ͳ͍ γεςϜ͕ϚΠΫϩαʔϏεʹ෼ׂ͞Ε͍ͯΔ͜ͱ͸ɺ͋͘·ͰγεςϜ಺෦ͷΞδϦςΟͷ޲্͕໨త όοΫΤϯυ౎߹ͷ෼ׂʢͲͷΑ͏ͳϚΠΫϩαʔϏε͕ଘࡏ͢Δ͔ʣΛΞϓϦ͕஌Δඞཁ͸ͳ͍ ͜ͷͨΊɺΞϓϦʹରͯ͠

    API Λఏڙ͢Δήʔτ΢ΣΠɾαʔόʔΛஔ͖ ҰͭͷγεςϜͱͯ͠ݟ͍ͤͯΔ ͦ͜Ͱ͸ɺGraphQL Λ࢖͏͜ͱͰ৘ใઃܭʹج͍ͮͯϞσϧԽ͞Εͨ Φ ϒδΣΫτΛ API ͰΞϓϦ͕ॊೈʹσʔλΛऔಘͰ͖ΔΑ͏ʹ͍ͯ͠Δ Protocol Buffers ͷεΩʔϚ͕͢Ͱʹ͋ΔͷͰɺ͜ͷఆٛΛར༻ͯ͠ GraphQL API Λ൒ࣗಈੜ੒͍ͯ͠Δ ʢ͜Ε͸࠷ۙ࢝Ίͨ΋ͷͰɺ࣮ࡍʹ͸·ͩ GraphQL Λ௨͍ͯ͠ͳ͍෦෼΋ଟ͍ʣ
  10. ©2021 Wantedly, Inc. ମݧઃܭͰଊ͑ΔγεςϜڥք ද૚ ࠎ֨ ߏ଄ ཁ݅ ઓུ Ϣʔβʔମݧઃܭͷ֊૚

    ϏδϡΞϧσβΠϯ ϨΠΞ΢τ φϏήʔγϣϯσβΠϯ ৘ใઃܭ ίϯςϯπ ػೳ ɾ৘ใΛγεςϜ͔ΒҾ͖ग़ͤΔඞཁ Ұཡը໘ʹ৘ใ"ͷத਎Λ 
 Ͳ͜·Ͱදࣔ͠Α͏ʁ εϚϗͷ৔߹͸ݮΒ͢ʁ 69σβΠϯͷஈ֊Ϟσϧ ΞϓϦ૚ γεςϜ૚ ΞʔΩςΫνϟͷ֊૚ ΞʔΩςΫνϟʹద༻
  11. ©2021 Wantedly, Inc. ίϥϜɿܭࢉ͸Ͳ͜Ͱ࣮ߦ͞ΕΔ͔ʁ ΞϓϦɿओʹ UI ͷඳը΍ঢ়ଶͷมߋɺωοτϫʔΫ௨৴ͱ͍ͬͨܭࢉ͕ ʮݸʑͷϢʔβʔͷσόΠε্ͰʯߦΘΕΔ γεςϜɿσʔλΛॴ࣋ͯ͠Ұ؏ͨ͠υϝΠϯϞσϧͷݩʹ 


    ʮզʑͷΫϥ΢υɾϚγϯ্Ͱʯॲཧ͢Δ API Λఏڙ͢Δ 👉 ͭ·ΓΞϓϦͱ͸ରরతʹશϢʔβʔ͕ܭࢉϦιʔεΛڞ༗͍ͯ͠Δ ͔͜͜ΒʮେྔͷϦΫΤετΛಉ࣌ʹࡹ͘ʯͳͲͷγεςϜݻ༗ͷ໰୊͕ ੜ·Ε͍ͯΔʢٯʹεϖοΫ͕ҟͳΔͳͲΞϓϦݻ༗ͷ໰୊΋ੜ·ΕΔʣ ந৅తͳ֓೦͚ͩͰͳ͘ܭࢉػʹ΋গ͠໨Λ޲͚Δͱྑ͍
  12. ©2021 Wantedly, Inc. 8BOUFEMZͷ৔߹ σʔλ΢ΣΞϋ΢εͱͯ͠ BigQuery Λ࢖͍ͬͯΔ ҙࢥܾఆͷͨΊ BigQuery ͱ࿈ܞ͢Δ

    Looker ͱ͍͏αʔϏεΛ࢖͍ͬͯΔ σʔλͷఆٛ΍ϞσϦϯάΛߦ͏ػೳͱϢʔβʔɾΠϯλʔϑΣΠε ͨͩ͠ɺσʔλͷར༻ͷ͞Εํ͸ҙࢥܾఆΛߦ͏͚ͩͰͳ͍ ਪનΞϧΰϦζϜʹσʔλΛ༩͑ΔͳͲͷܗͰɺγεςϜͷৼΔ෣͍ʹ ϑΟʔυόοΫ͞ΕΔ App/System Data ΞϧΰϦζϜ ऩू ֶश by ܭࢉػ App/System Data ػೳ։ൃ ऩू ෼ੳɾҙࢥܾఆ by ਓؒ 2छྨͷϑΟʔυόοΫɾαΠΫϧ
  13. ©2021 Wantedly, Inc. αʔϏε Ϣʔβʔ ମݧ͢Δ ϒϥϯυͱͯ͠ ೝ஌͢Δ ఏڙ͢΂͖ମݧΛ࡞Δਓ αʔϏεϨϕϧ

    αʔϏε։ൃऀ ఏڙ͢΂͖ମݧͷఔ౓ ɹɹγεςϜɹɹ ৮Δ ϓϩμΫτͱͯ͠ ೝ஌͢Δ WebΞϓϦ iOSΞϓϦ AndroidΞϓϦ ɹΞϓϦ ֤ΞϓϦϓϥοτϑΥʔϜ ΦʔϓϯϓϥοτϑΥʔϜͳͷͰ ΞϓϦͷαʔϒ͸ࣗલ = ϓϩμΫτʢϞϊʣΛ௨ͯ͠ಘΒΕΔશମతͳମݧ γεςϜΛར༻ͨ͠Ԡ༻ιϑτ΢ΣΞ γεςϜɾΞʔΩςΫνϟ ϚΠΫϩαʔϏε γεςϜΛߏ੒͢Δίϯϙʔωϯτ Microservices Architecture ʢγεςϜͷʣ ΞʔΩςΫνϟɾελΠϧ γεςϜج൫ σʔλج൫ ΞϓϦ͸Ϣʔβʔʹର͢Δ Wantedly ͷ γεςϜͷΠϯλʔϑΣΠε (UI) Ͱ͋Δ ΞϓϦΛಈ͔ͨ͢Ίͷ Wantedly ͷ γεςϜͷΠϯλʔϑΣΠε(API)