Slide 1

Slide 1 text

ϋΠύϑΥʔϚϯε
 PHPΞϓϦέʔγϣϯ(΁ͷಓ) ߴ໺ ෱ߊ @fortkle - PHP7 Casual Talks #2

Slide 2

Slide 2 text

ࣗݾ঺հ • @fortkle • ੜਮͷPHPer • ݩʑLaravelਪ͠ͷݱࡏCakePHPer • ۙگɿ͜͜1िؒɺίʔσΟϯάத͸ͣͬͱ
 ɹɹɹᓏࡔ46ͷʮαΠϨϯτϚδϣϦςΟʔʯͷϧʔϓ • Connehito גࣜձࣾͰΤϯδχΞ

Slide 3

Slide 3 text

ϝσΟΞ ϢʔβʔࢀՃܕΞϓϦ mamari jp mamari Q ϚϚͷ 3ਓʹ1ਓ ͕ར༻ʂ ࢀরɿGoogle Analytics ݄ؒར༻ऀ 400ສਓ Ҏ্ ʮਓͷੜ׆ʹͳͯ͘͸ͳΒͳ͍ʯαʔϏεΛ૑Δ

Slide 4

Slide 4 text

“ύϑΥʔϚϯε”

Slide 5

Slide 5 text

ύϑΥʔϚϯε͸Ϗδωεʹ Өڹ͢Δ • Amazon : ϖʔδͷԠ౴଎౓͕0.1ඵݮΔͱച্͕1% ૿Ճͨ͠ • Google : ϖʔδͷԠ౴଎౓͕2%஗͘ͳΔͱɺϢʔ βʔຖͷݕࡧߦಈ͕2%ݮগͨ͠ • Yahoo! : ϖʔδͷԠ౴଎౓Λ0.4ඵ୹ॖ͢Δͱɺτϥ ϑΟοΫ͕9%૿Ճͨ͠ http://radar.oreilly.com/2008/08/radar-theme-web-ops.html http://assets.en.oreilly.com/1/event/29/Keynote%20Presentation%202.pdf http://www.slideshare.net/stoyan/dont-make-me-wait-or-building-highperformance-web-applications#btnNext

Slide 6

Slide 6 text

ύϑΥʔϚϯε = Ԡ౴଎౓?

Slide 7

Slide 7 text

ύϑΥʔϚϯεͱ͸Կ͔ʁ • ϋΠύϑΥʔϚϯε = ʮظ଴Ҏ্ͷੑೳΛ্ ͍͛ͯΔ͜ͱʯ • ύϑΥʔϚϯε͸ʮԠ౴଎౓ʯ͚ͩͰ͸ͳ͍ • ʮੑೳʯ͸ཁ݅ఆٛ͠ʹ͍͘ • ϏδωεʹӨڹ͢Δͷʹܰࢹ͞Ε͕ͪ

Slide 8

Slide 8 text

ੑೳΛ͋ΘΒ͢ʮ඼࣭ಛੑʯ • ʮੑೳʯ͸ཁ݅ఆٛ͠ʹ͍͘ • ιϑτ΢ΣΞςετͷੈքʹʮ඼࣭ಛੑʯͱ͍͏ج४͕͋Δ • ػೳੑɺ৴པੑɺޮ཰ੑɺҠ২ੑɺ࢖༻ੑͷ5ͭ • ࠓճ͸ͦΕΒ඼࣭ಛੑͷதͰ΋ҎԼ2ͭΛऔΓ্͛Δ(ͬ͘͟Γ) • ʮػೳੑɺ৴པੑɺҠ২ੑʯ → ʮίʔυͷಡΈ΍͢͞ʯ • ʮޮ཰ੑɺ࢖༻ੑʯ → ʮԠ౴଎౓ʯ • ʮಡΈ΍͢͞ʯͱʮԠ౴଎౓ʯΛߴΊΔࣄ͕ੑೳͷߴ͞ʹܨ͕Δ

Slide 9

Slide 9 text

ʮಡΈ΍͢͞ʯΛߴΊΔ

Slide 10

Slide 10 text

