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

改善失敗して学ぶ、
レガシープロダクトに立ち向かうチーム作り。

Yuichi Sugiyama
PRO
December 01, 2019
9.1k

 改善失敗して学ぶ、
レガシープロダクトに立ち向かうチーム作り。

PHP Conference 2019でのサイボウズのスポンサーセッションです。
#phpcon #Track3

2019/12/6 追記
スライド76~77で、「伝統とは火を守ることであり、灰を崇めることではない」という言葉をGustav Mahler の言葉として引用していますが、Gustav Mahler の言葉である、という明確な出典はありませんでした。

Yuichi Sugiyama
PRO

December 01, 2019
Tweet

More Decks by Yuichi Sugiyama

Transcript

  1. PHP Conference 2019
    Yuichi Sugiyama
    @oogFranz
    Cybozu, Garoon.
    վળࣦഊֶͯ͠Ϳɺ

    ϨΨγʔϓϩμΫτʹཱͪ޲͔͏
    νʔϜ࡞Γɻ

    View Slide

  2. վળͯ͠·͔͢ʁ

    View Slide

  3. ࣦഊͯ͠·͔͢ʁ

    View Slide

  4. Whoami
    • ਿࢁ ༞Ұ @oogFranz
    • αΠϘ΢ζ5೥໨ΤϯδχΞ
    • େاۀ޲͚άϧʔϓ΢ΣΞGaroon࡞ͬͯΔ
    • ෳۀδϟζϛϡʔδγϟϯ@MASHݭָஂ

    View Slide

  5. • େن໛޲͚ͷάϧʔϓ΢ΣΞ
    • ੜ࢈ੑɾνʔϜϫʔΫ޲্ͷࢧԉ

    View Slide

  6. View Slide

  7. • PHPͱMySQLͰͰ͖ͯΔWebΞϓϦέʔγϣϯ
    • ։ൃ17೥໨
    • PHP͸ 4͔Β7.2ʹ
    • MySQL͸ 4ܥ͔Β5.7ʹ

    View Slide

  8. ࠓ೔࿩͢͜ͱ
    • ࣦഊֶͯ͠ͿɺνʔϜͷ޿͛ํ
    • ࣦഊֶͯ͠ͿɺνʔϜͷڧ͘͢Δํ๏

    View Slide

  9. ৽ਓΤϯδχΞͷ๻ɺೖࣾ͢Δ

    View Slide

  10. QAϦʔμʔ
    PM
    σβΠϯɾ੡඼จݴ

    ϓϩάϥϚνʔϜ
    Ϧʔμʔ
    ৽ਓΤϯδχΞೖࣾ͢Δ
    QAνʔϜ
    ϕτφϜɾ্ւϓϩάϥϚ
    5೥લͷ։ൃମ੍

    View Slide

  11. ৽ਓΤϯδχΞೖࣾ͢Δ
    • ΍ΓͱΓͷ΄ͱΜͲ͸ϓϩάϥϚͷ3ਓͱ
    • λεΫ͕ϦʔμʔΛ௨ͯ͠PM͔Β

    ߱Γͯ͘ΔͷͰͻͨ͢Β͜ͳ͢
    • ςετ͸೔ຊͷQAϦʔμʔ͕

    ւ֎ͷQAνʔϜʹ;ͬͯউखʹ΍ͬͯ͘ΕΔ
    • ιʔείʔυʹूதͰ͖Δ࠷ߴͷ؀ڥʂ

    View Slide

  12. QAϦʔμʔ
    PM

    ϓϩάϥϚνʔϜ
    Ϧʔμʔ
    ࣮ࡍͷίϛϡχέʔγϣϯ
    QAνʔϜ
    ϕτφϜɾ্ւϓϩάϥϚ
    5೥લͷ։ൃମ੍
    σβΠϯɾ੡඼จݴ

    View Slide

  13. ৽ਓΤϯδχΞɺҋΛݟΔ
    ͜ͷίʔυಡΈʹ͍͘ɻɻɻ

    ϦϑΝΫλ͍͍ͯ͠Ͱ͔͢ʁʁ

    Ϧʔμʔ

    View Slide

  14. ৽ਓΤϯδχΞɺҋΛݟΔ
    ͜ͷίʔυಡΈʹ͍͘ɻɻɻ

    ϦϑΝΫλ͍͍ͯ͠Ͱ͔͢ʁʁ
    ͜Ε͸ςετ͕ඞཁ͔ͩΒ2"ʹ֬ೝ͠ͳ͍ͱͶɻ
    ͻͱ·ٕͣज़ෛ࠴ശʹొ࿥͠ͱ͍ͯ

    Ϧʔμʔ

    View Slide

  15. • ٕज़తෛ࠴ɿ

    ։ൃ଎౓ͷ௿ԼΛҾ͖ى͜͢ɺઃܭ΍ίʔυͷ໰୊
    • ٕज़ෛ࠴ശɿ

    ٕज़ෛ࠴ΛՄࢹԽ͠ɺஷΊ͓ͯ͘৔ॴ

    ༏ઌ౓෇͚΍վળͷτϥοΩϯάʹ࢖͑Δ

    ٕज़ෛ࠴ശ

    View Slide

  16. ৽ਓΤϯδχΞɺҋΛݟΔ
    ʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ

    Ϧʔμʔ

    View Slide

  17. ৽ਓΤϯδχΞɺҋΛݟΔ
    ʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ

    Ϧʔμʔ
    ͜Εొ࿥ͨ͠Β௚͍͍ͯ͠ΜͰ͔͢ʁʁ

    View Slide

  18. ৽ਓΤϯδχΞɺҋΛݟΔ
    ʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ
    ࣍ͷόʔδϣϯͷ։ൃͰͲͷෛ࠴Λ௚͔͢

    ܾΊΔ͔Βͦͷ࣌·Ͱ଴ͬͯͶ

    Ϧʔμʔ
    ͜Εొ࿥ͨ͠Β௚͍͍ͯ͠ΜͰ͔͢ʁʁ

    View Slide

  19. ৽ਓΤϯδχΞɺҋΛݟΔ
    ʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ
    ࣍ͷόʔδϣϯͷ։ൃͰͲͷෛ࠴Λ௚͔͢

    ܾΊΔ͔Βͦͷ࣌·Ͱ଴ͬͯͶ

    Ϧʔμʔ
    ͜Εొ࿥ͨ͠Β௚͍͍ͯ͠ΜͰ͔͢ʁʁ
    ࣍ͷόʔδϣϯ։ൃ͍ͬͯͭ࢝·ΔΜͰ͔͢ʁ

    View Slide

  20. ৽ਓΤϯδχΞɺҋΛݟΔ
    ൒೥ޙͩΑ
    Ϧʔμʔ

    View Slide

  21. ࣦഊֶͯ͠Ϳɺ

    νʔϜͷ޿͛ํ

    View Slide

  22. ͳͥͨͩͷϦϑΝΫλʹ

    ൒೥΋͔͔Δͷ͔ʁ

    View Slide

  23. 5೥લͷ։ൃϓϩηε

    PM
    1ϲ݄ 2ϲ݄ 2ϲ݄ 1ϲ݄
    QA
    ϓϩάϥϚ
    ཁ݅ݕ౼ ։ൃ ςετ ϦϦʔε࡞ۀ

    View Slide

  24. 5೥લͷ։ൃϓϩηε

    PM
    1ϲ݄ 2ϲ݄ 2ϲ݄ 1ϲ݄
    QA
    ϓϩάϥϚ
    ཁ݅ݕ౼ ։ൃ ςετ ϦϦʔε࡞ۀ
    ׬શͳ΢ΥʔλʔϑΥʔϧ

    View Slide

  25. • վળΛೖΕ͍ͨʂ͚Ͳɻɻɻ

    PM/QA΁ͷ͓࢕͍
    PM
    2ϲ݄ͷ։ൃظؒʹೖΓ͖Δͷʁ
    QA
    Өڹൣғ͸޿͕Γ·͔͢ʁ

    ςετظؒʹӨڹ͕ɻɻɻ

    View Slide

  26. • վળΛೖΕ͍ͨʂ͚Ͳɻɻɻ

    PM/QA΁ͷ͓࢕͍
    PM
    2ϲ݄ͷ։ൃظؒʹೖΓ͖Δͷʁ
    QA
    Өڹൣғ͸޿͕Γ·͔͢ʁ

    ςετظؒʹӨڹ͕ɻɻɻ
    վળΛͶ͡ࠐΉͨΊͷઓ͍͕ൃੜ

    View Slide

  27. ύϯυϥͷശԽٕͨ͠ज़ෛ࠴ശ
    • ٕज़ෛ࠴ശʹੵ·ΕΔ = 

    ͦͷλΠϛϯάͰ͸௚ͤͳ͍ෛ࠴͕ओ
    • ։ൃɾςετ޻਺͕େ͖ͳ΋ͷ͕࢒Δ
    • ͳΜͱ͔ணखͰ͖ͯ΋։ൃظؒͰ

    ऴΘΒͳ͚Ε͹·ͨ൒೥ޙ
    • վળΛͶ͡ࠐΉͨΊͷઓ͍

    View Slide

  28. ͦΜͳͱ͖ɺ
    εΫϥϜ։ൃ͕࢝·Δ

    View Slide

  29. εΫϥϜ։ൃͱ͸
    • ୹͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ

    ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏
    • PO/গਓ਺ͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ੒͞ΕΔ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    2िؒ 2िؒ 2िؒ 2िؒ

    View Slide

  30. ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ

    View Slide

  31. ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ

    View Slide

  32. େࣦഊʂʂ ※ಡ·ͳ͍͍ͯ͘Ͱ͢

    ※ݱ৔͸΋͏গ͠Ժ΍͔Ͱͨ͠
    2ϲ݄͔͚ͯ΋࣮૷ऴΘΒͳ͍ͷʹɺ

    εϓϦϯτ͝ͱʹ͖ΓΑ࣮͘૷ऴΘΔʁ
    3εϓϦϯτ͋Ε͹ऴΘΔ͚Ͳ

    1εϓϦϯτ͡ΌΉΓʂʂ
    ࣮૷΋ऴΘͬͯͳ͍ͷʹɺςετઃܭͲ͏΍Μͷʁ
    ϓϩάϥϚ͞Μʂ͜ͷ࢓༷ॻͲ͏ͳͬͯΜͷʂʁ
    ͜ͷػೳ͸͜ͷεϓϦϯτͰ࣮૷͢Δʁ

    ͦΕͱ΋࣍ͷεϓϦϯτʁPM౴͑ͯʂ
    ςετͰ͖ΔPBI͕ͳ͍ͧʂ࣮૷ૣΑʂ
    ςετ͕ؒʹ߹ͬͯͳ͍͚Ͳ

    ࣮૷ਐΊ͍͍ͯΜ͔ʂQA͞Μʂ
    ແཧ΍Γ෼ׂ͚ͨ͠Ͳ

    ͜ͷػೳ͡ΌͳΜͷՁ஋΋ͳ͍Αʂ

    View Slide

  33. ཧ૝ͱݱ࣮ͷόʔϯμ΢ϯνϟʔτ

    View Slide

  34. εΫϥϜ։ൃͱ͸ʢ࠶ܝʣ
    • ୹͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ

    ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏
    • PO/গਓ਺ͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ੒͞ΕΔ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    2िؒ 2िؒ 2िؒ 2िؒ

    View Slide

  35. εΫϥϜ։ൃͱ͸ʢ࠶ܝʣ
    • ୹͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ

    ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏
    • PO/গਓ਺ͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ੒͞ΕΔ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    2िؒ 2िؒ 2िؒ 2िؒ

    View Slide

  36. εΫϥϜ։ൃͱ͸ʢ࠶ܝʣ
    • ୹͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ

    ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏
    • PO/গਓ਺ͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ੒͞ΕΔ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    ܭը ࣮૷ɾςετ
    2िؒ 2िؒ 2िؒ 2िؒ
    ࣦഊ͸ى͖Δલఏ

    View Slide

  37. ϓϩάϥϚͱQAؒͷࣦഊΛ;Γ͔͑ͬͨ

    • ࣮૷ͱςετΛεϜʔζʹߦ͏ͨΊͷো֐
    • ࣮૷͢Δ಺༰ͷೝࣝࠩ
    • ςετͷͨΊʹඞཁͳ৘ใͷೝࣝࠩ
    • ͓ޓ͍ͷ࡞ۀ಺༰ͷೝࣝࠩ
    ϓϩάϥϚ QA
    QA

    View Slide

  38. ϓϩάϥϚͱQAؒͷࣦഊΛ;Γ͔͑ͬͨ

    • ࣮૷ͱςετΛεϜʔζʹߦ͏ͨΊͷো֐
    • ࣮૷͢Δ಺༰ͷೝࣝࠩ
    • ςετͷͨΊʹඞཁͳ৘ใͷೝࣝࠩ
    • ͓ޓ͍ͷ࡞ۀ಺༰ͷೝࣝࠩ
    ϓϩάϥϚ QA
    QA
    ։ൃνʔϜ
    ࣦഊΛܖػʹϓϩάϥϚͱ2"͕ҰͭͷνʔϜʹ

    View Slide

  39. ϓϩάϥϚͱQAͷڞಉ࡞ۀ
    • ࣮૷Λ࢝ΊΔલʹɺ࣮૷ൣғͱςετൣғͷ֬ೝ
    • ࢓༷ͷ݀Λ࣮૷લʹQA͔Βڭ͑ͯ΋Β͑Δ
    • QA͕ςετͰࠔͬͯΔ͜ͱ͕͙͢ʹΘ͔Δ
    • ςετઃܭʹϓϩάϥϚͷ஌ࣝΛ׆͔ͤΔ
    • ෆ۩߹ΛҰॹʹɺϦΞϧλΠϜʹ֬ೝɾվम

    View Slide

  40. ϓϩάϥϚͱQAͷڞಉ࡞ۀ
    • ࣮૷Λ࢝ΊΔલʹɺ࣮૷ൣғͱςετൣғͷ֬ೝ
    • ࢓༷ͷ݀Λ࣮૷લʹQA͔Βڭ͑ͯ΋Β͑Δ
    • QA͕ςετͰࠔͬͯΔ͜ͱ͕͙͢ʹΘ͔Δ
    • ςετઃܭʹϓϩάϥϚͷ஌ࣝΛ׆͔ͤΔ
    • ෆ۩߹ΛҰॹ͔ͭϦΞϧλΠϜʹ֬ೝɾվम
    ϓϩάϥϚɾ2"ؒͰͷ

    ίϛϡχέʔγϣϯίετ͕େ෯࡟ݮʂ

    View Slide

  41. վળ͍ͨ͠ͳʁ

    QA
    ͜ͷϦϑΝΫλ͢Δͱ
    ςετൣғ͸ͪΐͬͱ૿͑ͦ͏ɻ
    ͚ͩͲ͜ͷޙ΋։ൃ͢ΔՕॴͩ͠ɺ
    ޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂ
    QA

    View Slide

  42. վળ͍ͨ͠ͳʁ

    QA
    ͜ͷϦϑΝΫλ͢Δͱ
    ςετൣғ͸ͪΐͬͱ૿͑ͦ͏ɻ
    ͚ͩͲ͜ͷޙ΋։ൃ͢ΔՕॴͩ͠ɺ
    ޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂ
    ͜ͷ͘Β͍ͷςετൣғͷ૿ՃͳΒɺ

    ࠓͷεϓϦϯτͰؒʹ߹͏Ͷ
    ϦϑΝΫλͷؒʹͦͷ෼ͷ

    ςετઃܭऴΘΒͤͱ͘ʂ
    QA

    View Slide

  43. վળ͍ͨ͠ͳʁ

    QA
    ͜ͷϦϑΝΫλ͢Δͱ
    ςετൣғ͸ͪΐͬͱ૿͑ͦ͏ɻ
    ͚ͩͲ͜ͷޙ΋։ൃ͢ΔՕॴͩ͠ɺ
    ޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂ
    ͜ͷ͘Β͍ͷςετൣғͷ૿ՃͳΒɺ

    ࠓͷεϓϦϯτͰؒʹ߹͏Ͷ
    ϦϑΝΫλͷؒʹͦͷ෼ͷ

    ςετઃܭऴΘΒͤͱ͘ʂ
    QA
    վળ͕ਐΈग़ͨ͠ʂ

    View Slide

  44. ։ൃνʔϜͱPMؒͷࣦഊΛ;Γ͔͑ͬͨ

    • ػೳ։ൃΛεϜʔζʹߦ͏ͨΊͷো֐
    • ࠷௿ݶඞཁͳػೳͷೝࣝࠩ
    • ͦͷػೳʹΑ࣮ͬͯݱ͍ͨ͠Ձ஋ͷೝࣝࠩ
    • ͦͷػೳΛ࡞Δ೉қ౓ͷೝࣝࠩ
    ϓϩάϥϚ
    QA
    QA
    ։ൃνʔϜ
    PM

    View Slide

  45. ։ൃνʔϜͱPMؒͷࣦഊΛ;Γ͔͑ͬͨ

    • ػೳ։ൃΛεϜʔζʹߦ͏ͨΊͷো֐
    • ࠷௿ݶඞཁͳػೳͷೝࣝࠩ
    • ͦͷػೳʹΑ࣮ͬͯݱ͍ͨ͠Ձ஋ͷೝࣝࠩ
    • ͦͷػೳΛ࡞Δ೉қ౓ͷೝࣝࠩ
    ϓϩάϥϚ
    QA
    QA
    GaroonνʔϜ
    PM
    ࣦഊΛܖػʹҰͭͷνʔϜʹͳͬͨ

    View Slide

  46. վળ͍ͨ͠ͳʁ

    PM
    ͜͜ͷઃܭΛॻ͖௚͢ͷΛઌʹ΍͓ͬͯ͘ͱɺ
    طଘ࣮૷ͷษڧʹ΋ͳΔ͠ɺ

    ͋ͱ͔Βͷ։ൃ΋εϐʔυ͕͋Γͦ͏Ͱ͢ɻ
    ͏·͘Ͱ͖Δ͔͸΍ͬͯΈͳ͍ͱ
    Θ͔Βͳ͍Ͱ͕͢ɺɺɺ

    View Slide

  47. վળ͍ͨ͠ͳʁ

    PM
    ͜͜ͷઃܭΛॻ͖௚͢ͷΛઌʹ΍͓ͬͯ͘ͱɺ
    طଘ࣮૷ͷษڧʹ΋ͳΔ͠ɺ

    ͋ͱ͔Βͷ։ൃ΋εϐʔυ͕͋Γͦ͏Ͱ͢ɻ
    ͏·͘Ͱ͖Δ͔͸΍ͬͯΈͳ͍ͱ
    Θ͔Βͳ͍Ͱ͕͢ɺɺɺ
    εϓϦϯτͰઃܭվળ΍ͬͯΈͯɺ

    Ͱ͖ͦ͏ͩͬͨΒ΍ͬͪΌ͍·͠ΐ͏ʂ

    View Slide

  48. վળ͍ͨ͠ͳʁ

    PM
    ͜͜ͷઃܭΛॻ͖௚͢ͷΛઌʹ΍͓ͬͯ͘ͱɺ
    طଘ࣮૷ͷษڧʹ΋ͳΔ͠ɺ

    ͋ͱ͔Βͷ։ൃ΋εϐʔυ͕͋Γͦ͏Ͱ͢ɻ
    ͏·͘Ͱ͖Δ͔͸΍ͬͯΈͳ͍ͱ
    Θ͔Βͳ͍Ͱ͕͢ɺɺɺ
    εϓϦϯτͰઃܭվળ΍ͬͯΈͯɺ

    Ͱ͖ͦ͏ͩͬͨΒ΍ͬͪΌ͍·͠ΐ͏ʂ
    վળ͕ਐΈग़ͨ͠ʂ

    View Slide

  49. ૊৫มߋͨ͠Β෦௕͕͍ͳ͘ͳΓ·ͨ͠
    https://blog.cybozu.io/entry/2019/02/13/080000

    View Slide

  50. ͳͥͰ͖ΔΑ͏ʹͳͬͨʁ
    • ϓϩάϥϚ΋QA΋PM΋ɺ

    ྑ͍੡඼Λ࡞Γ͍ͨͷ͸ಉ͡
    • νʔϜ͕෼͔Ε͍ͯΔͱɺ

    ͦΕͧΕͷ࢓ࣄʹࢹ໺͕ڱ·Δʢ։ൃɾςετɾཁ݅ݕ౼ʣ
    • ͦΕͧΕͷ৬ೳؒͰͷஅઈ͕ൃੜ͍ͯͨ͠
    • νʔϜͷ౷߹ʹΑͬͯɺ

    νʔϜͷ໨త͕ʮྑ͍੡඼Λ࡞Δ͜ͱʯʹͳͬͨ

    View Slide

  51. Conwayͷ๏ଇ
    “organizations which design systems ...

    are constrained to produce designs 

    which are copies of the communication 

    structures of these organizations”
    “૊৫ͷઃܭ͢ΔγεςϜʹ͸ ... 

    ͦͷ૊৫ͷίϛϡχέʔγϣϯߏ଄Λ

    ͦͷ··൓өͨ͠ઃܭʹͳΔ

    ͱ͍͏੍໿͕͋Δ” Melvin Conway

    View Slide

  52. νʔϜΛ΋ͬͱଟ༷ʹ͢Δ

    View Slide

  53. จݴमਖ਼ϑϩʔ

    จݴνʔϜʢ5$ʣ͕จݴҊ࡞੒
    λεΫνέοτ࡞੒
    ࡞੒Ҋ௨Γ࣮૷
    ςετ

    View Slide

  54. จݴमਖ਼ϑϩʔ

    จݴνʔϜʢ5$ʣ͕จݴҊ࡞੒
    λεΫνέοτ࡞੒
    ࡞੒Ҋ௨Γ࣮૷
    ςετ
    ։ൃνʔϜλεΫ

    View Slide

  55. จݴमਖ਼ϑϩʔ

    จݴνʔϜʢ5$ʣ͕จݴҊ࡞੒
    λεΫνέοτ࡞੒
    ࡞੒Ҋ௨Γ࣮૷
    ςετ
    ։ൃνʔϜλεΫ
    ੡඼จݴνʔϜͰ׬݁ͨ͠ΒΑ͘ͳ͍ʁ

    View Slide

  56. ఏҊͯ͠Έͨ

    View Slide

  57. ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ

    View Slide

  58. ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ

    View Slide

  59. ௕จͰౖΒΕΔ
    ※ಡ·ͳ͍͍ͯ͘Ͱ͢

    ※ݱ৔͸΋͏গ͠Ժ΍͔Ͱͨ͠

    View Slide

  60. ͦΕ·Ͱฉ͍ͯͳ͔͚ͬͨͩͰ
    • ։ൃνʔϜ΋੡඼จݴʢTCʣνʔϜ΋

    ΋ͱ΋ͱͷϑϩʔʹ΋΍΋΍͸͋ͬͨ
    • ॳΊͷఏҊ͸ɺ։ൃνʔϜͷ΋΍΋΍͔͠

    վળ͞Εͳ͍΋ͷͩͬͨ
    • ٕज़తͳ͜ͱΛ੡඼จݴʢTCʣνʔϜʹؙ౤͛͠ͳ͍
    • ࠷খݶͷֶशίετͰ੡඼จݴʢTCʣνʔϜ͕

    ΍Γ͍ͨ͜ͱΛͰ͖ΔΑ͏ʹ

    View Slide

  61. ඇΤϯδχΞ΁ͷֶशίετΛ࠷খݶʹ
    • ։ൃ؀ڥߏஙࣗମΛγϯϓϧʹ
    • GitHubͷ࢖͍ํͳͲɺ։ൃͷυΩϡϝϯτ੔උ
    • จݴมߋ༻ͷ։ൃϞʔυͷ࡞੒
    • ϦιʔεʢจݴϑΝΠϧʣ

    ͱϓϩμΫτίʔυͷ෼཭
    • ࠔͬͨ࣌ʹ͍ͭͰ΋ฉ͍ͯ΋Β͑Δؔ܎ੑ

    View Slide

  62. ඇΤϯδχΞ΁ͷֶशίετΛ࠷খݶʹ
    • ։ൃ؀ڥߏஙࣗମΛγϯϓϧʹ
    • GitHubͷ࢖͍ํͳͲɺ։ൃͷυΩϡϝϯτ੔උ
    • จݴมߋ༻ͷ։ൃϞʔυͷ࡞੒
    • ϦιʔεʢจݴϑΝΠϧʣ

    ͱϓϩμΫτίʔυͷ෼཭
    • ࠔͬͨ࣌ʹ͍ͭͰ΋ฉ͍ͯ΋Β͑Δؔ܎ੑ

    View Slide

  63. ඇΤϯδχΞ΁ͷֶशίετΛ࠷খݶʹ
    • ։ൃ؀ڥߏஙࣗମΛγϯϓϧʹ
    • GitHubͷ࢖͍ํͳͲɺ։ൃͷυΩϡϝϯτ੔උ
    • จݴมߋ༻ͷ։ൃϞʔυͷ࡞੒
    • ϦιʔεʢจݴϑΝΠϧʣ

    ͱϓϩμΫτίʔυͷ෼཭
    • ࠔͬͨ࣌ʹ͍ͭͰ΋ฉ͍ͯ΋Β͑Δؔ܎ੑ
    ৬ೳΛӽ͓͑ͯޓ͍ʹ޾ͤͳվળ͕ʂ

    View Slide

  64. ࣦഊͯ͠ɺ͍Ζ͍Ζͳ৬ೳͷ

    ϝϯόʔΛҰͭͷνʔϜʹ͢Δ

    View Slide

  65. ࣦഊֶͯ͠Ϳɺ

    νʔϜΛڧ͘͢Δํ๏

    View Slide

  66. ͱ͋ΔࣗಈςετͷษڧձͰͷίϝϯτ
    • ๻͕ೖࣾ͢ΔΑΓ΋લɺ

    GaroonʹࣗಈςετΛಋೖ͠Α͏ͱ͠ɺ

    ഊ๺ͨ͠ݩGaroonͷϝϯόʔ͕͍ͨ


    View Slide

  67. ίʔυ඼࣭ͱͷઓ͍
    • ෆ۩߹͕େྔൃੜ͍ͯͨ͠
    • QAͷखಈςετͰෆ۩߹͕େྔʹ
    • ϦϦʔεޙ΋ύονରԠ͕ඞཁʹ
    • ো֐ରԠ͸೔ຊଆ͕த৺ʹͳͬͯ΍͍ͬͯͨ
    • σάϨൃੜϦεΫΛԼ͍͛ͨ
    • ςετͷͳ͍Garoon͸ϨΨγʔίʔυͩʂ

    View Slide

  68. ίʔυ඼࣭ͱͷઓ͍
    • ෆ۩߹͕େྔൃੜ͍ͯͨ͠
    • QAͷखಈςετͰෆ۩߹͕େྔʹ
    • ϦϦʔεޙ΋ύονରԠ͕ඞཁʹ
    • ো֐ରԠ͸೔ຊଆ͕த৺ʹͳͬͯ΍͍ͬͯͨ
    • σάϨൃੜϦεΫΛԼ͍͛ͨ
    • ςετͷͳ͍Garoon͸ϨΨγʔίʔυͩʂ
    6OJU5FTUͱ&&Λಋೖ͠Α͏ʂ

    View Slide

  69. ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ

    View Slide

  70. ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ

    View Slide

  71. ౰࣌ͷϓϩάϥϚͷମ੍
    ೔ຊϓϩάϥϚνʔϜ ϕτφϜɾ্ւϓϩάϥϚ
    ʻ
    ਓ਺

    View Slide

  72. ౰࣌ͷϓϩάϥϚͷମ੍
    ೔ຊϓϩάϥϚνʔϜ ϕτφϜɾ্ւϓϩάϥϚ
    ʼ
    ίʔυ඼࣭ʹ
    ର͢Δҙࣝ

    View Slide

  73. ࠜ෇͔ͳ͍ςετ
    ςετॻ͘ͷ΋࣮ߦ͢Δͷ΋ΊΜͲ͍͘͞
    ຖேདྷΔͨͼʹCI͕མͪͯΔ͚ͲͲ͏͢Μͷʁ
    ࣮૷΋ؒʹ߹Θͳ͍ͷʹɺςετ΋ॻ͍ͯͨΒऴΘΒͳ͍Α
    ͑ɺCI͸མͱͨ͠ਓ͕௚͞ͳ͍ͱ͍͚ͳ͍ϧʔϧʁ
    ΋ͱ΋ͱςετͳ͍͔Β

    ৽͘͠ॻ͘ίʔυʹ΋ςετॻ͘ͷ΍Ί͍͍ͯʁ
    Ͳ͏΍ͬͯςετ࣮ߦ͢Μͷʁ
    ઌʹ։ൃͪ͠Ό͍͍ͨΜͰɺޙͰςετॻ͖·͢
    ͳΜͰςετॻ͘ͷʁίετߴ͘ͳ͍ʁ
    ※ಡ·ͳ͍͍ͯ͘Ͱ͢

    ※ݱ৔͸΋͏গ͠Ժ΍͔Ͱͨ͠

    View Slide

  74. ͳͥςετ͕ࠜ෇͔ͳ͔ͬͨͷ͔
    • εΩϧͱίʔυ඼࣭΁ͷҙ͕ࣝߴ͍

    ϝϯόʔͷΈ͕ؤு͍ͬͯͨ
    • ͦ΋ͦ΋ͷίʔυεΩϧ͕

    ͦ͜·Ͱߴ͘ͳ͍ϝϯόʔ
    • ίʔυ඼࣭ΑΓ΋εϐʔυΛ

    ॏࢹ͍ͨ͠ϝϯόʔ

    View Slide

  75. ͳͥςετ͕ࠜ෇͔ͳ͔ͬͨͷ͔
    • εΩϧͱίʔυ඼࣭΁ͷҙ͕ࣝߴ͍

    ϝϯόʔͷΈ͕ؤு͍ͬͯͨ
    • ͦ΋ͦ΋ͷίʔυεΩϧ͕

    ͦ͜·Ͱߴ͘ͳ͍ϝϯόʔ
    • ίʔυ඼࣭ΑΓ΋εϐʔυΛ

    ॏࢹ͍ͨ͠ϝϯόʔ

    νʔϜͷ඼࣭΁ͷҙࣝΛἧ͑Δඞཁ͕͋ͬͨ

    View Slide

  76. νʔϜͷ඼࣭΁ͷҙࣝΛἧ͑Δ
    • νʔϜϝϯόʔ͸

    ΊΜͲ͕͘͞ΓΛ૝ఆ͢Δ
    • ϧʔϧͰ͸ͳ͘໨తҙࣝΛڞ༗͢Δ

    View Slide

  77. ΊΜͲ͕͘͞ΓΛ૝ఆ͢Δ
    • ΊΜͲ͕͘͞Γ͸ΊΜͲ͍͘͜͞ͱΛ͠ͳ͍
    • ςετͷηοτΞοϓ͕ΊΜͲ͍͘͞
    • ςετͷ࣮ߦ͕࣌ؒ௕ͯ͘ΊΜͲ͍͘͞
    • Ϛʔδ͢Δલʹςετ͕௨ΔͷΛ֬ೝ͢Δɺ

    ͱ͍͏ͷΛಓಙ৺ͰकΒͤΔͷ͸ແཧ
    9

    View Slide

  78. ΊΜͲ͕͘͞ΓΛ૝ఆ͢Δ
    • ΊΜͲ͕͘͞Γ͸ΊΜͲ͍͘͜͞ͱΛ͠ͳ͍
    • ςετͷηοτΞοϓ͕ΊΜͲ͍͘͞
    • ςετͷ࣮ߦ͕࣌ؒ௕ͯ͘ΊΜͲ͍͘͞
    • Ϛʔδ͢Δલʹςετ͕௨ΔͷΛ֬ೝ͢Δɺ

    ͱ͍͏ͷΛಓಙ৺ͰकΒͤΔͷ͸ແཧ
    9
    ϓϩάϥϚͷࡾେඒಙͷҰͭɺ

    ଵଦΛ׆͔͢࢓૊Έ͕ඞཁ

    View Slide

  79. పఈతʹଵଦʹ༏͘͠
    • Կ΋ߟ͑ͳͯ͘΋ςετ͕͙͢ʹ࣮ߦ
    • ϓϧϦΫ͕࡞੒͞ΕͨΒCIͰςετ
    • Ϛʔδ͞ΕͨΒCIͰςετ
    • ςετ׬ྃ·Ͱͷ࣌ؒΛ୹͘ʢ2࣌ؒˠ8෼ʣ
    • ؒҧ͑ͨΒ༏͘͠ɾແ࣊൵ʹCI͕ڭ͑Δ

    View Slide

  80. పఈతʹଵଦʹ༏͘͠
    • Կ΋ߟ͑ͳͯ͘΋ςετ͕͙͢ʹ࣮ߦ
    • ϓϧϦΫ͕࡞੒͞ΕͨΒCIͰςετ
    • Ϛʔδ͞ΕͨΒCIͰςετ
    • ςετ׬ྃ·Ͱͷ࣌ؒΛ୹͘ʢ2࣌ؒˠ8෼ʣ
    • ؒҧ͑ͨΒ༏͘͠ɾແ࣊൵ʹCI͕ڭ͑Δ
    ςετεΩϧͷͳ͍ϝϯόʔͰ΋࠷௿ݶ

    ςετ͕௨ͤΔΑ͏ʹ

    View Slide

  81. ϧʔϧͰ͸ͳ͘໨తҙࣝΛڞ༗͢Δ
    • νʔϜͷҙࣝΛϧʔϧͰἧ͑Α͏ͱ͢Δͱഁ୼͢Δ
    • e.g. CIΛམͱͨ͠Βམͱͨ͠ਓ͕࣏͢ͱ͍͏ϧʔϧ
    • ʮಉ͜͡ͱ͕ͳ͍Α͏ʹؾΛ͚ͭ·͢ʯͰ

    ಉ͜͡ͱ͕·ͨى͖Δ
    • ϧʔϧ͕༗໊ແ࣮Խ͢Δ

    View Slide

  82. ϧʔϧͰ͸ͳ͘໨తҙࣝΛڞ༗͢Δ
    • νʔϜͷҙࣝΛϧʔϧͰἧ͑Α͏ͱ͢Δͱഁ୼͢Δ
    • e.g. CIΛམͱͨ͠Βམͱͨ͠ਓ͕࣏͢ͱ͍͏ϧʔϧ
    • ʮಉ͜͡ͱ͕ͳ͍Α͏ʹؾΛ͚ͭ·͢ʯͰ

    ಉ͜͡ͱ͕·ͨى͖Δ
    • ϧʔϧ͕༗໊ແ࣮Խ͢Δ

    νʔϜʹ͸ϧʔϧͰ͸ͳ͘ɺ໨తΛڞ༗͠Α͏

    View Slide

  83. ϧʔϧʹ͸΋ͱ΋ͱ໨త͕͋Δ
    $*Λམͱͨ͠Βམͱͨ͠ਓ͕࣏͢
    ϧʔϧɿ
    ্Ґͷ໨తɿ ίʔυͷ඼࣭Λอ͍ͪͨ
    ໨తɿ $*ΛάϦʔϯʹอ͍ͪͨ

    View Slide

  84. Gustav Mahler
    “Tradition ist Bewahrung des Feuers

    und nicht Anbetung der Asche.”
    “఻౷ͱ͸ՐΛकΔ͜ͱͰ͋Γɺ
    փΛਸΊΔ͜ͱͰ͸ͳ͍”

    View Slide

  85. Gustav Mahler
    “Tradition ist Bewahrung des Feuers

    und nicht Anbetung der Asche.”
    “఻౷ͱ͸ՐΛकΔ͜ͱͰ͋Γɺ
    փΛਸΊΔ͜ͱͰ͸ͳ͍”
    ༗໊ແ࣮ͳϧʔϧ͸փɻ
    कΓ͍ͨՐ͕Կ͔Λ఻͑Δ

    View Slide

  86. ίʔυͷ඼࣭ͱ͍͏कΓ͍ͨՐ
    • ڌ఺Λ·͍ͨͰͷ

    ίʔυϨϏϡʔ
    • ւ֎ڌ఺ؚΊશһͰͷ

    Readable Codeͷྠߨ
    • ւ֎ڌ఺ؚΊશһͰͷ

    ϨΨγʔίʔυվળΨΠυͷྠߨ

    View Slide

  87. ίʔυͷ඼࣭ͱ͍͏कΓ͍ͨՐ
    • ڌ఺Λ·͍ͨͰͷ

    ίʔυϨϏϡʔ
    • ւ֎ڌ఺ؚΊશһͰͷ

    Readable Codeͷྠߨ
    • ւ֎ڌ఺ؚΊશһͰͷ

    ϨΨγʔίʔυվળΨΠυͷྠߨ
    ίʔυ඼࣭Λڞ௨ݴޠͰٞ࿦Ͱ͖ΔΑ͏ʹ

    View Slide

  88. ڞ௨ݴޠͰίʔυ඼࣭ΛޠΔ
    ࢲ͸ʓʓͱॻ͍ͨํ͕ಡΈ΍͍͢ͱࢥ͏
    ྠߨલͷίʔυϨϏϡʔ

    View Slide

  89. ڞ௨ݴޠͰίʔυ඼࣭ΛޠΔ
    ࢲ͸ʓʓͱॻ͍ͨํ͕ಡΈ΍͍͢ͱࢥ͏
    ͦΕ͸͋ͳͨͷओ؍Ͱ͸ʁ
    ࢲͷॻ͖ํͷํ͕୹ͯ͘ྑ͍
    ྠߨલͷίʔυϨϏϡʔ

    View Slide

  90. ڞ௨ݴޠͰίʔυ඼࣭ΛޠΔ
    3FBEBCMF$PEFͷ˚ষʹ΋͋ΔΑ͏ʹ

    ʓʓͱॻ͍ͨํ͕ಡΈ΍͍͢ͱࢥ͏
    ྠߨޙͷίʔυϨϏϡʔ

    View Slide

  91. ڞ௨ݴޠͰίʔυ඼࣭ΛޠΔ
    3FBEBCMF$PEFͷ˚ষʹ΋͋ΔΑ͏ʹ

    ʓʓͱॻ͍ͨํ͕ಡΈ΍͍͢ͱࢥ͏
    ͳΔ΄Ͳʂ

    ͨͩ˘ষͷߟ͑΋ೖΕΔͱ΋ͬͱྑͦ͞͏
    ྠߨޙͷίʔυϨϏϡʔ

    View Slide

  92. νʔϜΛ΋ͬͱڧ͘͢Δ

    View Slide

  93. νʔϜͰษڧ͢Δ
    • νʔϜϝϯόʔશһͰಉ͡ମݧΛ͢Δͱɺ

    νʔϜͰٞ࿦͢Δڞ௨ݴޠʹͳΔ
    • ϝϯόʔશһ͕΍ΔτϨʔχϯάλεΫ
    • ಉ͡λεΫΛෳ਺ڌ఺Ͱ΍Δ


    View Slide

  94. ւ֎ڌ఺ʹू·ͬͯษڧձ

    View Slide

  95. • t_wada͞Μͷษڧձ
    νʔϜͰษڧͰ͖Δ෱རްੜ

    https://twitter.com/t_wada/status/1186933031266734081

    View Slide

  96. • yoku0825 API Enterprise!
    • ࣮ફϋΠύϑΥʔϚϯε

    MySQLͷษڧձ 

    with yoku0825͞Μ
    νʔϜͰษڧͰ͖Δ෱རްੜ

    https://blog.cybozu.io/entry/2019-11-yoku0825

    View Slide

  97. Garoonͷҋ͸੖Εͨͷ͔


    View Slide

  98. վળ͸ਐΈͩ͢ɺ͞ΕͲ
    • ͭΒ͍΋ͷ͸ͭΒ͍
    • 17೥ੵΈॏͶͨෛ࠴͸ͱͯ΋શͯ͸վमͰ͖ͳ͍
    • ιʔείʔυʹ͚ͩ޲͖߹͍ͬͯΕ͹

    Α͍ঢ়ଶͰ͸ͳ͍ͷͰͦΕ͸ͦΕͰ

    ΤϯδχΞͱͯ͠͸πϥ͍
    • ·ͩ·ͩେྔʹࣦഊΛ͍ͯ͠Δ

    View Slide

  99. ;Γ͔͑ΓͷProblemొ࿥݅਺ਪҠ

    View Slide

  100. ;Γ͔͑ΓͷProblemొ࿥݅਺ਪҠ
    ໰୊͸ݮΔͲ͜Ζ͔૿͑ͯΔ

    View Slide

  101. ;Γ͔͑ΓͷProblemొ࿥݅਺ਪҠ
    ࣦഊֶͯ͠ͿνʔϜจԽ͸ҭͬͨ

    View Slide

  102. ;Γ͔͑ΓͷProblemొ࿥݅਺ਪҠ
    ࣦഊ͠ͳ͍͜ͱΑΓ΋ɺ
    ࣦഊ͔ΒֶͿํ๏ΛֶͿ

    View Slide

  103. Զͨͪͷઓ͍͸͜Ε͔Βͩʂ
    • ఆৗ࡞ۀͷࣗಈԽ
    • ։ൃணख͔ΒϦϦʔε·Ͱͷ

    ϦʔυλΠϜ࡟ݮ
    • ΦϨΦϨϑϨʔϜϫʔΫ͔Βͷ୤٫
    • ϞϯελʔΫϥεͱͷઓ͍
    • PSR४ڌ
    • ΞϓϦέʔγϣϯύϑΥʔϚϯεϚωʔδϟͷಋೖ
    • DIίϯςφͷಋೖ
    • ViewͱControllerͷ෼཭
    • ΧϓηϧԽ͞Ε͍ͯͳ͍ΫϥεͷରԠ
    • ࢓༷ԽςετͷڧԽ

    • σʔλ෼ੳػೳͷ֦ॆ
    • ࣗಈςετͷߴ଎Խ
    • ΦϨΦϨORM͔Βͷ୤٫
    • PHP 4࣌୅ͷه๏ͷ๾໓
    • ςετࠔ೉ͳΫϥεͷղফ
    • ControllerͱModelͷ෼཭
    • ϕʔεΫϥεͷ࠶ઃܭ
    • UtilΫϥεɺLogicΫϥεͷղମ
    • ॏෳίʔυͷআڈ
    • etc.

    View Slide

  104. Զͨͪͷઓ͍͸͜Ε͔Βͩʂ
    • ఆৗ࡞ۀͷࣗಈԽ
    • ։ൃணख͔ΒϦϦʔε·Ͱͷ

    ϦʔυλΠϜ࡟ݮ
    • ΦϨΦϨϑϨʔϜϫʔΫ͔Βͷ୤٫
    • ϞϯελʔΫϥεͱͷઓ͍
    • PSR४ڌ
    • ΞϓϦέʔγϣϯύϑΥʔϚϯεϚωʔδϟͷಋೖ
    • DIίϯςφͷಋೖ
    • ViewͱControllerͷ෼཭
    • ΧϓηϧԽ͞Ε͍ͯͳ͍ΫϥεͷରԠ
    • ࢓༷ԽςετͷڧԽ

    • σʔλ෼ੳػೳͷ֦ॆ
    • ࣗಈςετͷߴ଎Խ
    • ΦϨΦϨORM͔Βͷ୤٫
    • PHP 4࣌୅ͷه๏ͷ๾໓
    • ςετࠔ೉ͳΫϥεͷղফ
    • ControllerͱModelͷ෼཭
    • ϕʔεΫϥεͷ࠶ઃܭ
    • UtilΫϥεɺLogicΫϥεͷղମ
    • ॏෳίʔυͷআڈ
    • etc.
    ·ͩ·ͩͨ͘͞ΜࣦഊͰ͖Δ

    View Slide

  105. ·ͱΊ
    • ࣦഊͯ͠ɺνʔϜΛ޿͍͛ͯ͜͏
    • ৭ʑͳ৬ೳͷϝϯόʔΛҰͭͷνʔϜʹ͠Α͏
    • ࣦഊͯ͠ɺνʔϜΛڧ͍ͯ͘͜͠͏
    • ϧʔϧͰ͸ͳ͘ɺ໨తΛڞ༗͠Α͏
    • ࣦഊ͠ͳ͍ํ๏ΛֶͿΑΓɺ

    ࣦഊ͔ΒֶͿํ๏Λֶ΅͏

    View Slide

  106. Ұॹʹࣦഊͯ͘͠ΕΔਓ

    We're hiring

    View Slide