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

【DevOpsDays Tokyo 2022】レガシーなシステムをリプレースした後に起きた開発...

Avatar for ryurock ryurock
April 21, 2022

【DevOpsDays Tokyo 2022】レガシーなシステムをリプレースした後に起きた開発組織の変化について

2020年2月私が入社した時、システムは現代のモダンなシステムとの剥離が出てきている狭間でした。

一方、会社はその後、すぐに上場をして、一気に組織の人数が増加しました。

システムも社会的責任を果たせるようにアップデートをしなくてはいけないのは自明で、「必要最低限のアップデートをする」という選択ではなく、「全てを作り直す」という選択をして、システムリプレースを行っています。

新しいシステムはモノリシックからマイクロサービス化に変更しましたが、私はマイクロサービス化に伴う組織的な変化、いわゆるコンウェイの法則を期待してマイクロサービス化の採用をおこないました。

本セッションでは、マイクロサービス化を行った後に起きた開発組織の変化について赤裸々にお話できたらと思っています。

Avatar for ryurock

ryurock

April 21, 2022
Tweet

More Decks by ryurock

Other Decks in Technology

Transcript

  1. ձࣾઆ໌ ▪ ϏδωεྖҬʹಛԽͨ͠೔ຊ࠷େڃͷφ ϨοδϓϥοτϑΥʔϜ ▪ ʮεϙοτίϯαϧ = 1࣌ؒΠϯλ Ϗϡʔʯͱ͍͏୹࣌ؒऔҾΛɺςΫϊϩ δʔ

    x ߴ౓ͳΦϖϨʔγϣϯͰߴਫ਼౓ʹϚο νϯά ▪ 2020 ೥౦ژূ݊औҾॴάϩʔεࢢ৔ʹ্ ৔ ஌ݟͱɺ௅ઓΛͭͳ͙ We make insightful connections possible between global leaders and people with expertise ೔ຊ࠷େڃͷφϨοδϓϥοτϑΥʔϜ ※ ΞυόΠβʔ਺ʹ͓͍ͯɺ2022 ೥ 1 ݄ ࣌఺ͷΞυόΠβʔ਺͸ ࠃ಺֎ 45 ສਓ௒ 4
  2. γεςϜΞʔΩςΫνϟ͸Ұ؏ͯ͠ Google Cloud + Python Λ࠾༻ ▪ 2012 ೥૑ۀҎདྷɺ Google

    Cloud ΛΫϥ΢υΠϯϑϥͱ ͯ͠࠾༻ ▪ Application Server ͸ App Engine 1st gen Python2 ▪ Database ͸ Cloud SQL, Datastore ▪ Storage ͸ Cloud Storage ▪ ඇಉظॲஔ͸ Cloud Tasks Ͱ੍ޚ Google Cloud Ͱ Web Application Λߏங͢Δ৔߹ͷҰൠత ͳߏ੒ 7
  3. φϨοδϓϥοτϑΥʔϜͱ͍͏֓೦͕ͳ͍࣌୅͔Βͷઌۦऀͷҝɺ༷ʑͳࢼߦࡨޡΛߦ͍ͳ͕Β αʔϏε͸֦ॆ͍ͯͬͨ͠ 8 ্৔࣌఺Ͱϝϯόʔ͸ ໿ 100 ໊ Python2 ͷαϙʔτऴྃΛ ܴ͑Δ

    2020 ೥ άϩʔεࢢ৔ʹ্৔ 2012 ೥ 12 ݄ ϏβεΫЌ൛ ΛϦϦʔε 2012 ೥ 12 ݄ β൛ϦϦʔε BtoB αʔϏε͕يಓʹ৐Γ ࢝Ί CtoC ޲͚ͷ ج൫γεςϜʹࡌͤΔ 2015೥ BtoB޲͚ ਖ਼ࣜ൛ΛϦϦʔε ଞγϯΨϙʔϧࢧࣾ΋͋ Γɺ global ల։͕Ճ଎Խ 2021 ೥ 11 ݄ ถࠃ Coleman Research Group ࣾΛങऩ ࠷ॳ͸ CtoC ͷαʔϏεͱ͠ ͯελʔτ 2013 ೥ 10 ݄ ਖ਼ࣜ൛ϦϦʔε ٸ଎ͳαʔϏε֦େʹ߹Θͤͯػ ೳ͕૿͍͕͑ͯͬͨɺApplication ΋Πϯϑϥ΋πΪϋΪͩΒ͚ʹ 2017೥ࠒ αʔϏε֦େظ
  4. αʔϏεͷ֦େͰγεςϜ͸ංେԽ ΞʔΩςΫνϟ΍Πϯϑϥ͸औΓ࢒͞Εͨ··ͩͬͨ • 2020 ೥ Python ίϛϡχςΟʹΑΔ Python2 ͷެࣜαϙʔτ͕ऴྃ •

    Ξοϓσʔτ͕ඞཁ • ։ൃϝϯόʔ໿ 35 ໊Ͱෳ਺ͷνʔϜʹ (6 νʔϜ) • ෳ਺ͷαʔϏεɺνʔϜ͕͋Δ͕ɺϞϊϦγοΫͳγεςϜͰ֤αʔϏεɺνʔϜʹ߹Θͤͨదਖ਼Խ ͕೉͘͠ͳͬͯ͘Δ • ಉ͡ GCP ϓϩδΣΫτΛར༻͠ଓ͚͍ͯΔҝɺ༷ʑͳܯࠂ • App Engine 1st gen Python2ͷҠߦͷקࠂ • legacy network ͷར༻ʹΑΔར༻Ͱ͖ΔΫϥ΢υαʔϏεͷ੍ݶ • App Engine 1st gen ͷσϓϩΠ 10000 ϑΝΠϧ੍໿ʹҾ͔͔ͬΓσϓϩΠ͕Ͱ͖ͳ͘ͳΔɻ౳ͳͲ 9
  5. ݩʑ͸طଘίʔυͱΠϯϑϥΛ Python2 => Python3 ʹ͚ͩΞοϓσʔτ͠Α͏ͱ͍ͯͨ͠ ্͔͠͠৔ɺϢʔβʔͷ૿Ճɺ૊৫ͷ֦େͰࠓޙαʔϏ εɺ૊৫ͱͯ͠कΒͳͯ͘͸ߦ͚ͳ͍ϧʔϧ౳΋ͲΜͲ Μ૿͍͑ͯ͘͠ɺͦΕΛܧଓతʹվળͰ͖Δ࢓૊Έ΋Τ ϯδχΞ։ൃ૊৫ͱͯ͠த௕ظతʹඞཁͰ͋Δͷ͸໌ന ͩͬͨɻ

    ͦ͜ͰͱΓ͋͑ͣ Python3 ʹҠߦ͢Δɻ ͱ͍͏ߟ͑ํ͔ΒɺγεςϜɺઃܭΛ3೥ޙΛݟਾ͑ͨ ૊৫ମ੍(300ਓن໛ͷ૊৫)ʹ଱͑͏ΔΑ͏ʹࢥ͍੾ͬ ͯϦϓϨʔε͢Δɻ ͱ͍͏಺༰ΛఏҊɻվΊͯ։ൃ૊৫ͷ՝୊੔ཧ΍εέ δϡʔϧͷௐ੔ɺ૯޻਺ͷݟੵ΋Γ౳Λࢉग़ͯ͠γες ϜϦϓϨʔεͷܾஅΛ͢Δ 11
  6. γεςϜϦϓϨʔεͰͷେ͖ͳมߋ఺ ʲΠϯϑϥʳ ▪ ৽͍͠ Google Cloud ϓϩδΣΫτʹҠߦ ▪ طଘγεςϜʹӨڹ͕ग़ͳ͍Α͏ʹҠߦΛਐΊͨ ͔ͬͨ

    ▪ طଘͷ͕͠ΒΈʹࠨӈ͞Εͨ͘ͳ͔ͬͨ ʲΞϓϦέʔγϣϯʳ ▪ Python 2 => Python 3 ΁ͷΞοϓάϨʔυ ▪ ΞοϓάϨʔυʹ൐͍ΞϓϦέʔγϣϯͷमਖ਼΋ ඞཁ ▪ αʔϏε෼ׂ (Micro ServiceԽ) ▪ αʔϏεΛͬ͘͟Γ෼ྨ͢Δͱ4ͭʹͳΔ ▪ BtoB ޲͚αʔϏε ▪ ڊେա͗ͯ·ͣ͸େ͖ͳմͱͯ͠෼ׂ ▪ CtoC ޲͚ * 2 ▪ ݕࡧϞδϡʔϧͱͯ͠෼ׂ 13 Python2 => Python3
  7. γεςϜϦϓϨʔεͷઓུ ΞʔΩςΫτ͸MicroserviceԽΛҙࣝͨ͠ઃܭ ▪ VCS (git repository), Deploy(CI), App Server ͸

    Feature νʔϜ୯ҐͰ༻ҙ ▪ DB ͸෼ׂͤͣʹͦͷ·· ▪ DBͷ෼ׂ΋͔͚ͨͬͨ͠Ͳ΋ɺ։࢝࣌఺Ͱίετ͕ലେʹͳΓ ͦ͏ͱ͍͏ݒ೦͔Β࠷ॳείʔϓΛ֎ͨ͠ 
 ※ϓϥϯ্͸ 3 ೥ܭըͷதͰ࣮ࢪ͢Δ༧ఆ ▪ API ୯ҐͰطଘγεςϜͷ Endpoint Λػೳ୯ҐͰมߋͯ͠੾ସ ▪ API ͷ੾ସ͕׬ྃޙɺϑϩϯτΤϯυΛ৽؀ڥʹҠߦ ▪ Ұ෦ͷػೳ͸θϩϕʔεͰ࡞Γ௚͢ ▪ νʔϜʹࡋྔΛ౉͢ࣄΛ༏ઌͨ͠ ΍Βͳ͍͜ͱ ▪ ա౓ͳ෼ׂ ▪ Micro Service Architecture ͸֤νʔϜʹஈ֊తͳܦݧΛ༩͑ͳ͍ͱ ӡ༻Ͱഁ୼͢ΔΠϝʔδ͕Ͱ͖ͨͷͰɺࠓ͸ ʮMicro Service ͬΆ ͍ʯఔ౓ʹ෼ׂͰඞཁʹԠͯ͡࠶෼ׂɻͱ͍͏ํ਑ʹͨ͠ 15
  8. ڊେͳϞϊϦγοΫʹΑΔอकతͳߟ͑ͷຮԆ ▪ ։ൃऀͷԣஅతͳ֬ೝ͓࢕͍Ϛϥιϯ ▪ αʔϏεͷڥքઢ͕ෆ઱໌Ͱɺʮ୭͕΍Δ ͷ͔ʁʯͰࢥߟ͕ࢭ·Δ ▪ ʮڊେͳڞ௨ϧʔϧʯͰ·ͨࢭ·Δ 18 Service

    Team A => Service Team B ։ൃऀͷԣஅతͳมߋͷ ֬ೝϦϨʔ Service Team B => Service Team C Service Team D => Service Team E ڊେͳڞ௨ϧʔϧ͕น͕ ։ൃऀͷ໨ͷલʹͦͼཱ͑ͭ มԽΑΓ΋ै͏͜ͱʹ ׳Εͯ͠·͏ ݁ՌγχΞ։ൃऀʹγϫد͕͖ͤͯ ଟ๩ͳγχΞ։ൃऀ͸ಈ͚ͳ͍ ͱ͍͏δϨϯϚ
  9. ຊ౰ʹͰ͖Δͷ͔ʁͱ͍͏ջٙతͳ൓Ԡ Θ͔Βͳ͍ɻΘ͔Βͳ͍ɻΘ͔Βͳ͍ɻͷ࿈ଓ ▪ γεςϜߏ੒౳৭ʑͱఏҊΛ͕ͨ͠ɺΘ͔Βͳ͍ͷݴ༿ͷ ࿈ଓͰຊ౰ʹ৺͕ંΕͦ͏ʹͳͬͨ ▪ Θ͔Βͳ͍͔ΒϦιʔε΋খ͔֬͘͞͠อͰ͖ͳ͍ ▪ ધग़͸খ͞ͳધ͔Β։࢝ ▪

    ͦ΋ͦ΋ϦϓϨʔεͷ౰ࣄऀҙࣝ΋رബ ▪ ͳͥͩ…..ਏ͍ͬͯᄁ͍͍ͯΔͷʹ…. ▪ ϓϩτλΠϓΛ࡞ͬͯڞ༗ͯ͠΋ແؔ৺ ▪ ͳͥͩ….͜͜Λ͜͏ͯ͠΄͍͠…..ͬͯᄁ͍͍ͯΔͷʹ….. 22 ʮ΍ͬͨ͜ͱ͕ͳ͍͜ͱ΁ͷڪාʯͷ ࣮ࡍͷϦΞΫγϣϯ
  10. ։ൃऀͷԣஅతͳ֬ೝ͓࢕͍Ϛϥιϯͷ࡟ݮ ▪ Slack౳Ͱมߋ͍͚ͨ͠Ͳ΋ɺ֤νʔϜͷӨڹൣғ͕େ ͖ͯ͘ख͕͚ͭͣΒ͍ɻͱ͍͏Α͏ͳڣͼ͸େ෼ݮͬ ͖ͯͨɻΑ͏ʹײ͡Δ ▪ ͱ͸͍͑ɺDBϨΠϠʔ͕ີ݁߹ͳͷͰ͋Δఔ౓͓ ࢕͍͸ൃੜ͢Δ ▪ ʮӨڹൣғͷ͓࢕͍ʯͷΑ͏ͳΞδΣϯμͷ਺͕େ෼

    ݮ͖ͬͯͨɻΑ͏ʹײ͡Δ ▪ ਤΕΔࢦඪ͸ͳ͍͕ɺମײతʹݮͬͨؾ͕͢Δ ▪ ͦ΋ͦ΋ϦϙδτϦ͕νʔϜ୯ҐͰผΕͨͷͰஈʑͱ ؾʹ͠ͳ͘ͳ͖ͬͯͨ 25 Service Team A => Service Team B ᶃ ։ൃऀͷԣஅతͳ มߋͷ֬ೝϦϨʔ Service Team B => Service Team C Service Team D => Service Team E ᶄ ։ൃϦʔμʔձٞʹΑΔڠٞ BEFORE ᶅ Approve ͞Εͣ௥ՃͰ ֬ೝ͢Δ͜ͱϦετ͕ ௥Ճ ᶃ ΁໭Δ ීஈ໨ʹ͠ͳ͍΋ͷ͸ؾʹͳΒͳ͍ ʲ݁Ռʳ େ෼ݮͬͨΑ͏ͳؾ͕͢Δ
  11. աఔͰى͖ͨࣄ ▪ ࠷ॳ͸श׳͕͵͚ͣʮ͓࢕͍ϦϨʔʯ͕ൃੜͨ͠ ▪ ݁ߏ৭ΜͳνʔϜʹԿճ΋ʮجຊࣗ༝ʹ΍ͬͯྑ ͍ʯͱݴ͍ଓ͚ͨ ▪ ੹೚ൣғ͕ෆ઱໌ͳ෦෼ͷ͓࢕͍͸γεςϜͷ෼཭ ͕ͦ΋ͦ΋Ͱ͖͍ͯͳ͍ͷͰɺγεςϜͷ੹೚ൣғ ͸Կճ΋ٞ࿦ͨ͠

    ▪ ͦ΋ͦ΋ϦϙδτϦ͕νʔϜ୯ҐͰ෼͔ΕͨͷͰ ஈʑͱ֤νʔϜ͕ؾʹ͠ͳ͘ͳ͖ͬͯͨ 26 ͜Ε͕Ұ൪ྑ͔ͬͨͱࢥͬͨ ϙΠϯτͳͷͰ΋͏Ұ౓ ීஈ໨ʹ͠ͳ͍΋ͷ͸ؾʹͳΒͳ͍ ࢥ૝͸఻͑ଓ͚Δ
  12. ϕςϥϯϝϯόʔͷଐਓԽΛ๷ࢭ ʲ݁Ռʳ͋·ΓมԽΛײ͡ΒΕͳ͔ͬͨ ▪ چγεςϜͷίʔυΛجຊҠ২ʹͳΔͷͰ݁ہݩ͕ ෳࡶͰ͋Ε͹ɺ΍͸Γྺ࢙తܦҢΛ஌͍ͬͯΔਓ͕ ΍Β͟ΔΛಘͳ͘ͳΔ → ઓུΛ࿅Δ্Ͱͷա৒ͳظ଴஋ͩͬͨؾ͕͢Δ ͨͩ͠ɺҠߦͷϓϩηε͸෺ྔ(ਓతϦιʔε)͕େྔ ʹඞཁͳͷͰɺػೳA

    Λ৮ͬͨ͜ͱ͕ͳ͍ਓ͕Ҡߦϓ ϩηεʹΞαΠϯ͞ΕΔέʔε͕͋ͬͨ → ҠߦͷաఔͰ͋Δఔ౓͸ଐਓԽ͸෼ࢄ͞Ε͔ͨ΋ ͠Εͳ͍ 28 ϕςϥϯϝϯόʔͷଐਓԽΛ๷ࢭ ϕςϥϯϝϯόʔ͕ෳࡶͳ෦෼ΛҠ২ ϕςϥϯҎ֎ͷϝϯόʔ ʮ͜ͷϨʔϧʹ৐Ε͹ྑ͍ΜͰ͢Ͷʯ
  13. աఔͰى͖ͨࣄ ▪ ϨΨγʔίʔυ͔Βͷ୤٫Ͱɺ֤ Feature νʔϜͷ ࠓ·Ͱͷࢥ͍΋͋Γɺಉ͡աͪΛ͠ͳ͍ͨΊ͋Δఔ ౓γχΞϨϕϧ͕࠷ॳҠߦΛ࢝ΊΔɻͱ͍͏ͷ͸Ͳ ͷνʔϜͰ΋ಉ͡܏޲ͩͬͨ ▪ Ҡߦͬͯਏ͍ࣄ΋ଟ͍ͷͰɺϝϯόʔͷଟ͕͘ςϯ

    γϣϯ௿Ί͔ͳʁͱࢥ͚ͬͨͲ΋ɺσΟϨΫτϦઃ ܭͱ͔ϧϯϧϯ̇ ϝϯόʔ͕݁ߏ͍ͨؾ͕͢Δ ▪ ཱ͕࣌ؒͭͱ෼ׂ͞ΕͨαʔϏεͰ΋ෆຬ͸ग़࢝Ί ͍ͯΔΑ͏ͳؾ͕͢Δ ‏ (ࠓίί) 29 ݁ہͷॴɺػೳͷ౷ഇ߹Λͯ͠੔ཧ͢Δ͔ Feature Team Λߋʹ෼ׂͯ͠খ͘͞͠ͳ͍ͱ೉͍͠ ͷͰҾ͖ଓ͖վળ ม͑ͨͯ͘΋ม͑ΒΕͳ͍աڈͷਏ͍෦෼ΛઃܭͰΧόʔ͢Δ ݁ߏָͦ͠͏ʹઃܭ͍ͯͨ͠ ΞϓϦέʔγϣϯ͸࡞ͬͨ࣌఺ ͔Β௠෗Խ͕͸͡·Δ
  14. աఔͰى͖ͨࣄ ▪ ࡋྔΛ༩͑ͨ෼ɺ੹೚΋ηοτʹͳΔͷͰɺࣗ෼ୡ ͷαʔϏεͷγεςϜํ਑౳Ͱ೰Ήέʔε͕݁ߏଟ ͘ݟड͚ΒΕͨ ▪ த௕ظతʹݟΕ͹ྑ͍ํ޲ͩͱࢥ͏ ▪ ࡋྔΛ༩͑ͨ෼ɺ౷Ұతͳϧʔϧ΍ద༻͸ٯʹ೉қ ౓͕ߴ͘ͳΔ

    ▪ αʔϏεʹԣஅ͢ΔΑ͏ͳػೳͷӡ༻ɾอकͷ ड͚ࡼͱͯ͠ʮج൫νʔϜʯΛ૑ઃͯ͠ରԠ ▪ Feature νʔϜ͸ʮ΋ͬͱࣗ༝Λ!!ʯͱதԝίϯτ ϩʔϧͨ͠΄͏͕ྑ͍෦෼Ͱج൫νʔϜͷҙݟ ͷ૬ҧ͕͋ͬͨΓ͢ΔͷͰɺͦΕͰ΋೉͍͠ 32 બ୒ݖΛ༩͑ͨͷͰɺࣗ෼ୡͰߟ͑Δ෼೰Ή ૊৫ن໛తʹ தԝίϯτϩʔϧΛ͢Δ෦ୂ ͸ඞཁͳͷͰ૑ઃ
  15. 3೥Ͱ΍Δ͜ͱ͸͍ͬͺ͍͕ͩɺ৭ʑͱಈ͖ग़͍ͯ͠Δ 34 ίετͱϦεΫ͕ߴ͍ DBͷਖ਼نԽΛ࢝ΊΔ 2022 ೥ 4݄ DBͷਖ਼نԽΛணख λεΫϑΥʔενʔϜΛ ্ཱͪ͛Δ

    2020 ೥ 9 ݄ γεςϜϦϓϨʔεΛ։࢝ গͮͭ͠ҠߦΛ࢝ΊΔ 2021೥ 10 ݄ 2νʔϜ໨͕ αʔϏεҠߦΛϩʔϯν উརએݴ༧ఆ 2023 ೥ 12݄ Ҡߦ׬ྃ༧ఆ গͮͭ͠ҠߦΛ࢝ΊΔ 2021 ೥ 5 ݄ ࠷ॳͷ1νʔϜ͕ αʔϏεҠߦΛϩʔϯν ϑϧεΫϥονҠߦνʔϜ͕ ઃܭ։࢝ 2022೥ 1 ݄ 3νʔϜ໨Ҡߦ४උ