ʮಡΈ΍͢͞ʯΛߴΊΔ • PHP7ͷ৽͍͠ه๏͸ՄಡੑΛߴΊΔ • ྫʣ??ԋࢉࢠ • nullͰͳ͚Ε͹ͦͷ஋ΛɺnullͳΒӈΦϖϥϯυΛฦ͢ • ΋͏ isset() Ͱ͍͍ͪͪ֬ೝ͠ͳͯ͘ྑ͍ʂʂʂʂ
 
 
 
 
 
 
 // PHP <= 5.6 $name = isset($user["name"]) ? $user["name"] : "໊ແ͠"; // PHP7 $name = $user["name"] ?? "໊ແ͠";

Slide 11

Slide 11 text

ʮಡΈ΍͢͞ʯΛߴΊΔ • ྫʣฦΓ஋ͷλΠϓώϯτɺεΧϥܕͷλΠϓώϯτΛαϙʔτ • ؔ਺ͷฦΓ஋ʹܕ͕ࢦఆͰ͖ΔΑ͏ʹͳͬͨ • ৽ͨʹint, float, string, bool ܕΛαϙʔτ
 
 
 
 
 
 
 
 $num) { $array[$key] = $num * $base; } return $array; } hoge(3); // return [3, 6, 9] hoge("͍͋͏"); // PHP Fatal error: Uncaught TypeError: Argument 1 passed to hoge() must be of the type integer

Slide 12

Slide 12 text

ʮಡΈ΍͢͞ʯΛߴΊΔ • ͦͷଞํ๏͸͜͜Ͱશͯڍ͛ΒΕͳ͍΄Ͳ
 ͨ͘͞Μ͋Δ • ͦͷதͰ΋ʮίʔσΟϯάن໿ʯ͸
 1ͭͷΞϓϩʔν • ʮίʔσΟϯάن໿ʯͱ͍͑͹…

Slide 13

Slide 13 text

ʮಡΈ΍͢͞ʯΛߴΊΔ https://speakerdeck.com/fortkle/yasasiikodeingugui-yue-falsedao-ru

Slide 14

Slide 14 text

ʮಡΈ΍͢͞ʯΛߴΊΔ • ʮ΍͍͞͠ίʔσΟϯάن໿ʯ • ͍͖ͳΓݫ͍͠ϧʔϧΛద༻͠ͳ͍ • ؇͍ϧʔϧΛಠࣗͰ࡞ΓঃʑʹPSR2ͳͲͷ
 ඪ४ʹ͍͍ۙͮͯ͘Ξϓϩʔν • εϥΠυͰ͋·Γ৮Εͳ͔ͬͨ෦෼ • ʮͲ͏΍ͬͯίʔυΛमਖ਼͍ͯ͘͠ͷ͔ʁʯ

Slide 15

Slide 15 text

ʮಡΈ΍͢͞ʯΛߴΊΔ • मਖ਼ΛਓͷखͰߦ͏ • ʮԿඦݸ΋εϖʔε΍Πϯσϯτͷमਖ਼Λͨ͘͠ͳ͍ʯ ʮϛε͕ൃੜ͢Δʯ • ग़དྷΔݶΓػցʹ΍ΒͤΔɺࣗಈԽ • phpcbf͕͓͢͢Ί • phpcsΛೖΕ͍ͯΔͳΒطʹΠϯετʔϧ͞Ε͍ͯΔ(!)

Slide 16

Slide 16 text

ʮಡΈ΍͢͞ʯΛߴΊΔ • ίϚϯυ࣮ߦ΋phpcsͱ΄΅ಉ༷ɻ • ࣮ߦͯ͠git؅ཧ͢Ε͹मਖ਼׬ྃʂͱ͍͏खܰ͞
 
 
 
 
 
 // ࣗಈ੔ܗ $ vendor/bin/phpcbf --standard=./phpcs.xml ./app // มߋϑΝΠϧΛgit؅ཧ $ git st $ git add . $ git commit

Slide 17

Slide 17 text

ʮಡΈ΍͢͞ʯΛߴΊΔ • ن໿Λ୭Ͱ΋ݟ͑Δॴʹஔ͍͓ͯ͘ͷ΋ॏཁ • ن໿ͷυΩϡϝϯτͱ࣮ࡍͷxmlΛ͋ΘͤΔ
 ɹྫʣCookpadɹɹɹɹɹ ྫʣConnehito

Slide 18

Slide 18 text

͜͜·Ͱͷࡶͳ·ͱΊ • PHP7ͷه๏͸ʮಡΈ΍͢͞ʯΛߴΊΔ • ίʔσΟϯάن໿Λ༻ҙ͢Δͷ΋1ͭͷख • ͨͩ͠΍ΔͳΒࣗಈ੔ܗ΋ඞਢ • ૣ͘PHP7ʹҠߦͯ͠଎͍PHPΛखʹೖ́ʢ

