Slide 1

Slide 1 text

PHPͰ
 FizzBuzz໰୊Λ
 ΍ͬͯΈΑ͏ 2019/03/30 tacck ゆるWeb勉強会@札幌 #4 #ゆるWeb札幌

Slide 2

Slide 2 text

୭ UBDDL ໊લ ࠷ۙ͸ݹͷ+BWBͷ͓कΓ ͓࢓ࣄ εϓϨουɾΠʔάϧ ޷͖ͳϑΟΪϡΞεέʔτͷٕ ΏΔ8FCࡳຈ

Slide 3

Slide 3 text

ࠓ೔͓࿩͢͠Δ͜ͱ • FizzBuzz໰୊ • ΍ͬͯΈΑ͏ • റΓϓϨΠ ΏΔ8FCࡳຈ

Slide 4

Slide 4 text

FizzBuzz໰୊ ΏΔ8FCࡳຈ

Slide 5

Slide 5 text

FizzBuzz໰୊ • ϓϩάϥϚʔͷᅂΈ ΏΔ8FCࡳຈ

Slide 6

Slide 6 text

FizzBuzz໰୊ • 3ͷഒ਺Ͱ “Fizz” ͱग़ྗ • 5ͷഒ਺Ͱ “Buzz” ͱग़ྗ • 3ͷഒ਺ ͔ͭ 5ͷഒ਺Ͱ “FizzBuzz” ͱग़ྗ
 (ͭ·Γ15ͷഒ਺) • ͦΕҎ֎͸਺஋ࣗମΛจࣈͱͯ͠ग़ྗ ΏΔ8FCࡳຈ

Slide 7

Slide 7 text

FizzBuzz໰୊ • ࠓճ͸ɺ • 1ʙ100·Ͱͷ੔਺஋Λ༩͑Δɻ • લͷϖʔδͷنଇʹैͬͯग़ྗ͢Δɻ • ͱ͍͏ϓϩάϥϜΛ࡞੒͍ͯ͘͠ɻ ΏΔ8FCࡳຈ

Slide 8

Slide 8 text

΍ͬͯΈΑ͏ ΏΔ8FCࡳຈ

Slide 9

Slide 9 text

Step1: ૉ௚ͳ࣮૷ ΏΔ8FCࡳຈ

Slide 10

Slide 10 text

ૉ௚ͳ࣮૷ • ࡉ͔͍͜ͱ͸ؾʹͤͣʹɻ https://github.com/tacck/PHPFizzBuzzTraining/tree/Step1 ΏΔ8FCࡳຈ

Slide 11

Slide 11 text

Slide 12

Slide 12 text

Step2: ॳ৺ऀ޲͚ ΏΔ8FCࡳຈ

Slide 13

Slide 13 text

ॳ৺ऀ޲͚ • FizzBuzzͷ൑ఆΛؔ਺(ϝιου)Խɻ https://github.com/tacck/PHPFizzBuzzTraining/tree/Step2 ΏΔ8FCࡳຈ

Slide 14

Slide 14 text

Slide 15

Slide 15 text

Step3: ॳ৺ऀΑΓ্Λ໨ࢦ͢ ΫϥεΛ࢖͏ ΏΔ8FCࡳຈ

Slide 16

Slide 16 text

ΫϥεΛ࢖͏ • ໾ׂͷ෼୲ΛΫϥεͰදݱ͢Δɻ • 1ʙ100ͷ਺஋ʹରԠ͢ΔจࣈྻΛදࣔ • ਺஋ͱจࣈͷରԠؔ܎Λ൑ఆ͠ฦ٫ https://github.com/tacck/PHPFizzBuzzTraining/tree/Step3 ΏΔ8FCࡳຈ

Slide 17

Slide 17 text

getFizzBuzz($num) . PHP_EOL; }

Slide 18

Slide 18 text

Slide 19

Slide 19 text

Step4: தڃऀ޲͚ Ϋϥεͷ੹೚Λ෼͚Δ ΏΔ8FCࡳຈ

Slide 20

Slide 20 text

Ϋϥεͷ੹೚? • ͦͷΫϥε͕ʮҰͭͷ੹೚ʯʹด͍ͯ͡Δ͔ • ؔ৺ͷ෼཭ɺૄ݁߹ɺͱ͍ͬͨΩʔϫʔυɻ • 1ʙ100ͷ਺஋ʹରԠ͢ΔจࣈྻΛදࣔ • ਺஋ͱจࣈͷରԠؔ܎ͷ൑ఆ • ରԠ͢Δจࣈྻͷฦ٫ https://github.com/tacck/PHPFizzBuzzTraining/tree/Step4 ΏΔ8FCࡳຈ

