Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

վળͯ͠·͔͢ʁ

Slide 3

Slide 3 text

ࣦഊͯ͠·͔͢ʁ

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

ύϯυϥͷശԽٕͨ͠ज़ෛ࠴ശ • ٕज़ෛ࠴ശʹੵ·ΕΔ = 
 ͦͷλΠϛϯάͰ͸௚ͤͳ͍ෛ࠴͕ओ • ։ൃɾςετ޻਺͕େ͖ͳ΋ͷ͕࢒Δ • ͳΜͱ͔ணखͰ͖ͯ΋։ൃظؒͰ
 ऴΘΒͳ͚Ε͹·ͨ൒೥ޙ • վળΛͶ͡ࠐΉͨΊͷઓ͍

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

େࣦഊʂʂ ※ಡ·ͳ͍͍ͯ͘Ͱ͢
 ※ݱ৔͸΋͏গ͠Ժ΍͔Ͱͨ͠ 2ϲ݄͔͚ͯ΋࣮૷ऴΘΒͳ͍ͷʹɺ
 εϓϦϯτ͝ͱʹ͖ΓΑ࣮͘૷ऴΘΔʁ 3εϓϦϯτ͋Ε͹ऴΘΔ͚Ͳ
 1εϓϦϯτ͡ΌΉΓʂʂ ࣮૷΋ऴΘͬͯͳ͍ͷʹɺςετઃܭͲ͏΍Μͷʁ ϓϩάϥϚ͞Μʂ͜ͷ࢓༷ॻͲ͏ͳͬͯΜͷʂʁ ͜ͷػೳ͸͜ͷεϓϦϯτͰ࣮૷͢Δʁ
 ͦΕͱ΋࣍ͷεϓϦϯτʁPM౴͑ͯʂ ςετͰ͖ΔPBI͕ͳ͍ͧʂ࣮૷ૣΑʂ ςετ͕ؒʹ߹ͬͯͳ͍͚Ͳ
 ࣮૷ਐΊ͍͍ͯΜ͔ʂQA͞Μʂ ແཧ΍Γ෼ׂ͚ͨ͠Ͳ
 ͜ͷػೳ͡ΌͳΜͷՁ஋΋ͳ͍Αʂ

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

ఏҊͯ͠Έͨ 

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

ͦΕ·Ͱฉ͍ͯͳ͔͚ͬͨͩͰ • ։ൃνʔϜ΋੡඼จݴʢTCʣνʔϜ΋
 ΋ͱ΋ͱͷϑϩʔʹ΋΍΋΍͸͋ͬͨ • ॳΊͷఏҊ͸ɺ։ൃνʔϜͷ΋΍΋΍͔͠
 վળ͞Εͳ͍΋ͷͩͬͨ • ٕज़తͳ͜ͱΛ੡඼จݴʢTCʣνʔϜʹؙ౤͛͠ͳ͍ • ࠷খݶͷֶशίετͰ੡඼จݴʢTCʣνʔϜ͕
 ΍Γ͍ͨ͜ͱΛͰ͖ΔΑ͏ʹ 

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

ࣦഊͯ͠ɺ͍Ζ͍Ζͳ৬ೳͷ
 ϝϯόʔΛҰͭͷνʔϜʹ͢Δ

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

ΊΜͲ͕͘͞ΓΛ૝ఆ͢Δ • ΊΜͲ͕͘͞Γ͸ΊΜͲ͍͘͜͞ͱΛ͠ͳ͍ • ςετͷηοτΞοϓ͕ΊΜͲ͍͘͞ • ςετͷ࣮ߦ͕࣌ؒ௕ͯ͘ΊΜͲ͍͘͞ • Ϛʔδ͢Δલʹςετ͕௨ΔͷΛ֬ೝ͢Δɺ
 ͱ͍͏ͷΛಓಙ৺ͰकΒͤΔͷ͸ແཧ 9 ϓϩάϥϚͷࡾେඒಙͷҰͭɺ
 ଵଦΛ׆͔͢࢓૊Έ͕ඞཁ

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

ίʔυͷ඼࣭ͱ͍͏कΓ͍ͨՐ • ڌ఺Λ·͍ͨͰͷ
 ίʔυϨϏϡʔ • ւ֎ڌ఺ؚΊશһͰͷ
 Readable Codeͷྠߨ • ւ֎ڌ఺ؚΊશһͰͷ
 ϨΨγʔίʔυվળΨΠυͷྠߨ  ίʔυ඼࣭Λڞ௨ݴޠͰٞ࿦Ͱ͖ΔΑ͏ʹ

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

νʔϜΛ΋ͬͱڧ͘͢Δ

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

• yoku0825 API Enterprise! • ࣮ફϋΠύϑΥʔϚϯε
 MySQLͷษڧձ 
 with yoku0825͞Μ νʔϜͰษڧͰ͖Δ෱རްੜ  https://blog.cybozu.io/entry/2019-11-yoku0825

Slide 97

Slide 97 text

Garoonͷҋ͸੖Εͨͷ͔  

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

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

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

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

Slide 106

Slide 106 text

Ұॹʹࣦഊͯ͘͠ΕΔਓ
 We're hiring