Slide 19

Slide 19 text

ʮԠ౴଎౓ʯΛߴΊΔ

Slide 20

Slide 20 text

ʮԠ౴଎౓ʯΛߴΊΔ • PHP7ʹ͢Δ͚ͩͰ͔ͳΓૣ͘ͳΔͬΆ͍ • TwitterͷTLɺPHP7ؔ࿈ͷهࣄɺࢲͷ࣮ମݧ(աڈࢿྉࢀর) • ਖ਼௚ɺҠߦͰେ͖ͳ໰୊͸΄ͱΜͲൃੜ͠ͳ͍(ߴ͍ޙํޓ׵ੑ) • ͔͠͠౰વPHP7ʹ͚ͨͩ͠Ͱ͸ղܾ͠ͳ͍
 ϘτϧωοΫ΋ͨ͘͞Μ͋Δ • ʮਪଌ͢ΔͳɺܭଌͤΑʯby ্࢘ UnixͷҒ͍ਓ


Slide 21

Slide 21 text

ʮԠ౴଎౓ʯΛߴΊΔ • ܭଌ͢ΔʹϓϩϑΝΠϥʔͷ࢓ࣄ • PHPʹରԠ͍ͯ͠ΔϓϩϑΝΠϥʔ • ྫ) Xdebug, Xhprof, NewRelic, Blackfire.io • PHP7ʹରԠ͍ͯ͠ΔϓϩϑΝΠϥʔ(ॏཁ) • Xdebug ɾɾɾରԠࡁΈ • XhprofɾɾɾެࣜඇରԠʢFork൛ͰରԠࡁVer͋Γʣ • NewRelicɾɾɾ 2016೥3݄7೔ରԠVer ϦϦʔεʂ • Blackfire.ioɾɾɾ2016೥2݄2೔ରԠVer ϦϦʔεʂ

Slide 22

Slide 22 text

ʮԠ౴଎౓ʯΛߴΊΔ Xdebug Xhprof http://blog.howtelevision.co.jp/entry/2014/11/14/192350 https://www.grafikart.fr/tutoriels/php/blackfire-631 http://newrelic.com/application-monitoring NewRelic Blackfire.io

Slide 23

Slide 23 text

ʮԠ౴଎౓ʯΛߴΊΔ • ࠓճ͸XhprofΛ࢖ͬͨࣄྫΛखॱ΋߹Θͤͯ঺հ • ର৅ΞϓϦέʔγϣϯ͸CakePHP2Ͱ࡞੒͞Εͨ
 ؅ཧը໘ͷΑ͏ͳCRUD͕උΘͬͨҰൠతͳ΋ͷ • ಛʹҰཡϖʔδͷԠ౴଎౓ΛߴΊͯΈΔ • ಋೖ͸͍ͭ͘΋खॱ͕ॻ͔Εͨهࣄ͕͋ΔͷͰͦͪΒ
 PHP7ͰXHProfΛར༻͢Δํ๏ʢ࢑ఆ൛ʣ
 http://qiita.com/morisuke/items/49f17bda2c764ae8f725

Slide 24

Slide 24 text

ʮԠ౴଎౓ʯΛߴΊΔ • هࣄҰཡදࣔը໘ͷϖʔδɻ
 هࣄσʔλΛDB͔Βऔಘͯ͠
 ੔ܗͯ͠ද͍ࣔͯ͠Δɻ • ࣮ߦ1ճ໨ɻԠ౴଎౓͸ 27.6ඵɻ • Ωϟογϡ΋Կ΋ͤͣߟ͑ͣʹ
 શͯͷσʔλ(1ສ݅ఔ౓)Λ
 1ϖʔδʹදࣔͯ͠ΈΔͱ͜Μͳײ͡ɻ

Slide 25

Slide 25 text

ʮԠ౴଎౓ʯΛߴΊΔ • ॏ͍ͷ͸੺͘ͳ͍ͬͯΔ෦෼ɻ
 ͜͜Λॏ఺తʹݟ͍ͯ͘ɻ • ओʹCakeͷ഑ྻૢ࡞ͷ
 ศརΫϥε Hash͕ݪҼ • Hash::get()͸15ສճ
 Hash::extract()͸9ઍճ
 ίʔϧ͞Ε͍ͯΔ • ͜ͷճ਺ΛݮΒͤͳ͍͔ɺ
 ࣮ߦՕॴΛ֬ೝ

