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

F075c5dfe92334b5031d4da5dc0c9251?s=47 Yuichi Sugiyama
December 01, 2019
6.9k

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

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

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

F075c5dfe92334b5031d4da5dc0c9251?s=128

Yuichi Sugiyama

December 01, 2019
Tweet

Transcript

  1. PHP Conference 2019 Yuichi Sugiyama @oogFranz Cybozu, Garoon. վળࣦഊֶͯ͠Ϳɺ
 ϨΨγʔϓϩμΫτʹཱͪ޲͔͏

    νʔϜ࡞Γɻ
  2. վળͯ͠·͔͢ʁ

  3. ࣦഊͯ͠·͔͢ʁ

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

    ෳۀδϟζϛϡʔδγϟϯ@MASHݭָஂ 
  5. • େن໛޲͚ͷάϧʔϓ΢ΣΞ • ੜ࢈ੑɾνʔϜϫʔΫ޲্ͷࢧԉ 

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

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

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

  10. QAϦʔμʔ PM σβΠϯɾ੡඼จݴ ๻ ϓϩάϥϚνʔϜ Ϧʔμʔ ৽ਓΤϯδχΞೖࣾ͢Δ QAνʔϜ ϕτφϜɾ্ւϓϩάϥϚ 5೥લͷ։ൃମ੍

  11. ৽ਓΤϯδχΞೖࣾ͢Δ • ΍ΓͱΓͷ΄ͱΜͲ͸ϓϩάϥϚͷ3ਓͱ • λεΫ͕ϦʔμʔΛ௨ͯ͠PM͔Β
 ߱Γͯ͘ΔͷͰͻͨ͢Β͜ͳ͢ • ςετ͸೔ຊͷQAϦʔμʔ͕
 ւ֎ͷQAνʔϜʹ;ͬͯউखʹ΍ͬͯ͘ΕΔ •

    ιʔείʔυʹूதͰ͖Δ࠷ߴͷ؀ڥʂ 
  12. QAϦʔμʔ PM ๻ ϓϩάϥϚνʔϜ Ϧʔμʔ ࣮ࡍͷίϛϡχέʔγϣϯ QAνʔϜ ϕτφϜɾ্ւϓϩάϥϚ 5೥લͷ։ൃମ੍ σβΠϯɾ੡඼จݴ

  13. ৽ਓΤϯδχΞɺҋΛݟΔ ͜ͷίʔυಡΈʹ͍͘ɻɻɻ
 ϦϑΝΫλ͍͍ͯ͠Ͱ͔͢ʁʁ ๻ Ϧʔμʔ

  14. ৽ਓΤϯδχΞɺҋΛݟΔ ͜ͷίʔυಡΈʹ͍͘ɻɻɻ
 ϦϑΝΫλ͍͍ͯ͠Ͱ͔͢ʁʁ ͜Ε͸ςετ͕ඞཁ͔ͩΒ2"ʹ֬ೝ͠ͳ͍ͱͶɻ ͻͱ·ٕͣज़ෛ࠴ശʹొ࿥͠ͱ͍ͯ ๻ Ϧʔμʔ

  15. • ٕज़తෛ࠴ɿ
 ։ൃ଎౓ͷ௿ԼΛҾ͖ى͜͢ɺઃܭ΍ίʔυͷ໰୊ • ٕज़ෛ࠴ശɿ
 ٕज़ෛ࠴ΛՄࢹԽ͠ɺஷΊ͓ͯ͘৔ॴ
 ༏ઌ౓෇͚΍վળͷτϥοΩϯάʹ࢖͑Δ  ٕज़ෛ࠴ശ

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

  17. ৽ਓΤϯδχΞɺҋΛݟΔ ʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ ๻ Ϧʔμʔ ͜Εొ࿥ͨ͠Β௚͍͍ͯ͠ΜͰ͔͢ʁʁ

  18. ৽ਓΤϯδχΞɺҋΛݟΔ ʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ ࣍ͷόʔδϣϯͷ։ൃͰͲͷෛ࠴Λ௚͔͢
 ܾΊΔ͔Βͦͷ࣌·Ͱ଴ͬͯͶ ๻ Ϧʔμʔ ͜Εొ࿥ͨ͠Β௚͍͍ͯ͠ΜͰ͔͢ʁʁ

  19. ৽ਓΤϯδχΞɺҋΛݟΔ ʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ ࣍ͷόʔδϣϯͷ։ൃͰͲͷෛ࠴Λ௚͔͢
 ܾΊΔ͔Βͦͷ࣌·Ͱ଴ͬͯͶ ๻ Ϧʔμʔ ͜Εొ࿥ͨ͠Β௚͍͍ͯ͠ΜͰ͔͢ʁʁ ࣍ͷόʔδϣϯ։ൃ͍ͬͯͭ࢝·ΔΜͰ͔͢ʁ

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

  21. ࣦഊֶͯ͠Ϳɺ
 νʔϜͷ޿͛ํ

  22. ͳͥͨͩͷϦϑΝΫλʹ
 ൒೥΋͔͔Δͷ͔ʁ

  23. 5೥લͷ։ൃϓϩηε  PM 1ϲ݄ 2ϲ݄ 2ϲ݄ 1ϲ݄ QA ϓϩάϥϚ ཁ݅ݕ౼

    ։ൃ ςετ ϦϦʔε࡞ۀ
  24. 5೥લͷ։ൃϓϩηε  PM 1ϲ݄ 2ϲ݄ 2ϲ݄ 1ϲ݄ QA ϓϩάϥϚ ཁ݅ݕ౼

    ։ൃ ςετ ϦϦʔε࡞ۀ ׬શͳ΢ΥʔλʔϑΥʔϧ
  25. • վળΛೖΕ͍ͨʂ͚Ͳɻɻɻ  PM/QA΁ͷ͓࢕͍ PM 2ϲ݄ͷ։ൃظؒʹೖΓ͖Δͷʁ QA Өڹൣғ͸޿͕Γ·͔͢ʁ
 ςετظؒʹӨڹ͕ɻɻɻ

  26. • վળΛೖΕ͍ͨʂ͚Ͳɻɻɻ  PM/QA΁ͷ͓࢕͍ PM 2ϲ݄ͷ։ൃظؒʹೖΓ͖Δͷʁ QA Өڹൣғ͸޿͕Γ·͔͢ʁ
 ςετظؒʹӨڹ͕ɻɻɻ վળΛͶ͡ࠐΉͨΊͷઓ͍͕ൃੜ

  27. ύϯυϥͷശԽٕͨ͠ज़ෛ࠴ശ • ٕज़ෛ࠴ശʹੵ·ΕΔ = 
 ͦͷλΠϛϯάͰ͸௚ͤͳ͍ෛ࠴͕ओ • ։ൃɾςετ޻਺͕େ͖ͳ΋ͷ͕࢒Δ • ͳΜͱ͔ணखͰ͖ͯ΋։ൃظؒͰ


    ऴΘΒͳ͚Ε͹·ͨ൒೥ޙ • վળΛͶ͡ࠐΉͨΊͷઓ͍
  28. ͦΜͳͱ͖ɺ εΫϥϜ։ൃ͕࢝·Δ 

  29. εΫϥϜ։ൃͱ͸ • ୹͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ
 ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏ • PO/গਓ਺ͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ੒͞ΕΔ ܭը ࣮૷ɾςετ

    ܭը ࣮૷ɾςετ ܭը ࣮૷ɾςετ ܭը ࣮૷ɾςετ 2िؒ 2िؒ 2िؒ 2िؒ
  30. ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ 

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

  32. େࣦഊʂʂ ※ಡ·ͳ͍͍ͯ͘Ͱ͢
 ※ݱ৔͸΋͏গ͠Ժ΍͔Ͱͨ͠ 2ϲ݄͔͚ͯ΋࣮૷ऴΘΒͳ͍ͷʹɺ
 εϓϦϯτ͝ͱʹ͖ΓΑ࣮͘૷ऴΘΔʁ 3εϓϦϯτ͋Ε͹ऴΘΔ͚Ͳ
 1εϓϦϯτ͡ΌΉΓʂʂ ࣮૷΋ऴΘͬͯͳ͍ͷʹɺςετઃܭͲ͏΍Μͷʁ ϓϩάϥϚ͞Μʂ͜ͷ࢓༷ॻͲ͏ͳͬͯΜͷʂʁ ͜ͷػೳ͸͜ͷεϓϦϯτͰ࣮૷͢Δʁ


    ͦΕͱ΋࣍ͷεϓϦϯτʁPM౴͑ͯʂ ςετͰ͖ΔPBI͕ͳ͍ͧʂ࣮૷ૣΑʂ ςετ͕ؒʹ߹ͬͯͳ͍͚Ͳ
 ࣮૷ਐΊ͍͍ͯΜ͔ʂQA͞Μʂ ແཧ΍Γ෼ׂ͚ͨ͠Ͳ
 ͜ͷػೳ͡ΌͳΜͷՁ஋΋ͳ͍Αʂ
  33. ཧ૝ͱݱ࣮ͷόʔϯμ΢ϯνϟʔτ

  34. εΫϥϜ։ൃͱ͸ʢ࠶ܝʣ • ୹͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ
 ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏ • PO/গਓ਺ͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ੒͞ΕΔ ܭը ࣮૷ɾςετ

    ܭը ࣮૷ɾςετ ܭը ࣮૷ɾςετ ܭը ࣮૷ɾςετ 2िؒ 2िؒ 2िؒ 2िؒ
  35. εΫϥϜ։ൃͱ͸ʢ࠶ܝʣ • ୹͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ
 ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏ • PO/গਓ਺ͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ੒͞ΕΔ ܭը ࣮૷ɾςετ

    ܭը ࣮૷ɾςετ ܭը ࣮૷ɾςετ ܭը ࣮૷ɾςετ 2िؒ 2िؒ 2िؒ 2िؒ
  36. εΫϥϜ։ൃͱ͸ʢ࠶ܝʣ • ୹͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ
 ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏ • PO/গਓ਺ͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ੒͞ΕΔ ܭը ࣮૷ɾςετ

    ܭը ࣮૷ɾςετ ܭը ࣮૷ɾςετ ܭը ࣮૷ɾςετ 2िؒ 2िؒ 2िؒ 2िؒ ࣦഊ͸ى͖Δલఏ
  37. ϓϩάϥϚͱQAؒͷࣦഊΛ;Γ͔͑ͬͨ  • ࣮૷ͱςετΛεϜʔζʹߦ͏ͨΊͷো֐ • ࣮૷͢Δ಺༰ͷೝࣝࠩ • ςετͷͨΊʹඞཁͳ৘ใͷೝࣝࠩ • ͓ޓ͍ͷ࡞ۀ಺༰ͷೝࣝࠩ

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

    ϓϩάϥϚ QA QA ։ൃνʔϜ ࣦഊΛܖػʹϓϩάϥϚͱ2"͕ҰͭͷνʔϜʹ
  39. ϓϩάϥϚͱQAͷڞಉ࡞ۀ • ࣮૷Λ࢝ΊΔલʹɺ࣮૷ൣғͱςετൣғͷ֬ೝ • ࢓༷ͷ݀Λ࣮૷લʹQA͔Βڭ͑ͯ΋Β͑Δ • QA͕ςετͰࠔͬͯΔ͜ͱ͕͙͢ʹΘ͔Δ • ςετઃܭʹϓϩάϥϚͷ஌ࣝΛ׆͔ͤΔ •

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

    ෆ۩߹ΛҰॹ͔ͭϦΞϧλΠϜʹ֬ೝɾվम ϓϩάϥϚɾ2"ؒͰͷ
 ίϛϡχέʔγϣϯίετ͕େ෯࡟ݮʂ 
  41. վળ͍ͨ͠ͳʁ ๻ QA ͜ͷϦϑΝΫλ͢Δͱ ςετൣғ͸ͪΐͬͱ૿͑ͦ͏ɻ ͚ͩͲ͜ͷޙ΋։ൃ͢ΔՕॴͩ͠ɺ ޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂ QA 

  42. վળ͍ͨ͠ͳʁ ๻ QA ͜ͷϦϑΝΫλ͢Δͱ ςετൣғ͸ͪΐͬͱ૿͑ͦ͏ɻ ͚ͩͲ͜ͷޙ΋։ൃ͢ΔՕॴͩ͠ɺ ޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂ ͜ͷ͘Β͍ͷςετൣғͷ૿ՃͳΒɺ
 ࠓͷεϓϦϯτͰؒʹ߹͏Ͷ ϦϑΝΫλͷؒʹͦͷ෼ͷ


    ςετઃܭऴΘΒͤͱ͘ʂ QA 
  43. վળ͍ͨ͠ͳʁ ๻ QA ͜ͷϦϑΝΫλ͢Δͱ ςετൣғ͸ͪΐͬͱ૿͑ͦ͏ɻ ͚ͩͲ͜ͷޙ΋։ൃ͢ΔՕॴͩ͠ɺ ޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂ ͜ͷ͘Β͍ͷςετൣғͷ૿ՃͳΒɺ
 ࠓͷεϓϦϯτͰؒʹ߹͏Ͷ ϦϑΝΫλͷؒʹͦͷ෼ͷ


    ςετઃܭऴΘΒͤͱ͘ʂ QA վળ͕ਐΈग़ͨ͠ʂ 
  44. ։ൃνʔϜͱPMؒͷࣦഊΛ;Γ͔͑ͬͨ  • ػೳ։ൃΛεϜʔζʹߦ͏ͨΊͷো֐ • ࠷௿ݶඞཁͳػೳͷೝࣝࠩ • ͦͷػೳʹΑ࣮ͬͯݱ͍ͨ͠Ձ஋ͷೝࣝࠩ • ͦͷػೳΛ࡞Δ೉қ౓ͷೝࣝࠩ

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

    ϓϩάϥϚ QA QA GaroonνʔϜ PM ࣦഊΛܖػʹҰͭͷνʔϜʹͳͬͨ
  46. վળ͍ͨ͠ͳʁ ๻ PM ͜͜ͷઃܭΛॻ͖௚͢ͷΛઌʹ΍͓ͬͯ͘ͱɺ طଘ࣮૷ͷษڧʹ΋ͳΔ͠ɺ
 ͋ͱ͔Βͷ։ൃ΋εϐʔυ͕͋Γͦ͏Ͱ͢ɻ ͏·͘Ͱ͖Δ͔͸΍ͬͯΈͳ͍ͱ Θ͔Βͳ͍Ͱ͕͢ɺɺɺ 

  47. վળ͍ͨ͠ͳʁ ๻ PM ͜͜ͷઃܭΛॻ͖௚͢ͷΛઌʹ΍͓ͬͯ͘ͱɺ طଘ࣮૷ͷษڧʹ΋ͳΔ͠ɺ
 ͋ͱ͔Βͷ։ൃ΋εϐʔυ͕͋Γͦ͏Ͱ͢ɻ ͏·͘Ͱ͖Δ͔͸΍ͬͯΈͳ͍ͱ Θ͔Βͳ͍Ͱ͕͢ɺɺɺ εϓϦϯτͰઃܭվળ΍ͬͯΈͯɺ
 Ͱ͖ͦ͏ͩͬͨΒ΍ͬͪΌ͍·͠ΐ͏ʂ

    
  48. վળ͍ͨ͠ͳʁ ๻ PM ͜͜ͷઃܭΛॻ͖௚͢ͷΛઌʹ΍͓ͬͯ͘ͱɺ طଘ࣮૷ͷษڧʹ΋ͳΔ͠ɺ
 ͋ͱ͔Βͷ։ൃ΋εϐʔυ͕͋Γͦ͏Ͱ͢ɻ ͏·͘Ͱ͖Δ͔͸΍ͬͯΈͳ͍ͱ Θ͔Βͳ͍Ͱ͕͢ɺɺɺ εϓϦϯτͰઃܭվળ΍ͬͯΈͯɺ
 Ͱ͖ͦ͏ͩͬͨΒ΍ͬͪΌ͍·͠ΐ͏ʂ

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

  50. ͳͥͰ͖ΔΑ͏ʹͳͬͨʁ • ϓϩάϥϚ΋QA΋PM΋ɺ
 ྑ͍੡඼Λ࡞Γ͍ͨͷ͸ಉ͡ • νʔϜ͕෼͔Ε͍ͯΔͱɺ
 ͦΕͧΕͷ࢓ࣄʹࢹ໺͕ڱ·Δʢ։ൃɾςετɾཁ݅ݕ౼ʣ • ͦΕͧΕͷ৬ೳؒͰͷஅઈ͕ൃੜ͍ͯͨ͠ •

    νʔϜͷ౷߹ʹΑͬͯɺ
 νʔϜͷ໨త͕ʮྑ͍੡඼Λ࡞Δ͜ͱʯʹͳͬͨ
  51. Conwayͷ๏ଇ “organizations which design systems ...
 are constrained to produce

    designs 
 which are copies of the communication 
 structures of these organizations” “૊৫ͷઃܭ͢ΔγεςϜʹ͸ ... 
 ͦͷ૊৫ͷίϛϡχέʔγϣϯߏ଄Λ
 ͦͷ··൓өͨ͠ઃܭʹͳΔ
 ͱ͍͏੍໿͕͋Δ” Melvin Conway
  52. νʔϜΛ΋ͬͱଟ༷ʹ͢Δ

  53. จݴमਖ਼ϑϩʔ  จݴνʔϜʢ5$ʣ͕จݴҊ࡞੒ λεΫνέοτ࡞੒ ࡞੒Ҋ௨Γ࣮૷ ςετ

  54. จݴमਖ਼ϑϩʔ  จݴνʔϜʢ5$ʣ͕จݴҊ࡞੒ λεΫνέοτ࡞੒ ࡞੒Ҋ௨Γ࣮૷ ςετ ։ൃνʔϜλεΫ

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

  56. ఏҊͯ͠Έͨ 

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

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

  59. ௕จͰౖΒΕΔ ※ಡ·ͳ͍͍ͯ͘Ͱ͢
 ※ݱ৔͸΋͏গ͠Ժ΍͔Ͱͨ͠

  60. ͦΕ·Ͱฉ͍ͯͳ͔͚ͬͨͩͰ • ։ൃνʔϜ΋੡඼จݴʢTCʣνʔϜ΋
 ΋ͱ΋ͱͷϑϩʔʹ΋΍΋΍͸͋ͬͨ • ॳΊͷఏҊ͸ɺ։ൃνʔϜͷ΋΍΋΍͔͠
 վળ͞Εͳ͍΋ͷͩͬͨ • ٕज़తͳ͜ͱΛ੡඼จݴʢTCʣνʔϜʹؙ౤͛͠ͳ͍ •

    ࠷খݶͷֶशίετͰ੡඼จݴʢTCʣνʔϜ͕
 ΍Γ͍ͨ͜ͱΛͰ͖ΔΑ͏ʹ 
  61. ඇΤϯδχΞ΁ͷֶशίετΛ࠷খݶʹ • ։ൃ؀ڥߏஙࣗମΛγϯϓϧʹ • GitHubͷ࢖͍ํͳͲɺ։ൃͷυΩϡϝϯτ੔උ • จݴมߋ༻ͷ։ൃϞʔυͷ࡞੒ • ϦιʔεʢจݴϑΝΠϧʣ
 ͱϓϩμΫτίʔυͷ෼཭

    • ࠔͬͨ࣌ʹ͍ͭͰ΋ฉ͍ͯ΋Β͑Δؔ܎ੑ 
  62. ඇΤϯδχΞ΁ͷֶशίετΛ࠷খݶʹ • ։ൃ؀ڥߏஙࣗମΛγϯϓϧʹ • GitHubͷ࢖͍ํͳͲɺ։ൃͷυΩϡϝϯτ੔උ • จݴมߋ༻ͷ։ൃϞʔυͷ࡞੒ • ϦιʔεʢจݴϑΝΠϧʣ
 ͱϓϩμΫτίʔυͷ෼཭

    • ࠔͬͨ࣌ʹ͍ͭͰ΋ฉ͍ͯ΋Β͑Δؔ܎ੑ 
  63. ඇΤϯδχΞ΁ͷֶशίετΛ࠷খݶʹ • ։ൃ؀ڥߏஙࣗମΛγϯϓϧʹ • GitHubͷ࢖͍ํͳͲɺ։ൃͷυΩϡϝϯτ੔උ • จݴมߋ༻ͷ։ൃϞʔυͷ࡞੒ • ϦιʔεʢจݴϑΝΠϧʣ
 ͱϓϩμΫτίʔυͷ෼཭

    • ࠔͬͨ࣌ʹ͍ͭͰ΋ฉ͍ͯ΋Β͑Δؔ܎ੑ  ৬ೳΛӽ͓͑ͯޓ͍ʹ޾ͤͳվળ͕ʂ
  64. ࣦഊͯ͠ɺ͍Ζ͍Ζͳ৬ೳͷ
 ϝϯόʔΛҰͭͷνʔϜʹ͢Δ

  65. ࣦഊֶͯ͠Ϳɺ
 νʔϜΛڧ͘͢Δํ๏

  66. ͱ͋ΔࣗಈςετͷษڧձͰͷίϝϯτ • ๻͕ೖࣾ͢ΔΑΓ΋લɺ
 GaroonʹࣗಈςετΛಋೖ͠Α͏ͱ͠ɺ
 ഊ๺ͨ͠ݩGaroonͷϝϯόʔ͕͍ͨ  

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

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

    σάϨൃੜϦεΫΛԼ͍͛ͨ • ςετͷͳ͍Garoon͸ϨΨγʔίʔυͩʂ  6OJU5FTUͱ&&Λಋೖ͠Α͏ʂ
  69. ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ

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

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

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

  73. ࠜ෇͔ͳ͍ςετ ςετॻ͘ͷ΋࣮ߦ͢Δͷ΋ΊΜͲ͍͘͞ ຖேདྷΔͨͼʹCI͕མͪͯΔ͚ͲͲ͏͢Μͷʁ ࣮૷΋ؒʹ߹Θͳ͍ͷʹɺςετ΋ॻ͍ͯͨΒऴΘΒͳ͍Α ͑ɺCI͸མͱͨ͠ਓ͕௚͞ͳ͍ͱ͍͚ͳ͍ϧʔϧʁ ΋ͱ΋ͱςετͳ͍͔Β
 ৽͘͠ॻ͘ίʔυʹ΋ςετॻ͘ͷ΍Ί͍͍ͯʁ Ͳ͏΍ͬͯςετ࣮ߦ͢Μͷʁ ઌʹ։ൃͪ͠Ό͍͍ͨΜͰɺޙͰςετॻ͖·͢ ͳΜͰςετॻ͘ͷʁίετߴ͘ͳ͍ʁ

    ※ಡ·ͳ͍͍ͯ͘Ͱ͢
 ※ݱ৔͸΋͏গ͠Ժ΍͔Ͱͨ͠
  74. ͳͥςετ͕ࠜ෇͔ͳ͔ͬͨͷ͔ • εΩϧͱίʔυ඼࣭΁ͷҙ͕ࣝߴ͍
 ϝϯόʔͷΈ͕ؤு͍ͬͯͨ • ͦ΋ͦ΋ͷίʔυεΩϧ͕
 ͦ͜·Ͱߴ͘ͳ͍ϝϯόʔ • ίʔυ඼࣭ΑΓ΋εϐʔυΛ
 ॏࢹ͍ͨ͠ϝϯόʔ

    
  75. ͳͥςετ͕ࠜ෇͔ͳ͔ͬͨͷ͔ • εΩϧͱίʔυ඼࣭΁ͷҙ͕ࣝߴ͍
 ϝϯόʔͷΈ͕ؤு͍ͬͯͨ • ͦ΋ͦ΋ͷίʔυεΩϧ͕
 ͦ͜·Ͱߴ͘ͳ͍ϝϯόʔ • ίʔυ඼࣭ΑΓ΋εϐʔυΛ
 ॏࢹ͍ͨ͠ϝϯόʔ

     νʔϜͷ඼࣭΁ͷҙࣝΛἧ͑Δඞཁ͕͋ͬͨ
  76. νʔϜͷ඼࣭΁ͷҙࣝΛἧ͑Δ • νʔϜϝϯόʔ͸
 ΊΜͲ͕͘͞ΓΛ૝ఆ͢Δ • ϧʔϧͰ͸ͳ͘໨తҙࣝΛڞ༗͢Δ

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

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

    9 ϓϩάϥϚͷࡾେඒಙͷҰͭɺ
 ଵଦΛ׆͔͢࢓૊Έ͕ඞཁ
  79. పఈతʹଵଦʹ༏͘͠ • Կ΋ߟ͑ͳͯ͘΋ςετ͕͙͢ʹ࣮ߦ • ϓϧϦΫ͕࡞੒͞ΕͨΒCIͰςετ • Ϛʔδ͞ΕͨΒCIͰςετ • ςετ׬ྃ·Ͱͷ࣌ؒΛ୹͘ʢ2࣌ؒˠ8෼ʣ •

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

    ؒҧ͑ͨΒ༏͘͠ɾແ࣊൵ʹCI͕ڭ͑Δ ςετεΩϧͷͳ͍ϝϯόʔͰ΋࠷௿ݶ
 ςετ͕௨ͤΔΑ͏ʹ
  81. ϧʔϧͰ͸ͳ͘໨తҙࣝΛڞ༗͢Δ • νʔϜͷҙࣝΛϧʔϧͰἧ͑Α͏ͱ͢Δͱഁ୼͢Δ • e.g. CIΛམͱͨ͠Βམͱͨ͠ਓ͕࣏͢ͱ͍͏ϧʔϧ • ʮಉ͜͡ͱ͕ͳ͍Α͏ʹؾΛ͚ͭ·͢ʯͰ
 ಉ͜͡ͱ͕·ͨى͖Δ •

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

    ϧʔϧ͕༗໊ແ࣮Խ͢Δ  νʔϜʹ͸ϧʔϧͰ͸ͳ͘ɺ໨తΛڞ༗͠Α͏
  83. ϧʔϧʹ͸΋ͱ΋ͱ໨త͕͋Δ $*Λམͱͨ͠Βམͱͨ͠ਓ͕࣏͢ ϧʔϧɿ ্Ґͷ໨తɿ ίʔυͷ඼࣭Λอ͍ͪͨ ໨తɿ $*ΛάϦʔϯʹอ͍ͪͨ 

  84. Gustav Mahler “Tradition ist Bewahrung des Feuers
 und nicht Anbetung

    der Asche.” “఻౷ͱ͸ՐΛकΔ͜ͱͰ͋Γɺ փΛਸΊΔ͜ͱͰ͸ͳ͍” 
  85. Gustav Mahler “Tradition ist Bewahrung des Feuers
 und nicht Anbetung

    der Asche.” “఻౷ͱ͸ՐΛकΔ͜ͱͰ͋Γɺ փΛਸΊΔ͜ͱͰ͸ͳ͍” ༗໊ແ࣮ͳϧʔϧ͸փɻ कΓ͍ͨՐ͕Կ͔Λ఻͑Δ 
  86. ίʔυͷ඼࣭ͱ͍͏कΓ͍ͨՐ • ڌ఺Λ·͍ͨͰͷ
 ίʔυϨϏϡʔ • ւ֎ڌ఺ؚΊશһͰͷ
 Readable Codeͷྠߨ • ւ֎ڌ఺ؚΊશһͰͷ


    ϨΨγʔίʔυվળΨΠυͷྠߨ 
  87. ίʔυͷ඼࣭ͱ͍͏कΓ͍ͨՐ • ڌ఺Λ·͍ͨͰͷ
 ίʔυϨϏϡʔ • ւ֎ڌ఺ؚΊશһͰͷ
 Readable Codeͷྠߨ • ւ֎ڌ఺ؚΊશһͰͷ


    ϨΨγʔίʔυվળΨΠυͷྠߨ  ίʔυ඼࣭Λڞ௨ݴޠͰٞ࿦Ͱ͖ΔΑ͏ʹ
  88. ڞ௨ݴޠͰίʔυ඼࣭ΛޠΔ ࢲ͸ʓʓͱॻ͍ͨํ͕ಡΈ΍͍͢ͱࢥ͏ ྠߨલͷίʔυϨϏϡʔ 

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

  90. ڞ௨ݴޠͰίʔυ඼࣭ΛޠΔ 3FBEBCMF$PEFͷ˚ষʹ΋͋ΔΑ͏ʹ
 ʓʓͱॻ͍ͨํ͕ಡΈ΍͍͢ͱࢥ͏ ྠߨޙͷίʔυϨϏϡʔ 

  91. ڞ௨ݴޠͰίʔυ඼࣭ΛޠΔ 3FBEBCMF$PEFͷ˚ষʹ΋͋ΔΑ͏ʹ
 ʓʓͱॻ͍ͨํ͕ಡΈ΍͍͢ͱࢥ͏ ͳΔ΄Ͳʂ
 ͨͩ˘ষͷߟ͑΋ೖΕΔͱ΋ͬͱྑͦ͞͏ ྠߨޙͷίʔυϨϏϡʔ 

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

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

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

  95. • t_wada͞Μͷษڧձ νʔϜͰษڧͰ͖Δ෱རްੜ  https://twitter.com/t_wada/status/1186933031266734081

  96. • yoku0825 API Enterprise! • ࣮ફϋΠύϑΥʔϚϯε
 MySQLͷษڧձ 
 with yoku0825͞Μ

    νʔϜͰษڧͰ͖Δ෱རްੜ  https://blog.cybozu.io/entry/2019-11-yoku0825
  97. Garoonͷҋ͸੖Εͨͷ͔  

  98. վળ͸ਐΈͩ͢ɺ͞ΕͲ • ͭΒ͍΋ͷ͸ͭΒ͍ • 17೥ੵΈॏͶͨෛ࠴͸ͱͯ΋શͯ͸վमͰ͖ͳ͍ • ιʔείʔυʹ͚ͩ޲͖߹͍ͬͯΕ͹
 Α͍ঢ়ଶͰ͸ͳ͍ͷͰͦΕ͸ͦΕͰ
 ΤϯδχΞͱͯ͠͸πϥ͍ •

    ·ͩ·ͩେྔʹࣦഊΛ͍ͯ͠Δ 
  99. ;Γ͔͑ΓͷProblemొ࿥݅਺ਪҠ 

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

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

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

  103. Զͨͪͷઓ͍͸͜Ε͔Βͩʂ • ఆৗ࡞ۀͷࣗಈԽ • ։ൃணख͔ΒϦϦʔε·Ͱͷ
 ϦʔυλΠϜ࡟ݮ • ΦϨΦϨϑϨʔϜϫʔΫ͔Βͷ୤٫ • ϞϯελʔΫϥεͱͷઓ͍

    • PSR४ڌ • ΞϓϦέʔγϣϯύϑΥʔϚϯεϚωʔδϟͷಋೖ • DIίϯςφͷಋೖ • ViewͱControllerͷ෼཭ • ΧϓηϧԽ͞Ε͍ͯͳ͍ΫϥεͷରԠ • ࢓༷ԽςετͷڧԽ  • σʔλ෼ੳػೳͷ֦ॆ • ࣗಈςετͷߴ଎Խ • ΦϨΦϨORM͔Βͷ୤٫ • PHP 4࣌୅ͷه๏ͷ๾໓ • ςετࠔ೉ͳΫϥεͷղফ • ControllerͱModelͷ෼཭ • ϕʔεΫϥεͷ࠶ઃܭ • UtilΫϥεɺLogicΫϥεͷղମ • ॏෳίʔυͷআڈ • etc.
  104. Զͨͪͷઓ͍͸͜Ε͔Βͩʂ • ఆৗ࡞ۀͷࣗಈԽ • ։ൃணख͔ΒϦϦʔε·Ͱͷ
 ϦʔυλΠϜ࡟ݮ • ΦϨΦϨϑϨʔϜϫʔΫ͔Βͷ୤٫ • ϞϯελʔΫϥεͱͷઓ͍

    • PSR४ڌ • ΞϓϦέʔγϣϯύϑΥʔϚϯεϚωʔδϟͷಋೖ • DIίϯςφͷಋೖ • ViewͱControllerͷ෼཭ • ΧϓηϧԽ͞Ε͍ͯͳ͍ΫϥεͷରԠ • ࢓༷ԽςετͷڧԽ  • σʔλ෼ੳػೳͷ֦ॆ • ࣗಈςετͷߴ଎Խ • ΦϨΦϨORM͔Βͷ୤٫ • PHP 4࣌୅ͷه๏ͷ๾໓ • ςετࠔ೉ͳΫϥεͷղফ • ControllerͱModelͷ෼཭ • ϕʔεΫϥεͷ࠶ઃܭ • UtilΫϥεɺLogicΫϥεͷղମ • ॏෳίʔυͷআڈ • etc. ·ͩ·ͩͨ͘͞ΜࣦഊͰ͖Δ
  105. ·ͱΊ • ࣦഊͯ͠ɺνʔϜΛ޿͍͛ͯ͜͏ • ৭ʑͳ৬ೳͷϝϯόʔΛҰͭͷνʔϜʹ͠Α͏ • ࣦഊͯ͠ɺνʔϜΛڧ͍ͯ͘͜͠͏ • ϧʔϧͰ͸ͳ͘ɺ໨తΛڞ༗͠Α͏ •

    ࣦഊ͠ͳ͍ํ๏ΛֶͿΑΓɺ
 ࣦഊ͔ΒֶͿํ๏Λֶ΅͏ 
  106. Ұॹʹࣦഊͯ͘͠ΕΔਓ
 We're hiring