PHP Conference 2019でのサイボウズのスポンサーセッションです。 #phpcon #Track3
2019/12/6 追記 スライド76~77で、「伝統とは火を守ることであり、灰を崇めることではない」という言葉をGustav Mahler の言葉として引用していますが、Gustav Mahler の言葉である、という明確な出典はありませんでした。
PHP Conference 2019Yuichi Sugiyama@oogFranzCybozu, Garoon.վળࣦഊֶͯ͠Ϳɺ ϨΨγʔϓϩμΫτʹཱ͔ͪ͏νʔϜ࡞Γɻ
View Slide
վળͯ͠·͔͢ʁ
ࣦഊͯ͠·͔͢ʁ
Whoami• ਿࢁ ༞Ұ @oogFranz• αΠϘζ5ΤϯδχΞ• େاۀ͚άϧʔϓΣΞGaroon࡞ͬͯΔ• ෳۀδϟζϛϡʔδγϟϯ@MASHݭָஂ
• େن͚ͷάϧʔϓΣΞ• ੜ࢈ੑɾνʔϜϫʔΫ্ͷࢧԉ
• PHPͱMySQLͰͰ͖ͯΔWebΞϓϦέʔγϣϯ• ։ൃ17• PHP 4͔Β7.2ʹ• MySQL 4ܥ͔Β5.7ʹ
ࠓ͢͜ͱ• ࣦഊֶͯ͠ͿɺνʔϜͷ͛ํ• ࣦഊֶͯ͠ͿɺνʔϜͷڧ͘͢Δํ๏
৽ਓΤϯδχΞͷɺೖࣾ͢Δ
QAϦʔμʔPMσβΠϯɾจݴϓϩάϥϚνʔϜϦʔμʔ৽ਓΤϯδχΞೖࣾ͢ΔQAνʔϜϕτφϜɾ্ւϓϩάϥϚ5લͷ։ൃମ੍
৽ਓΤϯδχΞೖࣾ͢Δ• ΓͱΓͷ΄ͱΜͲϓϩάϥϚͷ3ਓͱ• λεΫ͕ϦʔμʔΛ௨ͯ͠PM͔Β ߱Γͯ͘ΔͷͰͻͨ͢Β͜ͳ͢• ςετຊͷQAϦʔμʔ͕ ւ֎ͷQAνʔϜʹ;ͬͯউखʹͬͯ͘ΕΔ• ιʔείʔυʹूதͰ͖Δ࠷ߴͷڥʂ
QAϦʔμʔPMϓϩάϥϚνʔϜϦʔμʔ࣮ࡍͷίϛϡχέʔγϣϯQAνʔϜϕτφϜɾ্ւϓϩάϥϚ5લͷ։ൃମ੍σβΠϯɾจݴ
৽ਓΤϯδχΞɺҋΛݟΔ͜ͷίʔυಡΈʹ͍͘ɻɻɻ ϦϑΝΫλ͍͍ͯ͠Ͱ͔͢ʁʁϦʔμʔ
৽ਓΤϯδχΞɺҋΛݟΔ͜ͷίʔυಡΈʹ͍͘ɻɻɻ ϦϑΝΫλ͍͍ͯ͠Ͱ͔͢ʁʁ͜Εςετ͕ඞཁ͔ͩΒ2"ʹ֬ೝ͠ͳ͍ͱͶɻͻͱ·ٕͣज़ෛ࠴ശʹొ͠ͱ͍ͯϦʔμʔ
• ٕज़తෛ࠴ɿ ։ൃͷԼΛҾ͖ى͜͢ɺઃܭίʔυͷ• ٕज़ෛ࠴ശɿ ٕज़ෛ࠴ΛՄࢹԽ͠ɺஷΊ͓ͯ͘ॴ ༏ઌ͚վળͷτϥοΩϯάʹ͑Δٕज़ෛ࠴ശ
৽ਓΤϯδχΞɺҋΛݟΔʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣϦʔμʔ
৽ਓΤϯδχΞɺҋΛݟΔʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣϦʔμʔ͜Εొͨ͠Β͍͍ͯ͠ΜͰ͔͢ʁʁ
৽ਓΤϯδχΞɺҋΛݟΔʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ࣍ͷόʔδϣϯͷ։ൃͰͲͷෛ࠴Λ͔͢ ܾΊΔ͔Βͦͷ࣌·ͰͬͯͶϦʔμʔ͜Εొͨ͠Β͍͍ͯ͠ΜͰ͔͢ʁʁ
৽ਓΤϯδχΞɺҋΛݟΔʢ݅Ҏ্ෛ࠴ശʹஷ·ͬͯΔɻɻɻʁʣ࣍ͷόʔδϣϯͷ։ൃͰͲͷෛ࠴Λ͔͢ ܾΊΔ͔Βͦͷ࣌·ͰͬͯͶϦʔμʔ͜Εొͨ͠Β͍͍ͯ͠ΜͰ͔͢ʁʁ࣍ͷόʔδϣϯ։ൃ͍ͬͯͭ࢝·ΔΜͰ͔͢ʁ
৽ਓΤϯδχΞɺҋΛݟΔޙͩΑϦʔμʔ
ࣦഊֶͯ͠Ϳɺ νʔϜͷ͛ํ
ͳͥͨͩͷϦϑΝΫλʹ ͔͔Δͷ͔ʁ
5લͷ։ൃϓϩηεPM1ϲ݄ 2ϲ݄ 2ϲ݄ 1ϲ݄QAϓϩάϥϚཁ݅ݕ౼ ։ൃ ςετ ϦϦʔε࡞ۀ
5લͷ։ൃϓϩηεPM1ϲ݄ 2ϲ݄ 2ϲ݄ 1ϲ݄QAϓϩάϥϚཁ݅ݕ౼ ։ൃ ςετ ϦϦʔε࡞ۀશͳΥʔλʔϑΥʔϧ
• վળΛೖΕ͍ͨʂ͚ͲɻɻɻPM/QAͷ͓͍PM2ϲ݄ͷ։ൃظؒʹೖΓ͖ΔͷʁQAӨڹൣғ͕Γ·͔͢ʁ ςετظؒʹӨڹ͕ɻɻɻ
• վળΛೖΕ͍ͨʂ͚ͲɻɻɻPM/QAͷ͓͍PM2ϲ݄ͷ։ൃظؒʹೖΓ͖ΔͷʁQAӨڹൣғ͕Γ·͔͢ʁ ςετظؒʹӨڹ͕ɻɻɻվળΛͶ͡ࠐΉͨΊͷઓ͍͕ൃੜ
ύϯυϥͷശԽٕͨ͠ज़ෛ࠴ശ• ٕज़ෛ࠴ശʹੵ·ΕΔ = ͦͷλΠϛϯάͰͤͳ͍ෛ࠴͕ओ• ։ൃɾςετ͕େ͖ͳͷ͕Δ• ͳΜͱ͔ணखͰ͖ͯ։ൃظؒͰ ऴΘΒͳ͚Ε·ͨޙ• վળΛͶ͡ࠐΉͨΊͷઓ͍
ͦΜͳͱ͖ɺεΫϥϜ։ൃ͕࢝·Δ
εΫϥϜ։ൃͱ• ͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏• PO/গਓͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ͞ΕΔܭը ࣮ɾςετܭը ࣮ɾςετܭը ࣮ɾςετܭը ࣮ɾςετ2िؒ 2िؒ 2िؒ 2िؒ
ͦΜͳͷɺ্ख͍ͬͨ͘ͷʁʁ
େࣦഊʂʂ ※ಡ·ͳ͍͍ͯ͘Ͱ͢ ※ݱ͏গ͠Ժ͔Ͱͨ͠2ϲ݄͔͚࣮ͯऴΘΒͳ͍ͷʹɺ εϓϦϯτ͝ͱʹ͖ΓΑ࣮͘ऴΘΔʁ3εϓϦϯτ͋ΕऴΘΔ͚Ͳ 1εϓϦϯτ͡ΌΉΓʂʂ࣮ऴΘͬͯͳ͍ͷʹɺςετઃܭͲ͏ΜͷʁϓϩάϥϚ͞Μʂ͜ͷ༷ॻͲ͏ͳͬͯΜͷʂʁ͜ͷػೳ͜ͷεϓϦϯτͰ࣮͢Δʁ ͦΕͱ࣍ͷεϓϦϯτʁPM͑ͯʂςετͰ͖ΔPBI͕ͳ͍ͧʂ࣮ૣΑʂςετ͕ؒʹ߹ͬͯͳ͍͚Ͳ ࣮ਐΊ͍͍ͯΜ͔ʂQA͞ΜʂແཧΓׂ͚ͨ͠Ͳ ͜ͷػೳ͡ΌͳΜͷՁͳ͍Αʂ
ཧͱݱ࣮ͷόʔϯμϯνϟʔτ
εΫϥϜ։ൃͱʢ࠶ܝʣ• ͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏• PO/গਓͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ͞ΕΔܭը ࣮ɾςετܭը ࣮ɾςετܭը ࣮ɾςετܭը ࣮ɾςετ2िؒ 2िؒ 2िؒ 2िؒ
εΫϥϜ։ൃͱʢ࠶ܝʣ• ͍ظؒʢe.g. 2िؒʣͰεϓϦϯτΛઃఆ͠ɺ ͦͷதͰܭըɺ࣮ࢪɺ;Γ͔͑ΓΛߦ͏։ൃख๏• PO/গਓͷ։ൃνʔϜ/εΫϥϜϚελʔ Ͱߏ͞ΕΔܭը ࣮ɾςετܭը ࣮ɾςετܭը ࣮ɾςετܭը ࣮ɾςετ2िؒ 2िؒ 2िؒ 2िࣦؒഊى͖Δલఏ
ϓϩάϥϚͱQAؒͷࣦഊΛ;Γ͔͑ͬͨ• ࣮ͱςετΛεϜʔζʹߦ͏ͨΊͷো• ࣮͢Δ༰ͷೝࣝࠩ• ςετͷͨΊʹඞཁͳใͷೝࣝࠩ• ͓ޓ͍ͷ࡞ۀ༰ͷೝࣝࠩϓϩάϥϚ QAQA
ϓϩάϥϚͱQAؒͷࣦഊΛ;Γ͔͑ͬͨ• ࣮ͱςετΛεϜʔζʹߦ͏ͨΊͷো• ࣮͢Δ༰ͷೝࣝࠩ• ςετͷͨΊʹඞཁͳใͷೝࣝࠩ• ͓ޓ͍ͷ࡞ۀ༰ͷೝࣝࠩϓϩάϥϚ QAQA։ൃνʔϜࣦഊΛܖػʹϓϩάϥϚͱ2"͕ҰͭͷνʔϜʹ
ϓϩάϥϚͱQAͷڞಉ࡞ۀ• ࣮Λ࢝ΊΔલʹɺ࣮ൣғͱςετൣғͷ֬ೝ• ༷ͷ݀Λ࣮લʹQA͔Βڭ͑ͯΒ͑Δ• QA͕ςετͰࠔͬͯΔ͜ͱ͕͙͢ʹΘ͔Δ• ςετઃܭʹϓϩάϥϚͷࣝΛ׆͔ͤΔ• ෆ۩߹ΛҰॹʹɺϦΞϧλΠϜʹ֬ೝɾվम
ϓϩάϥϚͱQAͷڞಉ࡞ۀ• ࣮Λ࢝ΊΔલʹɺ࣮ൣғͱςετൣғͷ֬ೝ• ༷ͷ݀Λ࣮લʹQA͔Βڭ͑ͯΒ͑Δ• QA͕ςετͰࠔͬͯΔ͜ͱ͕͙͢ʹΘ͔Δ• ςετઃܭʹϓϩάϥϚͷࣝΛ׆͔ͤΔ• ෆ۩߹ΛҰॹ͔ͭϦΞϧλΠϜʹ֬ೝɾվमϓϩάϥϚɾ2"ؒͰͷ ίϛϡχέʔγϣϯίετ͕େ෯ݮʂ
վળ͍ͨ͠ͳʁQA͜ͷϦϑΝΫλ͢Δͱςετൣғͪΐͬͱ૿͑ͦ͏ɻ͚ͩͲ͜ͷޙ։ൃ͢ΔՕॴͩ͠ɺޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂQA
վળ͍ͨ͠ͳʁQA͜ͷϦϑΝΫλ͢Δͱςετൣғͪΐͬͱ૿͑ͦ͏ɻ͚ͩͲ͜ͷޙ։ൃ͢ΔՕॴͩ͠ɺޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂ͜ͷ͘Β͍ͷςετൣғͷ૿ՃͳΒɺ ࠓͷεϓϦϯτͰؒʹ߹͏ͶϦϑΝΫλͷؒʹͦͷͷ ςετઃܭऴΘΒͤͱ͘ʂQA
վળ͍ͨ͠ͳʁQA͜ͷϦϑΝΫλ͢Δͱςετൣғͪΐͬͱ૿͑ͦ͏ɻ͚ͩͲ͜ͷޙ։ൃ͢ΔՕॴͩ͠ɺޙʑͷ։ൃεϐʔυΛྑ͍ͨ͘͠ΜͰ͢ʂ͜ͷ͘Β͍ͷςετൣғͷ૿ՃͳΒɺ ࠓͷεϓϦϯτͰؒʹ߹͏ͶϦϑΝΫλͷؒʹͦͷͷ ςετઃܭऴΘΒͤͱ͘ʂQAվળ͕ਐΈग़ͨ͠ʂ
։ൃνʔϜͱPMؒͷࣦഊΛ;Γ͔͑ͬͨ• ػೳ։ൃΛεϜʔζʹߦ͏ͨΊͷো• ࠷ݶඞཁͳػೳͷೝࣝࠩ• ͦͷػೳʹΑ࣮ͬͯݱ͍ͨ͠Ձͷೝࣝࠩ• ͦͷػೳΛ࡞ΔқͷೝࣝࠩϓϩάϥϚQAQA։ൃνʔϜPM
։ൃνʔϜͱPMؒͷࣦഊΛ;Γ͔͑ͬͨ• ػೳ։ൃΛεϜʔζʹߦ͏ͨΊͷো• ࠷ݶඞཁͳػೳͷೝࣝࠩ• ͦͷػೳʹΑ࣮ͬͯݱ͍ͨ͠Ձͷೝࣝࠩ• ͦͷػೳΛ࡞ΔқͷೝࣝࠩϓϩάϥϚQAQAGaroonνʔϜPMࣦഊΛܖػʹҰͭͷνʔϜʹͳͬͨ
վળ͍ͨ͠ͳʁPM͜͜ͷઃܭΛॻ͖͢ͷΛઌʹ͓ͬͯ͘ͱɺطଘ࣮ͷษڧʹͳΔ͠ɺ ͋ͱ͔Βͷ։ൃεϐʔυ͕͋Γͦ͏Ͱ͢ɻ͏·͘Ͱ͖Δ͔ͬͯΈͳ͍ͱΘ͔Βͳ͍Ͱ͕͢ɺɺɺ
վળ͍ͨ͠ͳʁPM͜͜ͷઃܭΛॻ͖͢ͷΛઌʹ͓ͬͯ͘ͱɺطଘ࣮ͷษڧʹͳΔ͠ɺ ͋ͱ͔Βͷ։ൃεϐʔυ͕͋Γͦ͏Ͱ͢ɻ͏·͘Ͱ͖Δ͔ͬͯΈͳ͍ͱΘ͔Βͳ͍Ͱ͕͢ɺɺɺεϓϦϯτͰઃܭվળͬͯΈͯɺ Ͱ͖ͦ͏ͩͬͨΒͬͪΌ͍·͠ΐ͏ʂ
վળ͍ͨ͠ͳʁPM͜͜ͷઃܭΛॻ͖͢ͷΛઌʹ͓ͬͯ͘ͱɺطଘ࣮ͷษڧʹͳΔ͠ɺ ͋ͱ͔Βͷ։ൃεϐʔυ͕͋Γͦ͏Ͱ͢ɻ͏·͘Ͱ͖Δ͔ͬͯΈͳ͍ͱΘ͔Βͳ͍Ͱ͕͢ɺɺɺεϓϦϯτͰઃܭվળͬͯΈͯɺ Ͱ͖ͦ͏ͩͬͨΒͬͪΌ͍·͠ΐ͏ʂվળ͕ਐΈग़ͨ͠ʂ
৫มߋͨ͠Β෦͕͍ͳ͘ͳΓ·ͨ͠https://blog.cybozu.io/entry/2019/02/13/080000
ͳͥͰ͖ΔΑ͏ʹͳͬͨʁ• ϓϩάϥϚQAPMɺ ྑ͍Λ࡞Γ͍ͨͷಉ͡• νʔϜ͕͔Ε͍ͯΔͱɺ ͦΕͧΕͷࣄʹࢹ͕ڱ·Δʢ։ൃɾςετɾཁ݅ݕ౼ʣ• ͦΕͧΕͷ৬ೳؒͰͷஅઈ͕ൃੜ͍ͯͨ͠• νʔϜͷ౷߹ʹΑͬͯɺ νʔϜͷత͕ʮྑ͍Λ࡞Δ͜ͱʯʹͳͬͨ
Conwayͷ๏ଇ“organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations”“৫ͷઃܭ͢ΔγεςϜʹ ... ͦͷ৫ͷίϛϡχέʔγϣϯߏΛ ͦͷ··өͨ͠ઃܭʹͳΔ ͱ͍͏੍͕͋Δ” Melvin Conway
νʔϜΛͬͱଟ༷ʹ͢Δ
จݴमਖ਼ϑϩʔจݴνʔϜʢ5$ʣ͕จݴҊ࡞λεΫνέοτ࡞࡞Ҋ௨Γ࣮ςετ
จݴमਖ਼ϑϩʔจݴνʔϜʢ5$ʣ͕จݴҊ࡞λεΫνέοτ࡞࡞Ҋ௨Γ࣮ςετ։ൃνʔϜλεΫ
จݴमਖ਼ϑϩʔจݴνʔϜʢ5$ʣ͕จݴҊ࡞λεΫνέοτ࡞࡞Ҋ௨Γ࣮ςετ։ൃνʔϜλεΫจݴνʔϜͰ݁ͨ͠ΒΑ͘ͳ͍ʁ
ఏҊͯ͠Έͨ
จͰౖΒΕΔ※ಡ·ͳ͍͍ͯ͘Ͱ͢ ※ݱ͏গ͠Ժ͔Ͱͨ͠
ͦΕ·Ͱฉ͍ͯͳ͔͚ͬͨͩͰ• ։ൃνʔϜจݴʢTCʣνʔϜ ͱͱͷϑϩʔʹ͋ͬͨ• ॳΊͷఏҊɺ։ൃνʔϜͷ͔͠ վળ͞Εͳ͍ͷͩͬͨ• ٕज़తͳ͜ͱΛจݴʢTCʣνʔϜʹؙ͛͠ͳ͍• ࠷খݶͷֶशίετͰจݴʢTCʣνʔϜ͕ Γ͍ͨ͜ͱΛͰ͖ΔΑ͏ʹ
ඇΤϯδχΞͷֶशίετΛ࠷খݶʹ• ։ൃڥߏஙࣗମΛγϯϓϧʹ• GitHubͷ͍ํͳͲɺ։ൃͷυΩϡϝϯτඋ• จݴมߋ༻ͷ։ൃϞʔυͷ࡞• ϦιʔεʢจݴϑΝΠϧʣ ͱϓϩμΫτίʔυͷ• ࠔͬͨ࣌ʹ͍ͭͰฉ͍ͯΒ͑Δؔੑ
ඇΤϯδχΞͷֶशίετΛ࠷খݶʹ• ։ൃڥߏஙࣗମΛγϯϓϧʹ• GitHubͷ͍ํͳͲɺ։ൃͷυΩϡϝϯτඋ• จݴมߋ༻ͷ։ൃϞʔυͷ࡞• ϦιʔεʢจݴϑΝΠϧʣ ͱϓϩμΫτίʔυͷ• ࠔͬͨ࣌ʹ͍ͭͰฉ͍ͯΒ͑Δؔੑ ৬ೳΛӽ͓͑ͯޓ͍ʹͤͳվળ͕ʂ
ࣦഊͯ͠ɺ͍Ζ͍Ζͳ৬ೳͷ ϝϯόʔΛҰͭͷνʔϜʹ͢Δ
ࣦഊֶͯ͠Ϳɺ νʔϜΛڧ͘͢Δํ๏
ͱ͋ΔࣗಈςετͷษڧձͰͷίϝϯτ• ͕ೖࣾ͢ΔΑΓલɺ GaroonʹࣗಈςετΛಋೖ͠Α͏ͱ͠ɺ ഊͨ͠ݩGaroonͷϝϯόʔ͕͍ͨ
ίʔυ࣭ͱͷઓ͍• ෆ۩߹͕େྔൃੜ͍ͯͨ͠• QAͷखಈςετͰෆ۩߹͕େྔʹ• ϦϦʔεޙύονରԠ͕ඞཁʹ• োରԠຊଆ͕த৺ʹͳ͍ͬͯͬͯͨ• σάϨൃੜϦεΫΛԼ͍͛ͨ• ςετͷͳ͍GaroonϨΨγʔίʔυͩʂ
ίʔυ࣭ͱͷઓ͍• ෆ۩߹͕େྔൃੜ͍ͯͨ͠• QAͷखಈςετͰෆ۩߹͕େྔʹ• ϦϦʔεޙύονରԠ͕ඞཁʹ• োରԠຊଆ͕த৺ʹͳ͍ͬͯͬͯͨ• σάϨൃੜϦεΫΛԼ͍͛ͨ• ςετͷͳ͍GaroonϨΨγʔίʔυͩʂ 6OJU5FTUͱ&&Λಋೖ͠Α͏ʂ
࣌ͷϓϩάϥϚͷମ੍ຊϓϩάϥϚνʔϜ ϕτφϜɾ্ւϓϩάϥϚʻਓ
࣌ͷϓϩάϥϚͷମ੍ຊϓϩάϥϚνʔϜ ϕτφϜɾ্ւϓϩάϥϚʼίʔυ࣭ʹର͢Δҙࣝ
͔ࠜͳ͍ςετςετॻ͘ͷ࣮ߦ͢ΔͷΊΜͲ͍͘͞ຖேདྷΔͨͼʹCI͕མͪͯΔ͚ͲͲ͏͢Μͷʁ࣮ؒʹ߹Θͳ͍ͷʹɺςετॻ͍ͯͨΒऴΘΒͳ͍Α͑ɺCIམͱͨ͠ਓ͕͞ͳ͍ͱ͍͚ͳ͍ϧʔϧʁͱͱςετͳ͍͔Β ৽͘͠ॻ͘ίʔυʹςετॻ͘ͷΊ͍͍ͯʁͲ͏ͬͯςετ࣮ߦ͢Μͷʁઌʹ։ൃͪ͠Ό͍͍ͨΜͰɺޙͰςετॻ͖·͢ͳΜͰςετॻ͘ͷʁίετߴ͘ͳ͍ʁ※ಡ·ͳ͍͍ͯ͘Ͱ͢ ※ݱ͏গ͠Ժ͔Ͱͨ͠
ͳͥςετ͕͔ࠜͳ͔ͬͨͷ͔• εΩϧͱίʔυ࣭ͷҙ͕ࣝߴ͍ ϝϯόʔͷΈ͕ؤு͍ͬͯͨ• ͦͦͷίʔυεΩϧ͕ ͦ͜·Ͱߴ͘ͳ͍ϝϯόʔ• ίʔυ࣭ΑΓεϐʔυΛ ॏࢹ͍ͨ͠ϝϯόʔ
ͳͥςετ͕͔ࠜͳ͔ͬͨͷ͔• εΩϧͱίʔυ࣭ͷҙ͕ࣝߴ͍ ϝϯόʔͷΈ͕ؤு͍ͬͯͨ• ͦͦͷίʔυεΩϧ͕ ͦ͜·Ͱߴ͘ͳ͍ϝϯόʔ• ίʔυ࣭ΑΓεϐʔυΛ ॏࢹ͍ͨ͠ϝϯόʔνʔϜͷ࣭ͷҙࣝΛἧ͑Δඞཁ͕͋ͬͨ
νʔϜͷ࣭ͷҙࣝΛἧ͑Δ• νʔϜϝϯόʔ ΊΜͲ͕͘͞ΓΛఆ͢Δ• ϧʔϧͰͳ͘తҙࣝΛڞ༗͢Δ
ΊΜͲ͕͘͞ΓΛఆ͢Δ• ΊΜͲ͕͘͞ΓΊΜͲ͍͘͜͞ͱΛ͠ͳ͍• ςετͷηοτΞοϓ͕ΊΜͲ͍͘͞• ςετͷ࣮ߦ͕࣌ؒͯ͘ΊΜͲ͍͘͞• Ϛʔδ͢Δલʹςετ͕௨ΔͷΛ֬ೝ͢Δɺ ͱ͍͏ͷΛಓಙ৺ͰकΒͤΔͷແཧ9
ΊΜͲ͕͘͞ΓΛఆ͢Δ• ΊΜͲ͕͘͞ΓΊΜͲ͍͘͜͞ͱΛ͠ͳ͍• ςετͷηοτΞοϓ͕ΊΜͲ͍͘͞• ςετͷ࣮ߦ͕࣌ؒͯ͘ΊΜͲ͍͘͞• Ϛʔδ͢Δલʹςετ͕௨ΔͷΛ֬ೝ͢Δɺ ͱ͍͏ͷΛಓಙ৺ͰकΒͤΔͷແཧ9ϓϩάϥϚͷࡾେඒಙͷҰͭɺ ଵଦΛ׆͔͢Έ͕ඞཁ
పఈతʹଵଦʹ༏͘͠• Կߟ͑ͳͯ͘ςετ͕͙͢ʹ࣮ߦ• ϓϧϦΫ͕࡞͞ΕͨΒCIͰςετ• Ϛʔδ͞ΕͨΒCIͰςετ• ςετྃ·Ͱͷ࣌ؒΛ͘ʢ2࣌ؒˠ8ʣ• ؒҧ͑ͨΒ༏͘͠ɾແ࣊൵ʹCI͕ڭ͑Δ
పఈతʹଵଦʹ༏͘͠• Կߟ͑ͳͯ͘ςετ͕͙͢ʹ࣮ߦ• ϓϧϦΫ͕࡞͞ΕͨΒCIͰςετ• Ϛʔδ͞ΕͨΒCIͰςετ• ςετྃ·Ͱͷ࣌ؒΛ͘ʢ2࣌ؒˠ8ʣ• ؒҧ͑ͨΒ༏͘͠ɾແ࣊൵ʹCI͕ڭ͑ΔςετεΩϧͷͳ͍ϝϯόʔͰ࠷ݶ ςετ͕௨ͤΔΑ͏ʹ
ϧʔϧͰͳ͘తҙࣝΛڞ༗͢Δ• νʔϜͷҙࣝΛϧʔϧͰἧ͑Α͏ͱ͢Δͱഁ͢Δ• e.g. CIΛམͱͨ͠Βམͱͨ͠ਓ͕࣏͢ͱ͍͏ϧʔϧ• ʮಉ͜͡ͱ͕ͳ͍Α͏ʹؾΛ͚ͭ·͢ʯͰ ಉ͜͡ͱ͕·ͨى͖Δ• ϧʔϧ͕༗໊ແ࣮Խ͢Δ
ϧʔϧͰͳ͘తҙࣝΛڞ༗͢Δ• νʔϜͷҙࣝΛϧʔϧͰἧ͑Α͏ͱ͢Δͱഁ͢Δ• e.g. CIΛམͱͨ͠Βམͱͨ͠ਓ͕࣏͢ͱ͍͏ϧʔϧ• ʮಉ͜͡ͱ͕ͳ͍Α͏ʹؾΛ͚ͭ·͢ʯͰ ಉ͜͡ͱ͕·ͨى͖Δ• ϧʔϧ͕༗໊ແ࣮Խ͢ΔνʔϜʹϧʔϧͰͳ͘ɺతΛڞ༗͠Α͏
ϧʔϧʹͱͱత͕͋Δ$*Λམͱͨ͠Βམͱͨ͠ਓ͕࣏͢ϧʔϧɿ্Ґͷతɿ ίʔυͷ࣭Λอ͍ͪͨతɿ $*ΛάϦʔϯʹอ͍ͪͨ
Gustav Mahler“Tradition ist Bewahrung des Feuers und nicht Anbetung der Asche.”“౷ͱՐΛकΔ͜ͱͰ͋ΓɺփΛਸΊΔ͜ͱͰͳ͍”
Gustav Mahler“Tradition ist Bewahrung des Feuers und nicht Anbetung der Asche.”“౷ͱՐΛकΔ͜ͱͰ͋ΓɺփΛਸΊΔ͜ͱͰͳ͍”༗໊ແ࣮ͳϧʔϧփɻकΓ͍ͨՐ͕Կ͔Λ͑Δ
ίʔυͷ࣭ͱ͍͏कΓ͍ͨՐ• ڌΛ·͍ͨͰͷ ίʔυϨϏϡʔ• ւ֎ڌؚΊશһͰͷ Readable Codeͷྠߨ• ւ֎ڌؚΊશһͰͷ ϨΨγʔίʔυվળΨΠυͷྠߨ
ίʔυͷ࣭ͱ͍͏कΓ͍ͨՐ• ڌΛ·͍ͨͰͷ ίʔυϨϏϡʔ• ւ֎ڌؚΊશһͰͷ Readable Codeͷྠߨ• ւ֎ڌؚΊશһͰͷ ϨΨγʔίʔυվળΨΠυͷྠߨ ίʔυ࣭Λڞ௨ݴޠͰٞͰ͖ΔΑ͏ʹ
ڞ௨ݴޠͰίʔυ࣭ΛޠΔࢲʓʓͱॻ͍ͨํ͕ಡΈ͍͢ͱࢥ͏ྠߨલͷίʔυϨϏϡʔ
ڞ௨ݴޠͰίʔυ࣭ΛޠΔࢲʓʓͱॻ͍ͨํ͕ಡΈ͍͢ͱࢥ͏ͦΕ͋ͳͨͷओ؍Ͱʁࢲͷॻ͖ํͷํ͕ͯ͘ྑ͍ྠߨલͷίʔυϨϏϡʔ
ڞ௨ݴޠͰίʔυ࣭ΛޠΔ3FBEBCMF$PEFͷ˚ষʹ͋ΔΑ͏ʹ ʓʓͱॻ͍ͨํ͕ಡΈ͍͢ͱࢥ͏ྠߨޙͷίʔυϨϏϡʔ
ڞ௨ݴޠͰίʔυ࣭ΛޠΔ3FBEBCMF$PEFͷ˚ষʹ͋ΔΑ͏ʹ ʓʓͱॻ͍ͨํ͕ಡΈ͍͢ͱࢥ͏ͳΔ΄Ͳʂ ͨͩ˘ষͷߟ͑ೖΕΔͱͬͱྑͦ͞͏ྠߨޙͷίʔυϨϏϡʔ
νʔϜΛͬͱڧ͘͢Δ
νʔϜͰษڧ͢Δ• νʔϜϝϯόʔશһͰಉ͡ମݧΛ͢Δͱɺ νʔϜͰٞ͢Δڞ௨ݴޠʹͳΔ• ϝϯόʔશһ͕ΔτϨʔχϯάλεΫ• ಉ͡λεΫΛෳڌͰΔ
ւ֎ڌʹू·ͬͯษڧձ
• t_wada͞ΜͷษڧձνʔϜͰษڧͰ͖Δརްੜhttps://twitter.com/t_wada/status/1186933031266734081
• yoku0825 API Enterprise!• ࣮ફϋΠύϑΥʔϚϯε MySQLͷษڧձ with yoku0825͞ΜνʔϜͰษڧͰ͖Δརްੜhttps://blog.cybozu.io/entry/2019-11-yoku0825
GaroonͷҋΕͨͷ͔
վળਐΈͩ͢ɺ͞ΕͲ• ͭΒ͍ͷͭΒ͍• 17ੵΈॏͶͨෛ࠴ͱͯશͯվमͰ͖ͳ͍• ιʔείʔυʹ͚͖ͩ߹͍ͬͯΕ Α͍ঢ়ଶͰͳ͍ͷͰͦΕͦΕͰ ΤϯδχΞͱͯ͠πϥ͍• ·ͩ·ͩେྔʹࣦഊΛ͍ͯ͠Δ
;Γ͔͑ΓͷProblemొ݅ਪҠ
;Γ͔͑ΓͷProblemొ݅ਪҠݮΔͲ͜Ζ͔૿͑ͯΔ
;Γ͔͑ΓͷProblemొ݅ਪҠࣦഊֶͯ͠ͿνʔϜจԽҭͬͨ
;Γ͔͑ΓͷProblemొ݅ਪҠࣦഊ͠ͳ͍͜ͱΑΓɺࣦഊ͔ΒֶͿํ๏ΛֶͿ
Զͨͪͷઓ͍͜Ε͔Βͩʂ• ఆৗ࡞ۀͷࣗಈԽ• ։ൃணख͔ΒϦϦʔε·Ͱͷ ϦʔυλΠϜݮ• ΦϨΦϨϑϨʔϜϫʔΫ͔Βͷ٫• ϞϯελʔΫϥεͱͷઓ͍• PSR४ڌ• ΞϓϦέʔγϣϯύϑΥʔϚϯεϚωʔδϟͷಋೖ• DIίϯςφͷಋೖ• ViewͱControllerͷ• ΧϓηϧԽ͞Ε͍ͯͳ͍ΫϥεͷରԠ• ༷ԽςετͷڧԽ• σʔλੳػೳͷ֦ॆ• ࣗಈςετͷߴԽ• ΦϨΦϨORM͔Βͷ٫• PHP 4࣌ͷه๏ͷ໓• ςετࠔͳΫϥεͷղফ• ControllerͱModelͷ• ϕʔεΫϥεͷ࠶ઃܭ• UtilΫϥεɺLogicΫϥεͷղମ• ॏෳίʔυͷআڈ• etc.
Զͨͪͷઓ͍͜Ε͔Βͩʂ• ఆৗ࡞ۀͷࣗಈԽ• ։ൃணख͔ΒϦϦʔε·Ͱͷ ϦʔυλΠϜݮ• ΦϨΦϨϑϨʔϜϫʔΫ͔Βͷ٫• ϞϯελʔΫϥεͱͷઓ͍• PSR४ڌ• ΞϓϦέʔγϣϯύϑΥʔϚϯεϚωʔδϟͷಋೖ• DIίϯςφͷಋೖ• ViewͱControllerͷ• ΧϓηϧԽ͞Ε͍ͯͳ͍ΫϥεͷରԠ• ༷ԽςετͷڧԽ• σʔλੳػೳͷ֦ॆ• ࣗಈςετͷߴԽ• ΦϨΦϨORM͔Βͷ٫• PHP 4࣌ͷه๏ͷ໓• ςετࠔͳΫϥεͷղফ• ControllerͱModelͷ• ϕʔεΫϥεͷ࠶ઃܭ• UtilΫϥεɺLogicΫϥεͷղମ• ॏෳίʔυͷআڈ• etc.·ͩ·ͩͨ͘͞ΜࣦഊͰ͖Δ
·ͱΊ• ࣦഊͯ͠ɺνʔϜΛ͍͛ͯ͜͏• ৭ʑͳ৬ೳͷϝϯόʔΛҰͭͷνʔϜʹ͠Α͏• ࣦഊͯ͠ɺνʔϜΛڧ͍ͯ͘͜͠͏• ϧʔϧͰͳ͘ɺతΛڞ༗͠Α͏• ࣦഊ͠ͳ͍ํ๏ΛֶͿΑΓɺ ࣦഊ͔ΒֶͿํ๏Λֶ΅͏
Ұॹʹࣦഊͯ͘͠ΕΔਓ We're hiring