Slide 26

Slide 26 text

ʮԠ౴଎౓ʯΛߴΊΔ • ࣮ߦ2ճ໨ɻԠ౴଎౓͸ 22.3ඵɻ
 5.3ඵͷ୹ॖɻ • ΍ͬͨ͜ͱ͸ɺ
 DB͔Βσʔλऔಘޙɺ഑ྻͷՃ޻Λ
 afterFind(ίʔϧόοΫϝιου)Ͱ
 ࣮ߦ͍͕ͯͨ͠ෆཁͳͷͰແޮԽɻ

Slide 27

Slide 27 text

ʮԠ౴଎౓ʯΛߴΊΔ • Hash::get()ͷίʔϧ਺͕15ສճ͔Β
 12.8ສճ·Ͱ࡟ݮɻ • Hash::extract()ͷίʔϧ਺͕มΘͬͯ
 ͍ͳ͔ͬͨͷͰλʔήοτΛ
 Hash::extract()ʹઃఆɻෆཁͳॲཧ͕
 ͳ͍͔୳͢ɻ • ςϯϓϨʔτ(view)Ͱ Hash::extract()
 Λແବʹ࢖͍ͬͯΔ෦෼͕͋ͬͨͷͰ
 ผͷॲཧͰஔ͖׵͑ɻ

Slide 28

Slide 28 text

ʮԠ౴଎౓ʯΛߴΊΔ • ࣮ߦ3ճ໨ɻԠ౴଎౓͸ 22.1ඵɻ
 0.2ඵͷ୹ॖɻ • ΍ͬͨ͜ͱ͸viewͰHash::extract()Λ
 ࢖Θͳ͍Α͏ʹ͢Δɻ

Slide 29

Slide 29 text

ʮԠ౴଎౓ʯΛߴΊΔ • ॲཧ࣌ؒʹ͸͋·ΓӨڹ͕ͳ͔ͬͨ΋ͷͷ
 Hash::extract()ͷίʔϧ਺͕9ઍճ͔Β
 7ճʹܹݮʂ • ৽ͨʹHashΫϥε͕ϘτϧωοΫͱͯ͠
 ੺͘දࣔ͞ΕΔΑ͏ʹ
 → ෆ༻ҙʹHashΫϥεΛଟ༻͠ͳ͍Α͏
 ɹʹॻ͖׵͑Δɻ • ৽ͨʹHash::combine()Ϋϥε͕ոͦ͠͏

Slide 30

Slide 30 text

ʮԠ౴଎౓ʯΛߴΊΔ • ࣮ߦ4ճ໨ɻԠ౴଎౓͸ 12.0ඵɻ
 10.1ඵͷ୹ॖʹ੒ޭʂ • ΍ͬͨ͜ͱ͸Hash::combine()Λ
 foreachʹஔ͖׵͑ɻ

Slide 31

Slide 31 text

ʮԠ౴଎౓ʯΛߴΊΔ • Hash::combineΛ࢖Θͳ͘ͳͬͨ݁Ռ
 ؒ઀తʹHash::extract()΋࢖ΘΕͳ͘ͳΓ
 ੺͍ද͕ࣔফ͑Δʂ • ϘτϧωοΫ͕Hash::get()͚ͩʹɻ
 Hash::get()͕ͳͥଟ͘ͳ͍ͬͯΔͷ͔
 ௐ΂Δ • Configure::readͰઃఆ஋Λऔಘ͢Δ
 ॲཧ͕Hash::get()Λ͔ͳΓίʔϧ͍ͯ͠Δ
 ͷͰConfigure::readΛফͤͳ͍͔ݕ౼

Slide 32

Slide 32 text

ʮԠ౴଎౓ʯΛߴΊΔ • ࣮ߦ5ճ໨ɻԠ౴଎౓͸ 8.7ඵɻ
 3.7ඵͷ୹ॖʹ੒ޭʂ • ΍ͬͨ͜ͱ͸ViewHelperΛܦ༝ͯ͠
 Configure::read()Λ࣮ߦ͍ͯͨ͠
 ෦෼ΛControllerଆʹ͖࣋ͬͯͯ
 ࢖͍ճ͢Α͏ʹ͢Δ