Slide 21

Slide 21 text

ؔ৺ • ಛఆͷ੔਺஋Λ༩͑ɺจࣈྻΛग़ྗ͍ͨ͠ɻ • ੔਺஋ͱจࣈྻͷରԠΛอূ͍ͨ͠ɻ • จࣈྻΛ֬ఆ͍ͤͨ͞ɻ ΏΔ8FCࡳຈ

Slide 22

Slide 22 text

ؔ৺ͱ੹೚ • ಛఆͷ੔਺஋Λ༩͑ɺจࣈྻΛग़ྗ͍ͨ͠ɻ
 ˠ ϝιουͷݺͼग़͠ͱ݁Ռͷग़ྗ • ੔਺஋ͱจࣈྻͷରԠΛอূ͍ͨ͠ɻ
 ˠ ੔਺஋Λड͚औΓɺରԠ͢Δදࣔ಺༰ͷฦ٫ • දࣔ಺༰Λ֬ఆ͍ͤͨ͞ɻ
 ˠ ࣗ਎͕ར༻͞ΕΔ৔߹ʹදࣔ಺༰Λฦ٫ ΏΔ8FCࡳຈ

Slide 23

Slide 23 text

ؔ৺ͱ੹೚ • ಛఆͷ੔਺஋Λ༩͑ɺจࣈྻΛग़ྗ͍ͨ͠ɻ
 ˠ ϝιουͷݺͼग़͠ͱग़ྗ • ੔਺஋ͱจࣈྻͷରԠΛอূ͍ͨ͠ɻ
 ˠ ੔਺஋Λड͚औΓɺରԠ͢Δදࣔ಺༰ͷฦ٫ • දࣔ಺༰Λ֬ఆ͍ͤͨ͞ɻ
 ˠ ࣗ਎͕ར༻͞ΕΔ৔߹ʹදࣔ಺༰Λฦ٫ ݺͼग़ͯ͠࢖͏ ݺͼग़ͯ͠࢖͏ ΏΔ8FCࡳຈ

Slide 24

Slide 24 text

ؔ৺ͱ੹೚ ΏΔ8FCࡳຈ ΠϯλϑΣʔε ೖग़ྗ ͷ੹೚ ਖ਼͍͠σʔλΛड͚౉͢੹೚ ਖ਼͍͠σʔλͰ͋Δ੹೚ ґଘؔ܎͸
 Ұํ޲ ґଘؔ܎͸
 Ұํ޲

Slide 25

Slide 25 text

Slide 26

Slide 26 text

Slide 27

Slide 27 text

num = $num; } public function __toString(): string { return 'Fizz'; } public function isAvailable(): bool { return true; } }

Slide 28

Slide 28 text

Step5: റΓϓϨΠ ifจΛ࢖Θͳ͍Ͱ࣮૷͢Δ ΏΔ8FCࡳຈ

Slide 29

Slide 29 text

ifจΛ࢖Θͳ͍Ͱ࣮૷͢Δ • ಄ͷମૢ ΏΔ8FCࡳຈ

Slide 30

Slide 30 text

ifจΛ࢖Θͳ͍Ͱ࣮૷͢Δ • ಄ͷମૢ • ݱ࣮໰୊ͱͯ͠ɺ
 ଟ਺ͷ৚݅෼ذ͸όάΛੜΈ΍͍͢ɻ
 ˠ ʮଟ਺ʯͷ෦෼Λղ͖΄͙͢ https://github.com/tacck/PHPFizzBuzzTraining/tree/Step5 ΏΔ8FCࡳຈ

Slide 31

Slide 31 text

ؔ৺ͱ੹೚ • ಛఆͷ੔਺஋Λ༩͑ɺจࣈྻΛग़ྗ͍ͨ͠ɻ
 ˠ ϝιουͷݺͼग़͠ͱग़ྗ • ੔਺஋ͱจࣈྻͷରԠΛอূ͍ͨ͠ɻ
 ˠ ੔਺஋Λड͚औΓɺରԠ͢Δදࣔ಺༰ͷฦ٫ • දࣔ಺༰Λ֬ఆ͍ͤͨ͞ɻ
 ˠ ࣗ਎͕ར༻͞ΕΔ৔߹ʹදࣔ಺༰Λฦ٫ ΏΔ8FCࡳຈ ͜͜ʹ৚݅෼ذ

Slide 32

Slide 32 text

