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

20年ものの巨大プロダクトをKubernetesに移行している話 後日談/Garoon on Kubernetes after talk

20年ものの巨大プロダクトをKubernetesに移行している話 後日談/Garoon on Kubernetes after talk

サイボウズのPHP Conference 2022の後日談イベントの発表資料です

Yuichi Sugiyama
PRO

October 12, 2022
Tweet

More Decks by Yuichi Sugiyama

Other Decks in Technology

Transcript

  1. 20೥΋ͷͷڊେϓϩμΫτΛ
    KubernetesʹҠߦ͍ͯ͠Δ࿩
    αΠϘ΢ζגࣜձࣾ Garoon։ൃ ਿࢁ ༞Ұ


    PHP Conference 2022 ޙ೔ஊ


    #phpcon #phpcon2022

    View Slide

  2. Whoami
    • ਿࢁ ༞Ұ @oogFranz


    • αΠϘ΢ζ8೥໨ΤϯδχΞ


    • େاۀ޲͚άϧʔϓ΢ΣΞGaroon(Ψϧʔϯ) ࡞ͬͯΔ


    • ෳۀδϟζϛϡʔδγϟϯ@MASHݭָஂ

    View Slide

  3. αΠϘ΢ζ Garoon
    • ։ൃ20೥ʂ


    • େاۀ޲͚ͷάϧʔϓ΢ΣΞ


    • PHPͱMySQLͰಈ͘


    • ύοέʔδ൛ͱΫϥ΢υ൛͕͋Δ

    View Slide

  4. αΠϘ΢ζ Garoon
    • ։ൃ20೥ʂ


    • େاۀ޲͚ͷάϧʔϓ΢ΣΞ


    • PHPͱMySQLͰಈ͘


    • ύοέʔδ൛ͱΫϥ΢υ൛͕͋Δ

    View Slide

  5. ݱΫϥ΢υΠϯϑϥج൫ʢForestʣ
    • 2011೥ʹαʔϏε։࢝


    • ࣗࣾσʔληϯλʔ


    • 10୆ఔ౓ͷVMΛ1ηοτʹͯ͠ߏ੒

    ʢApplication, DB, ϑΝΠϧαʔό…ʣ


    • ߏஙʹܞΘͬͨ৿̋͞Μͷ໊લ͔ΒForestͱݺ͹ΕΔ

    View Slide

  6. ݱΫϥ΢υΠϯϑϥج൫ʢForestʣ
    Forest ʹ͸ଟ༷ͳ໾ׂΛ࣋ͬͨ෺ཧɾԾ૝αʔόʔ܈ͱɺ

    ͦΕΒΛ؅ཧ͢ΔίϚϯυϥΠϯπʔϧ͕ଘࡏ͠ɺ

    ͦͷෳࡶ͔͞Β໎͍ͷ৿ͷΑ͏ʹײ͡Δ͜ͱ΋͋Δ͔΋͠Ε·ͤΜɻ

    ͔͠͠ɺਖ਼͍͠஌ࣝΛಘͯɺ৿ͷ஍ਤ΍ϧʔϧΛཧղ͢Ε͹ɺ

    ๛͔ͳՄೳੑΛ͍࣋ͬͯΔ͜ͱʹؾͮ͘͜ͱͰ͠ΐ͏ɻ


    αΠϘ΢ζࣾ಺༻ޠࣙయ BozupediaΑΓ

    View Slide

  7. ݱΫϥ΢υΠϯϑϥج൫ʢForestʣ
    Forest ʹ͸ଟ༷ͳ໾ׂΛ࣋ͬͨ෺ཧɾԾ૝αʔόʔ܈ͱɺ

    ͦΕΒΛ؅ཧ͢ΔίϚϯυϥΠϯπʔϧ͕ଘࡏ͠ɺ

    ͦͷෳࡶ͔͞Β໎͍ͷ৿ͷΑ͏ʹײ͡Δ͜ͱ΋͋Δ͔΋͠Ε·ͤΜɻ

    ͔͠͠ɺਖ਼͍͠஌ࣝΛಘͯɺ৿ͷ஍ਤ΍ϧʔϧΛཧղ͢Ε͹ɺ

    ๛͔ͳՄೳੑΛ͍࣋ͬͯΔ͜ͱʹؾͮ͘͜ͱͰ͠ΐ͏ɻ


    αΠϘ΢ζࣾ಺༻ޠࣙయ BozupediaΑΓ
    ೥Ҏ্ͷ'PSFTUͷ੒௕ʹΑΓɺ
    ͞·͟·ͳ໰୊͕ൃੜ͍ͯ͠Δ

    View Slide

  8. ݱΫϥ΢υΠϯϑϥج൫ʢForestʣͷ՝୊

    εέʔϥϏϦςΟ͕
    ௿͍
    ϝϯςφϯεੑ͕
    ௿͍
    ϝϯςφϯεͷ
    μ΢ϯλΠϜ͕௕͍
    ։ൃͱӡ༻ͷؒʹน
    αʔϏεͷߏ੒มߋ͕
    ࠔ೉

    View Slide

  9. Ϋϥ΢υΠϯϑϥج൫࡮৽ϓϩδΣΫτ
    Neco
    • εέʔϥϏϦςΟ΍ϝϯςφϏϦςΟͷ໰୊͔Βελʔτ


    • VMϕʔεͷߏ੒͔Βίϯςφϕʔεͷߏ੒ʹ࡮৽


    • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ


    • ج൫ଆͷ։ൃ͸2018೥։࢝ɻ2021೥ʹҰ୴׬ྃʂ


    • https://blog.cybozu.io/entry/ever-lasting-neco

    View Slide

  10. Ϋϥ΢υΠϯϑϥج൫࡮৽ϓϩδΣΫτ
    Neco
    • εέʔϥϏϦςΟ΍ϝϯςφϏϦςΟͷ໰୊͔Βελʔτ


    • VMϕʔεͷߏ੒͔Βίϯςφϕʔεͷߏ੒ʹ࡮৽


    • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ


    • ج൫ଆͷ։ൃ͸2018೥։࢝ɻ2021೥ʹҰ୴׬ྃʂ


    • https://blog.cybozu.io/entry/ever-lasting-neco

    (BSPPOͷҠߦ͕ࠓ೥͔Βελʔτʂ

    View Slide

  11. Ϋϥ΢υΠϯϑϥج൫࡮৽ϓϩδΣΫτ
    Neco
    • εέʔϥϏϦςΟ΍ϝϯςφϏϦςΟͷ໰୊͔Βελʔτ


    • VMϕʔεͷߏ੒͔Βίϯςφϕʔεͷߏ੒ʹ࡮৽


    • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ


    • ج൫ଆͷ։ൃ͸2018೥։࢝ɻ2021೥ʹҰ୴׬ྃʂ


    • https://blog.cybozu.io/entry/ever-lasting-neco

    (BSPPOͷҠߦ͕ࠓ೥͔Βελʔτʂ
    ׬ྃ໨ඪ͸೥ʂ

    View Slide

  12. ͕͜͜େม৽Ϋϥ΢υج൫ʢNecoʣҠߦ
    • ίϯςφ͸͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ


    • ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯདྷΕΔ͔ʁ


    • Πϯϑϥ஌ࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ

    View Slide

  13. ͕͜͜େม৽Ϋϥ΢υج൫ʢNecoʣҠߦ
    • ίϯςφ͸͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ


    • ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯདྷΕΔ͔ʁ


    • Πϯϑϥ஌ࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ

    View Slide


  14. Garoon Pods
    ίϯςφ͸͙͢ࢮ͵ʂ
    Garoon αʔϏε
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    ΞΫηε෼ࢄ

    View Slide


  15. Garoon Pods
    ίϯςφ͸͙͢ࢮ͵ʂ
    Garoon αʔϏε
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS


    ͍ͣΕ͔ͷίϯςφ΍
    1PEʹ໰୊͕͋ͬͨΒ

    View Slide


  16. Garoon Pods
    ίϯςφ͸͙͢ࢮ͵ʂ
    Garoon αʔϏε
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS


    ͍ͣΕ͔ͷίϯςφ΍
    1PEʹ໰୊͕͋ͬͨΒ
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    ໰୊ͷ1PEΛऔΓআ͖
    ৽͘͠1PEΛ࡞੒͢Δ

    View Slide

  17. VMϕʔεͷ໰୊
    • VM͸جຊతʹ͸མͱͤͳ͍ʢ৑௕Խ͸͍ͯ͠Δ͕ʣ


    • ໰୊͕͋ͬͨ࣌ʹVMΛ1୆௥Ճͯ͠ɺɺɺͱ͍͏ରॲ͸ࠔ೉


    • VMͷઃఆ͸10೥Ҏ্ͷΫϥ΢υӡ༻ʹ൐͍ෳࡶʹ


    • ӡ༻ଆͷઃఆ΋ΞϓϦέʔγϣϯʢGaroonʣଆͷઃఆ΋ෳࡶ

    View Slide

  18. ίϯςφ͸͙͢ࢮ͵ʂ
    • ίϯςφͰ͸໰୊͕ى͖ͨΒ͙͢ʹམͱͯ͠ɺ

    ৽͍͠΋ͷΛ࡞Δɻ


    • ͜ΕʹΑΓߴՄ༻ੑͱεέʔϧΞ΢τ͕࣮ݱՄೳ


    • ࣮ࡍʹίϯςφ͕੬͙ͯ͘͢ࢮ͵ɺͱ͍͏ΑΓ΋

    ίϯςφ͕͍ͭࢮΜͰ΋ྑ͍લఏͰઃܭ͠Α͏ɺ

    ͱݴ͏͓࿩ɻ

    View Slide

  19. ίϯςφ͸͙͢ࢮ͵ʂ
    • ίϯςφͰ͸໰୊͕ى͖ͨΒ͙͢ʹམͱͯ͠ɺ

    ৽͍͠΋ͷΛ࡞Δɻ


    • ͜ΕʹΑΓߴՄ༻ੑͱεέʔϧΞ΢τ͕࣮ݱՄೳ


    • ࣮ࡍʹίϯςφ͕੬͙ͯ͘͢ࢮ͵ɺͱ͍͏ΑΓ΋

    ίϯςφ͕͍ͭࢮΜͰ΋ྑ͍લఏͰઃܭ͠Α͏ɺ

    ͱݴ͏͓࿩ɻ

    ύοέʔδͰ࢝·ͬͨ(BSPPOʹ͸ͦͷલఏ͕ͳ͍

    View Slide


  20. Garoon Pods
    ୯ʹίϯςφԽ͢Δͱɺίϯςφ͕ঢ়ଶΛ࣋ͭ
    Garoon αʔϏε
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    ϑΝΠϧΞοϓϩʔυ
    ϩάϑΝΠϧ
    Ωϟογϡ

    View Slide


  21. Garoon Pods
    ୯ʹίϯςφԽ͢Δͱɺίϯςφ͕ঢ়ଶΛ࣋ͭ
    Garoon αʔϏε
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    ϑΝΠϧΞοϓϩʔυ
    ϩάϑΝΠϧ
    Ωϟογϡ


    1PE͕ෆ༻ҙʹམͪΔͱɺಓ࿈ΕͰ͍Ζ͍Ζফ͑ͯ͠·͏


    View Slide

  22. Garoon Pods
    ղܾࡦ1ɿঢ়ଶΛ֎෦αʔϏεʹ͓͘
    Garoon αʔϏε
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    KVS
    ϑΝΠϧετϨʔδ
    ϩάαʔϏε

    View Slide


  23. Garoon Pods
    ղܾࡦ2ɿϩάϑΝΠϧΛαΠυΧʔͰٵ͍ग़͢
    Garoon αʔϏε
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    -PHಡΈग़͠
    -PHಡΈग़͠
    -PHಡΈग़͠ ϩάج൫αʔϏε
    Volumeʹॻ͖ग़͢

    View Slide


  24. Garoon Pods
    ղܾࡦ2ɿϩάϑΝΠϧΛαΠυΧʔͰٵ͍ग़͢
    Garoon αʔϏε
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    /HJOY
    $POUBJOFS
    "1
    $POUBJOFS
    -PHಡΈग़͠
    -PHಡΈग़͠
    -PHಡΈग़͠ ϩάج൫αʔϏε
    Volumeʹॻ͖ग़͢
    ͜Ε͔Βؤுͬͯ࡞Γ·͢ɻɻɻ😇

    View Slide

  25. ίϯςφϕʔεͰ͸
    • ίϯςφ͸͍ͭམͪͯ΋ྑ͍Α͏ʹઃܭ͢Δ


    • K8s͸ίϯςφ͕མͪͨΒࣗಈతʹ৽ͨͳίϯςφΛ࡞੒


    • ઃఆ͸͢΂ͯίʔυԽ


    • ঢ়ଶΛίϯςφ֎෦ʹ௥͍΍Δʢϛυϧ΢ΣΞɺαΠυΧʔί
    ϯςφʣ

    View Slide

  26. ͕͜͜େม৽Ϋϥ΢υج൫ʢNecoʣҠߦ
    • ίϯςφ͸͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ


    • ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯདྷΕΔ͔ʁ


    • Πϯϑϥ஌ࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ

    View Slide

  27. ΦϨΦϨϑϨʔϜϫʔΫ
    • 20೥΋ͷͷϑϨʔϜϫʔΫ


    • ։ൃ౰ॳʢ20೥Ҏ্લʣͱͯ͠͸ଥ౰ͳબ୒


    • DB઀ଓͳͲ͕ύοέʔδલఏͰॻ͔Ε͍ͯΔ


    • ϑΝΠϧͷಈతಡΈࠐΈͳͲɺՄಡੑʹ͸೉͋Γ

    View Slide

  28. is_forest() ஍ࠈ
    • ύοέʔδ൛͔ݱΫϥ΢υ൛ʢForestʣ͔ͷݟ෼͚͸ɺ

    ઃఆϑΝΠϧͷ஋Λࢀর͍ͯ͠Δ


    • Ϋϥ΢υ؀ڥԼΛௐ΂Δϝιουɺ

    if(is_forest()) ͕਺ඦՕॴʹॻ͔Ε͍ͯΔ

    if (is_forest()) {
    $validate = new ValidateFileIdentifierOnForest($id);
    … //͜͜ʹԿेߦ͔͕ͭͮ͘
    } else {
    $validate = new ValidateFileIdentifierOnpremise($id);
    … //͜͜ʹԿेߦ͔͕ͭͮ͘
    }

    View Slide

  29. is_forest() ஍ࠈ
    • ύοέʔδ൛͔ݱΫϥ΢υ൛ʢForestʣ͔ͷݟ෼͚͸ɺ

    ઃఆϑΝΠϧͷ஋Λࢀর͍ͯ͠Δ


    • Ϋϥ΢υ؀ڥԼΛௐ΂Δϝιουɺ

    if(is_forest()) ͕਺ඦՕॴʹॻ͔Ε͍ͯΔ

    if (is_forest()) {
    $validate = new ValidateFileIdentifierOnForest($id);
    … //͜͜ʹԿेߦ͔͕ͭͮ͘
    } else {
    $validate = new ValidateFileIdentifierOnpremise($id);
    … //͜͜ʹԿेߦ͔͕ͭͮ͘
    }
    ͜͜ʹJT@OFDP
    Λ࡞ͬͯ଍͍ͯ͘͠ͷ͸ݱ࣮తͰͳ͍

    View Slide

  30. ΋ͬͯͯΑ͔ͬͨDIίϯςφ
    • ͜͜਺೥ͷվળʹΑΓDIίϯςφ͕ಋೖʂʂ


    • ΦϨΦϨϑϨʔϜϫʔΫͳͷͰɺcomposerͰphp-diΛಋೖ


    • ৽ج൫(Neco)Ͱ͋Δ͔Ͳ͏͔ΛݟΔͷ͸DIίϯςφͷొ࿥෦෼ʹӅṭ


    • ͍ͭͰʹύοέʔδ൛͔ݱج൫(Forest)͔΋

    DIίϯςφͰ֬ೝ͢ΔΑ͏ʹϦϑΝΫλ

    https://speakerdeck.com/ynkt/sok-gai-shan-shi-bai-karaxue-bu-regasipurodakutonili-tixiang-kautimuzuo-ri?slide=23

    View Slide

  31. ΍ͬͯͯΑ͔ͬͨࣗಈςετ
    • ͜͜਺೥ͷվળͰϢχοτςετͱE2Eςετͷ੔උ͕ਐΜͩ


    • ج൫෦෼ʹखΛՃ͑ͨͱ͖ͷӨڹൣғ͸Ͱ͔͍͕ɺ

    Ͳ͔͜ͷςετͰ͸མͪΔ͔Βٯʹେৎ෉ͩΖ͏ɺͱ͍͏҆৺ײ


    • ·ͩ·ͩ଍Γ͍ͯͳ͍͕ɺ͕Μ͹ͬͯ࡞͍͔͍ͬͯͨ͸͋ͬͨ

    View Slide

  32. Ͳ͏ͤϑϨʔϜϫʔΫ෦෼ʹ৮ΔͳΒ
    • ϑϨʔϜϫʔΫ෦෼͸Մಡੑʹ೉͋Γ


    • ίʔυΛมߋ͢Δػձ͸গͳ͍😇


    • ίʔυΛಡΉػձ͸ଟ͍😩


    • खΛՃ͑ʹ͔ͬͨ͘ϑϨʔϜϫʔΫ෦෼ͷ

    ϦϑΝΫλɾϦϥΠτΛਐΊΔ͖͔͚ͬʹ

    View Slide

  33. Ͳ͏ͤϑϨʔϜϫʔΫ෦෼ʹ৮ΔͳΒ
    • ϑϨʔϜϫʔΫ෦෼͸Մಡੑʹ೉͋Γ


    • ίʔυΛมߋ͢Δػձ͸গͳ͍😇


    • ίʔυΛಡΉػձ͸ଟ͍😩


    • खΛՃ͑ʹ͔ͬͨ͘ϑϨʔϜϫʔΫ෦෼ͷ

    ϦϑΝΫλɾϦϥΠτΛਐΊΔ͖͔͚ͬʹ

    νʔϜͰ߹ҙΛऔΓͭͭɺۃྗϦϑΝΫλΛਐΊ͍ͯΔͧʂ

    View Slide

  34. ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯ͜ΕΔ͔
    • ͜͜਺೥ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ

    ਐḿ͕ग़͠΍͘͢ͳ͍ͬͯ͸͍Δ


    • ͱ͸͍͑खΛग़͠ʹ͍͘ͱ͜Ζ͸ଟ͍


    • ͦ͏͍͏ͱ͜Ζ͸ੵۃతʹϦϑΝΫλ͍ͯ͘͠😤

    View Slide

  35. ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯ͜ΕΔ͔
    • ͜͜਺೥ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ

    ਐḿ͕ग़͠΍͘͢ͳ͍ͬͯ͸͍Δ


    • ͱ͸͍͑खΛग़͠ʹ͍͘ͱ͜Ζ͸ଟ͍


    • ͦ͏͍͏ͱ͜Ζ͸ੵۃతʹϦϑΝΫλ͍ͯ͘͠😤

    View Slide

  36. ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯ͜ΕΔ͔
    • ͜͜਺೥ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ

    ਐḿ͕ग़͠΍͘͢ͳ͍ͬͯ͸͍Δ


    • ͱ͸͍͑खΛग़͠ʹ͍͘ͱ͜Ζ͸ଟ͍


    • ͦ͏͍͏ͱ͜Ζ͸ੵۃతʹϦϑΝΫλ͍ͯ͘͠😤

    ෛ࠴ฦࡁͱͷόϥϯε͸೉͍͠ɻɻɻ😇

    View Slide

  37. ͕͜͜େม৽Ϋϥ΢υج൫ʢNecoʣҠߦ
    • ίϯςφ͸͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ


    • ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯདྷΕΔ͔ʁ


    • Πϯϑϥ஌ࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ

    View Slide

  38. Πϯϑϥ஌ࣝ0͔ΒͷνʔϜ࡞Γ
    • Garoon։ൃνʔϜ͸͍··Ͱྑ͘΋ѱ͘΋ɺ

    ΠϯϑϥपΓΛؾʹͤͣ։ൃΛਐΊΒΕ͍ͯͨ


    • ΞϓϦέʔγϣϯϨΠϠͱΠϯϑϥϨΠϠ͕ผΕ͍ͯͨ


    • ίϯςφʁK8sʁͳʹͦΕ͓͍͍͠ͷʁ

    View Slide

  39. ΤΩεύʔτνʔϜͷڠྗ
    • ੜ࢈ੑ޲্νʔϜϝϯόʔʹ୹ظతʹJoin


    • Docker, CIͷΤΩεύʔτ


    • ίϯςφԽͷ஌ݟΛνʔϜʹ

    ڞ༗ͯ͠΋Β͏


    • खͷपΓʹ͍͘CIͷ੔උ΋ਐΊͯ΋Β͏

    https://blog.cybozu.io/entry/2020/08/31/080000

    View Slide

  40. Ϟϒ
    • ࡞ۀ͸جຊϞϒ


    • ϞϒͷதͰνʔϜͷ஌ݟΛڞ༗͍ͯ͘͠


    • ΤΩεύʔτʹ΋Ϟϒʹೖͬͯ΋Β͏

    View Slide

  41. ෼ใ
    • ෼ใʹٙ໰Λॻ͖ࠐΉͱ

    ӡ༻νʔϜ΍NecoνʔϜ͔Βճ౴͕ಧ͘

    View Slide

  42. νʔϜͰͷษڧձ
    • ӡ༻ͷجૅ஌ࣝΛνʔϜͰ͚ͭΔ


    • DevOpsϋϯυϒοΫͷྠߨ

    View Slide

  43. ΠϯϑϥͰֶͿ͜ͱ͸ଟ͍
    • ΤΩεύʔτνʔϜʹϞϒʹೖͬͯ΋Β͏


    • ٙ໰Λ෼ใʹॻ͘ͱ౴͑ͯ͘ΕΔ


    • ࣭໰ശ΋͋Δ


    • ྠಡ΋΍͍͖ͬͯ

    View Slide