Slide 33

Slide 33 text

ʮԠ౴଎౓ʯΛߴΊΔ • Configure::read()ͷίʔϧ਺͕
 11.3ສճ͔Β8.7ສճʹ࡟ݮʂ • ΋ͬͱݮΒͤͳ͍͔ɺෆཁͳ
 ViewHelperΛୟ͍͍ͯͳ͍͔
 ௐ΂Δɻ • UtilHelperͱ͍͏ͳΜͱ΋
 ศརͦ͏ͳϔϧύʔ͕
 Configure::read()Λ͔ͳΓ࣮ߦͯ͠
 ͍ͨͷͰλʔήοτʹઃఆ

Slide 34

Slide 34 text

ʮԠ౴଎౓ʯΛߴΊΔ • ࣮ߦ6ճ໨ɻԠ౴଎౓͸ 5.9ඵɻ
 2.8ඵͷ୹ॖʹ੒ޭʂ • UtilHelper಺Ͱॏෳͯ͠ߦΘΕͯ
 ͍ͨॲཧΛControllerଆͰ·ͱΊͯ
 ࣮ߦ͠Viewଆʹ౉ͯ͋͛ͨ͠
 → View͔Βͷ Configure::read()ίʔϧ਺
 ɹ ͕ܹݮʂ

Slide 35

Slide 35 text

ʮԠ౴଎౓ʯΛߴΊΔ • Configure::read()ͷίʔϧ਺͕
 8ສ͔݅Β2ສ݅ʹܹݮɻ
 ෭࣍తʹConfigure::read()͕ίʔϧ
 ͍ͯͨ͠Hash::get()ͷίʔϧ਺΋ݮΓ
 ੺͍ද͕ࣔന͘มΘΔ
 → ϘτϧωοΫ͕Ҡͬͨ • ࣍͸MysqlपΓ͕ϘτϧωοΫʹ..!
 
 ɹɹɹɹ……ɹ͜ͷ͋ͨΓͰҰ୴ऴྃɻ

Slide 36

Slide 36 text

ʮԠ౴଎౓ʯΛߴΊΔ • ࠷ऴతʹɺ 27.6 ඵ͔͔͍ͬͯͨΞϓϦέʔγϣϯ͕
 5.9ඵ·Ͱૣ͘ͳͬͨʂʢ͔͠΋PHPͷվम͚ͩͰʂʣ • ΄ͱΜͲಛघͳࣄΛ۪ͤͣ௚ʹʮܭଌͯ͠վળˠܭଌͯ͠ɾɾɾʯΛ
 ܁Γฦ͢͜ͱͰίʔυ͸ྑ͘ͳ͍ͬͯ͘(͜ͷؒɺ1~2࣌ؒఔ౓)ɻ • ਪଌͤͣʹ࣮ࡍʹܭଌͯ͠ϘτϧωοΫΛ௵͢ͷ͕େࣄɻ
 ͜Ε͕PHP7ʹม͚͑ͨͩͰ͸ղܾ͠ͳ͍໰୊ɻఆظతʹৼΓฦΔͷॏཁɻ • ͨͩɺ͕͢͞ʹ5.9ඵͰ΋ॏ͍ͷͰͦͷޙઃܭ͔Βݟͳ͓ͯ͠
 1ඵҎԼʹվળͨ͠ɻ

Slide 37

Slide 37 text

·ͱΊ • ૣ͘PHP7ʹҠߦͯ͠଎͍PHPΛखʹೖ́ʢ • ҠߦͰো֐ʹͳΓͦ͏ͳՕॴ͸΄ͱΜͲͳ͍ɻͦΕ͙Β͍ߴ͍ ޙํޓ׵ੑ͕͋Δ • ໰୊͕͋Δͱͨ͠ΒϞδϡʔϧɺ֦ுͳͷͰͦ͜͸࠷৽৘ใʹ ΩϟονΞοϓ͓ͯ͘͠ • PHP7͚ͩͰ͸(PHPͷվળ͚ͩͰ͸)ɺຊ౰ͷʮ଎͞ʯ͸
 खʹೖΒͳ͍ͷͰʮಡΈ΍͘͢ʯʮԠ౴଎౓͕଎͍ʯίʔυΛ
 อͭΑ͏ʹ͠Α͏

Slide 38

Slide 38 text

͓͠·͍