ؔ৺ͱ੹೚ • ಛఆͷ੔਺஋Λ༩͑ɺจࣈྻΛग़ྗ͍ͨ͠ɻ
 ˠ ϝιουͷݺͼग़͠ͱग़ྗ • ੔਺஋ͱจࣈྻͷରԠΛอূ͍ͨ͠ɻ
 ˠ ੔਺஋Λड͚औΓɺରԠ͢Δදࣔ಺༰ͷฦ٫ • දࣔ಺༰Λ֬ఆ͍ͤͨ͞ɻ
 ˠ ࣗ਎͕ར༻͞ΕΔ৔߹ʹදࣔ಺༰Λฦ٫ ΏΔ8FCࡳຈ ͜͜ʹ஫໨

Slide 33

Slide 33 text

ؔ৺ͱ੹೚ • ಛఆͷ੔਺஋Λ༩͑ɺจࣈྻΛग़ྗ͍ͨ͠ɻ
 ˠ ϝιουͷݺͼग़͠ͱग़ྗ • ੔਺஋ͱจࣈྻͷରԠΛอূ͍ͨ͠ɻ
 ˠ ੔਺஋Λड͚औΓɺରԠ͢Δදࣔ಺༰ͷฦ٫ • දࣔ಺༰Λ֬ఆ͍ͤͨ͞ɻ
 ˠ ࣗ਎͕ར༻͞ΕΔ৔߹ʹදࣔ಺༰Λฦ٫ ΏΔ8FCࡳຈ ࢖͑Δ͔Ͳ͏͔͸ ʮදࣔ಺༰ʯࣗ਎͕஌Δ΂͖

Slide 34

Slide 34 text

ؔ৺ͱ੹೚ ΏΔ8FCࡳຈ ΠϯλϑΣʔε ೖग़ྗ ͷ੹೚ ਖ਼͍͠σʔλΛड͚౉͢੹೚ ਖ਼͍͠σʔλͰ͋Δ੹೚

Slide 35

Slide 35 text

Slide 36

Slide 36 text

isAvailable(); return $presenter; } catch (\ParseError $e) { // none } } return new \App\FizzBuzz\Presenter\NumberPresenter($num); } }

Slide 37

Slide 37 text

num = $num; } public function __toString(): string { return 'Fizz'; } public function isAvailable(): bool { return ($this->num % 3 === 0 && $this->num % 5 !== 0) ? true : eval('invalid'); } }

Slide 38

Slide 38 text

ifจΛ࢖Θͳ͍Ͱ࣮૷͢Δ • Ԡ༻ྫ • ݩ߸໰୊ • ৽ݩ߸͕ൃද͞ΕͨΒɺ
 PresenterΫϥεΛ௥Ճ͢Δ͚ͩɻ https://github.com/tacck/PHPJapaneseEraTraining ΏΔ8FCࡳຈ

Slide 39

Slide 39 text

·ͱΊ ΏΔ8FCࡳຈ

Slide 40

Slide 40 text

·ͱΊ • FizzBuzz໰୊Λɺ
 ͍͔ͭ͘ͷܗͰղ͍ͯΈͨɻ • ΦϒδΣΫτࢦ޲ͷߟ͑ํΛ͏·͘࢖͏ͱɺ
 ҆શ͔֦ͭுੑΛߴ͘Ͱ͖Δɻ
 ˠ ࠓճ࢖ͬͨͷ͸
 ɹ ʮΦʔϓϯɾΫϩʔζυͷݪଇʯ • ಄ͷମૢΛ݉ͶͯɺറΓϓϨΠΛͯ͠ΈΑ͏! ΏΔ8FCࡳຈ

Slide 41

Slide 41 text

·ͱΊ • ੹೚ͷ෼͚ํɺؔ৺ͷ෼཭ɺ
 ࠷ॳ͸೉͍͠ɻ • ʮ͜ͷਓ(Ϋϥε)͸ԿΛ஌͍ͬͯΔ΂͖͔ʯ
 ʮ͜ͷਓ(Ϋϥε)ʹ͸ԿΛ஻ͬͯཉ͍͔͠ʯ
 ਓ(Ϋϥε)ͷؾ࣋ͪʹͳͬͯߟ͑Δɻ • TDD (ςετۦಈ։ൃ) Λ΍Δͱɺ
 ʮΫϥεʹ໰͍͔͚ͳ͕Βʯ։ൃͰ͖Δɻ ΏΔ8FCࡳຈ

Slide 42

Slide 42 text

࣍ճ༧ࠂ? • (PHPͰ)TDDΛ΍ͬͯΈΔ? ΏΔ8FCࡳຈ

Slide 43

Slide 43 text

end ΏΔ8FCࡳຈ