Slide 1

Slide 1 text

̥̝̥ఇࠃͷٯऻʂ • ͜ͷτʔΫ͸ϠδOKͰ͢ • ͜ͷτʔΫ͸স͍ͬͯͩ͘͞ • υϯυϯֻ͔͖ͬͯͯཉ͍͠

Slide 2

Slide 2 text

who am i ? UZULLA PHPer Hachioji.pm ʮϝʔϧϑΥʔϜΛॻ͍ͯੜ׆ʯ

Slide 3

Slide 3 text

΢Σϒք۾Ͱ͸௒ ༗໊ͳʮPHPʯ ͕ɺͲΜͳ΋ͷ͔ օ͞Μ஌ͬͯ·͢ ͔ʁ

Slide 4

Slide 4 text

͕࣌ؒͳ͍ͷͰ! • ڈ೥࿩ͨ͠ʮ൒୺ͳPHPDisʯͰάάͬͯͩ͘ ͍͞ • ࡢ೥౓YAPC::AsiaͰҰ൪΢έͨ(?)τʔΫͰ͢ • ࠷ۙͷPHPͷۃॳาతͳ͜ͱ͸ղΔ͸ͣʢʁʣ • https://www.youtube.com/watch? v=2tZxNtn0kDc • http://www.slideshare.net/junichiishida/ yapc-2014-phpuzullatalk

Slide 5

Slide 5 text

ࡾߦͰ • PHP͸JavaͱPerlͱHTML/JSΛ·ͥͨΑ͏ͳ • ςϯϓϨʔτΤϯδϯͰ͢ • ʮΏΔ;Θ͆͆͆͆͆ʯ

Slide 6

Slide 6 text

ʮΏΔ;Θݴޠ͆͆͆ʯ • ࠷ۙͷPHP͸ਅ໘໨ʹ͔ͭ͏ͱΏΔ;ΘͰ΋ͳ ͍ • ·͋Ͱ΋ΏΔ;Θʹ΋ॻ͚Δ • ੍ࣗ৺Λ΋ͬͯऔΓ૊Ήͷ͕ਖ਼͍͠PHPerͷ SUTAIRU

Slide 7

Slide 7 text

PHPఇࠃͷٯऻ • ʮٯऻͷͨΊʹணʑͱྗΛ͔ͨΊͭͭ͋Δ͕ɺ ຊฤʹ͸ೖΕͳ͔ͬͨΑ…ʯ • ʮ΋ͬͱ͕Μ͹Ζ…ʯ

Slide 8

Slide 8 text

ʮPHPఇࠃ͸ਓࡐΛืूதͰ ͢ʯ • Έͳ͞Μʹ΋PHPΛॻ͍ͯ΋Β͍͍ͨ • ͦΕ͕ࢲͷ๬ΈͰ͢

Slide 9

Slide 9 text

͓඼ॻ͖ • དྷͨΔ΂͖PHP7ʹ͍ͭͯ • PHPͷΤϥʔʹ͍ͭͯ • ࠷ۙͷhttpdʹ͍ͭͯ • PSR-7ʹ͍ͭͯ • ʮ͋ͷਓ͸ࠓʯ

Slide 10

Slide 10 text

ʮۙະདྷPHPηϒϯʂʯ • ʮVarsion 7.0.0ʯ • ݱࡏbeta3ɺࠓ೥ͷౙstable༧ఆ • PHP6͸ແ͔ͬͨࣄʹʢ৭ʑ͋ͬͨʣ • ळʹ͸5.4͸EOL!ɺ5.5΋طʹSecurity fixes only http://php.net/supported-versions.php

Slide 11

Slide 11 text

·ͣ͸

Slide 12

Slide 12 text

!!!!!! RC1 Release YEAH!!!! !!!!!!

Slide 13

Slide 13 text

ࡾߦͰղΔPHP7 • ഒ͘Β͍଎͘ͳͬͨ! • ࢖͍ํ΍ߏஙํ๏͸มΘ͍ͬͯͳ͍" • จ๏͕ਐԽɺPHPίʔυޓ׵ੑ΋ଟগյΕͨ# • ଎͞ͱҾ͖ସ͑ʹC֦ு܈͕க໋ইΛෛͬͨ$

Slide 14

Slide 14 text

଎͘ͳͬͨ݅ • ഒ͘Β͍଎͘ͳͬͨ • PHP7 >>>> PHP5.6 > PHP5.5,5.4 >> PHP5.3 • (HHVM΋)

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

ग़య https://kinsta.com/blog/hhvm-vs-php-7/ http://blog.litespeedtech.com/2015/07/24/ php-7-vs-hhvm-benchmark-series-2-wordpress/ http://blog.litespeedtech.com/2015/07/16/ php7-vs-hhvm-benchmark-series-1-hello-world/ https://www.zend.com/en/resources/ php7_infographic http://hhvm.com/blog/9293/lockdown-results- and-hhvm-performance https://ckon.wordpress.com/2015/08/09/

Slide 22

Slide 22 text

Կނ଎͘ͳ͔ͬͨʁ • ʮ͔ͤͬͭΕͨPHPਞӦ͕ຊؾͩͨ͠ʯ • ओʹม਺౳ͷϝϞϦ্ͷߏ଄͕มߋ • ʮ΄Μ΋ͷͷ͸͍Εͭʂʯ౳ • zvalͰάά͍ͬͯͩ͘͞ • (ͦ΋ͦ΋Զ͕ͦΜͳʹৄ͘͠ͳ͍) • ୅ঈͱͯ͠ɺC֦ு͕Ұ୺શ໓ͨ͠ʢޙड़ʣ

Slide 23

Slide 23 text

ࠓޙ΋଎͘ͳΓͦ͏ • HHVMͷ༷ͳJITԽΛݟਾ͍͑ͯΔΒ͍͠ • ASTΛ࡞ΔΑ͏ʹͳͬͨ • ͞Βʹ଎౓͕৳ͼΔՄೳੑ

Slide 24

Slide 24 text

͸͍ • ଎͘ͳͬͨ࿩͸Ҏ্Ͱ͢

Slide 25

Slide 25 text

PHP7Ͱ࢖͍ํ͸มΘ͔ͬͨʁ • php-fpmΈ͍ͨͳͷ͕૿͑ͨͱ͔ͦ͏͍͏ͷ͸ ແ͍ɻ • ࠓ·Ͱ௨Γͷmod_php,php-fpm,php(-cgi) • Ϗϧυํ๏΋΄΅ಉ͡ • Stable͕ͰΕ͹ɺී௨ʹaptʹ৐ΔͰ͠ΐ͏ • yum͸Կ೥ޙͩʁ(Ϩουϋοౘஊ

Slide 26

Slide 26 text

҆ఆ͍ͯ͠Δ • ͍··Ͱ௨ΓɺԿ΋ߟ͑ͳͯ͘΋མͪͮΒ͍ɻ ҆ఆ͍ͯ͠Δɻ • ʮPHP͕҆ఆʂʁʂʁʂʁʯ • ʮಔᮐύʔιϯʯͱ͍͏ࣾձ࣮ݧ • ·͋ɺॏ͘͸ͳΔ͚Ͳͳ͆

Slide 27

Slide 27 text

httpdपΓͰ͸… • ࠷ۙH2Oͱ͍͏httpd͕͋ΒΘΕ·ͨ͠Ͷʂ • ผʹPHPͱ͍ؔ͢͝܎͕͋ΔΘ͚Ͱ͸ͳ͍͚Ͳ • ͕࣌ؒ༨Ε͹࿩͠·͢ɻ

Slide 28

Slide 28 text

PHP+httpdʹ͍ͭͯ • Apache+mod_php , (Apache+fastCGI) • nginx+fastCGI • H2O+fastCGI , H2O+CGIϚωʔδϟ • nginx+Apache+mod_php

Slide 29

Slide 29 text

Apache+mod_php • mod_phpͱ͍͏మ൘ • yum΍aptͰೖΔ • ΄΅ઃఆϨε͔ɺ.htaccessͰࡁΉ • ʢσϑΥϧτͰ͸ʣଟ਺ίωΫγϣϯʹऑ͍ • ͞ΕͲమ൘

Slide 30

Slide 30 text

Apacheͷઃఆ # httpd.conf౳ LoadModule php5_module modules/libphp5.so SetHandler application/x-httpd-php # .htaccess౳ RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]

Slide 31

Slide 31 text

༨ஊɺҰߦAddHandler͸ηΩϡϦςΟతʹϠό ͍ # httpd.conf౳ AddHandler php5-script .php • Α͘ݟ͔͚Δهड़͕ͩ… • http://d.hatena.ne.jp/tmatsuu/ 20150221/1424531513 • AddHandler͸ผʹʮ֦ுࢠʯͰͳ͍ͷ Ͱɺ.php͕ϑΝΠϧ໊Ͳ͜ʹ͸͍ͬͯͯ΋PHP ͱͯ͠ղऍ͞ΕΔ᠘

Slide 32

Slide 32 text

nginx+php-fpm • ࠷ۙͷఆ൪͔ʁ • ଎౓͸࣮ࡍ଎͍ • nginx͸ͳΜͰ΋Ͱ͖Δɺຊ౰ʹԿͰ΋ɻ • ݁Ռɺઃఆ͸ෳࡶʹͳΓ͕ͪ

Slide 33

Slide 33 text

nginxͷίϯϑΟάྫ index index.php try_files $uri $uri/ $uri/index.php /index.php; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # !ͷઃఆϑΝΠϧͷதʹେྔͷઃఆ͕Ӆ͞Ε͍ͯΔ…ʂ include fastcgi_params; } • ղΓͮΒ͍ʂʂʂʂʂ • ͜Ε͚ͩͰ͸μϝͳࣄ΋͋Δ

Slide 34

Slide 34 text

nginx͸㙽ʹ֯΍΍͘͜͠ͳΓ͕ͪ • FastCgiͷ౎߹Ͱ΋͋Δͷ͚ͩΕͲ… • /formͳͲɺPHPϑΝΠϧ໊͕ͳ͍URLΛ࢖͏ ৔߹… • try_filesΛͪΌΜͱཧղ͠ͳ͍ͱμϝ • locationΛͪΌΜͱཧղ͠ͳ͍ͱμϝ • fastcgiͷύϥϝλΛͪͪ͘͘௥Ճͨ͠Γ • PATH_INFOΛͲ͏ੜ੒͢Δ͔Ͱ೰Ή

Slide 35

Slide 35 text

H2O+fastCGI , H2O+fcgi.spawn • ظ଴ͷ৽ਓ • http/2 • ઃఆϑΝΠϧ͕γϯϓϧʂ • ͦͷ··Ͱ΋ߴ଎ʢΒ͍͠ʣ • ·ͩ஌ݟ͸গͳ͍

Slide 36

Slide 36 text

h2o+php-fpm file.custom-handler: extension: .php fastcgi.connect: host: 127.0.0.1 port: 9000 type: tcp hosts: "doraperson2015.yapcasia.org:443": paths: /: file.dir: /var/www/dora-person-election/app/htdocs redirect: url: /index.php/ internal: YES status: 307

Slide 37

Slide 37 text

h2o+php- cgi(fastcgi.spawn) file.custom-handler: extension: .php fastcgi.spawn: "PHP_FCGI_CHILDREN=10 exec /path/to/php-cgi" • phpϓϩηεͷੈ࿩Λh2oʹ·͔ͤΒΕΔʂ • php-fpmෆཁɺ؂ࢹ఺͕ݮΔ! • ଎౓΋ɺͺͬͱݟphp-fpmͱḮ৭ͳͦ͞͏ • php-fpm.confͳͲΛॻ͔ͳͯ͘΋ྑ͍"

Slide 38

Slide 38 text

h2oॴݟ ྑ͍఺ • ೔ຊਓͷkazuho͞Μ͕ͭͬͯ͘Δʂʂ • ࣭໰͢Δͱɺ͓͑ͯ͘͠Εͯ΍͞͠ ͍ʂʂʂʂ • ଞʹ͘Β΂ɺ࠷௿ݶͷઃఆϑΝΠϧ͸γϯϓϧ Ͱ͋Δ • ϑΝΠϧ֦ுࢠʹͻ΋͍ͮͯΔͷͰɺ҆શ • fastcgi.spawnศརʂʂʂ

Slide 39

Slide 39 text

h2oॴݟ ଟ෼͜Ε͔Βͷ఺ • .htaccess͸ແ͍ͷͰɺڽͬͨઃఆͩͱ΍ͬͺ Γ௕͍ • try_filesతͳ֓೦͸Θ͔Βͳ͍ͱ… • ͽͪͺʔʹ͸Ϗϧυ͕໘౗ • yumͱ͔aptͱ͔΄͍͠ΑͶ͆ • ઃఆͷൿ఻ͷͨΕ͸·ͩগͳΊɺಛʹӡ༻ • ߏ੒͕গʑಠಛɺinit.dͳͲͲ͏͢Δʁ

Slide 40

Slide 40 text

ͲΕ͕ྑ͍͔ • ʮଟগ஗ͯ͘΋άάΕ͹ղܾ͢ΔApacheʯ • ʮnginxͷίϯϑΟάɺෳࡶ͗͢ͳ͍ʁʯ • ʮH2Oʢ·ͩʣάάͬͯ΋ղܾ͠ͳ͘ͳ͍ʁʯ • దࡐదॴ

Slide 41

Slide 41 text

༨ஊɺPHP͸ΰϛΛ٧ΊࠐΉจԽʁ͕͋Δ • ઃఆ͢ΔػೳຖͰͳ͘ɺΞϓϦຖͰԡ͠ࠐΊΔ ͱPHPͬΆ͍ • .htaccess͸httpdͷઃఆ͔ΒURLϚοϓΛͻ͖ ͸͕ͯͯ͠ɺָ • PHPͷαΠτ͸ࠞࡌʹͳΓ͕ͪɺΠέͯΔํ๏ ͕ͳ͍΋ͷ͔ͱͳ΍·͍͠ɻ • ࠶ىಈ͕ඞཁͰ΋͍͍͔Βɺ.htaccessΈͨ ͍ͳͷ͕΄͍͠…

Slide 42

Slide 42 text

bench • έʔεόΠέʔε͗͢Δ… • Apacheͷνϡʔϯ͸໘౗ • nginx͸യવͱ଎͘ͳΔ͕ɺྑ͍ઃఆͰ೰Ή • ʮH2O͸ύϥϝλ͕σϑΥϧτͰΠέͯΔʂʯ ͱ࡞ऀ͕ओுͯͯ͠੹೚ΛసՇͰ͖Δ(?)

Slide 43

Slide 43 text

͞Βʹ༨ஊ • PHP͸PaaS΋;͖͑ͯͯ·͢ • Heroku • Azure app service • Google App Engine • ͍ͣΕ΋ਖ਼ࣜʹʢͱ͸͍͑ɺ·ͩPHP5.5ɺ. 6͘Β͍ʣ

Slide 44

Slide 44 text

͸͍

Slide 45

Slide 45 text

PHP7ͷඇޓ׵ੑͷ࿩ • ʮϚΠφʔͰ΋ޓ׵ੑ͕յΕΔࣄʹʢҰ෦Ͱʣ ఆධͷ͋ΔPHPʯ • ϝδϟʔόʔδϣϯΞοϓͳͷͰ໪࿦յΕͨ!

Slide 46

Slide 46 text

લ޲͖ͳํͷඇޓ׵ੑʢޙड़͠·͢ʣ • େ෺ඇਪ঑ؔ਺͕࣮ࡍʹ࡟আ • ϚχΞοΫͳՕॴͷڍಈͷมԽ • ࡉ͔͍จ๏ͷඇޓ׵ੑ • ༧໿ޠ

Slide 47

Slide 47 text

݁ߏ࢒೦ͳํͷඇޓ׵ੑ • C֦ு(ॴҦpeclͱ͔)ͷඇޓ׵ੑ • gdͱ͔͸͋Δ • memcacheʮdʯ͸͋Δ͚Ͳɺmemcache͸ ͳ͍ • redisͱ͔ɺQueueܥͱ͔͕ʢ·ͩʣͳ͍ • PPͷ΋ͷ͸໪࿦(େମ)ಈ͘ • Release·Ͱʹ͸΋ͬͱ૿͑Δ͸ͣ

Slide 48

Slide 48 text

ʮ͜ͷઌੜ͖࢒Δʹ͸ʯ • ʮC͕Θ͔Βͳ͍PHPer͸଴͔ͭ͠ͳ͍Α Ͷ…ʯ ʮ͑ͬPHPerͬͯCΘ͔Βͳ͍ͷʁʯ • ϝδϟʔॴ͸ϘνϘνରԠ͞Ε͍ͯΔ • C֦ுΨϦΨϦॻ͍͖ͯͨํʑ͸ɺ΋͔ͯ͠͠ ݟ੾ΓͷλΠϛϯά͔΋͠Εͳ͍͆

Slide 49

Slide 49 text

ʢҰ෦ͷXSΛॻ͘CPANԦαʔͷօ͞Μʣ • ʮͲ͔ͬͰฉ͍ͨ͜ͱ͋Δ࿩ͩͳʯ • ʮ಺෦APIมΘΔͷɺ͔ͨ͠ͳ͍͚Ͳ΋͎ŵŧƄແ ཧ…ʯ

Slide 50

Slide 50 text

͸͍

Slide 51

Slide 51 text

ݴޠͱͯ͠ͷվળ • ඇਪ঑ͷ੾Γࣺͯ • Type HintingվΊ Type declarationsʢܕએݴʣͷڧԽ • ΤϥʔͷऔΓѻ͍ͷڧԽ • จ๏ͷ௥Ճ

Slide 52

Slide 52 text

ඇਪ঑ͷ੾Γࣺͯ • ‼mysql΍ereg౳ͷϏοάωʔϜ͕͍ͭʹഇࢭ • ❗ศར(ҋ)ػೳɺpreg_replaceͷ e(eval)ഇࢭ • ❔ݹ୅ͷ=&ɺ<%ʙ%>ɺʙͷഇࢭ • ͍ͣΕ΋௕͍͜ͱܯࠂࡁΈ • 10೥5.3Λ࢖͍ͬͯͯʮϏοά΢Σʔϒʹ৐Ζ ͏ͥʂʯͱ͍͏ॴ͕ࢮ͵

Slide 53

Slide 53 text

Type declarations(ܕએݴ) • ݩType Hinting • Ҿ਺΍ฦ஋ͷʮܕʯΛࢦఆ • ʢPHPͷʮܕʯͰ͢ʣ • ʮJava͍ʯ • ҧ൓Ͱྫ֎ʢPHP<7͸Τϥʔʣ • 7͔ΒεΧϥ஋ΛࢦఆՄೳʹ㊗ • 7͔Βฦ஋΋ࢦఆՄೳʹ"

Slide 54

Slide 54 text

଴๬ͷεΧϥ஋͕ࢦఆՄೳʹʂ TypeError Exception !" func('1'); // => OK #$ • ʮ͔͠͠'1'͸௨Δʯ • ʢօ͞ΜʣʮOK͡ΌͶ͑Α͆͜Ε͔ͩΒ PHPer͸͆͆͆ʯ

Slide 55

Slide 55 text

…ͱ͓΋͔ͬͨʁ

Slide 56

Slide 56 text

strict_types TypeError " func(1.0); // => TypeError "" func(true); // => TypeError """ • ઌ಄ͷdeclare(strict_types=1);Ͱݫ֨ʹ • float=>int❌ͳͷɺڻ͖ͷϚοτ΢ͳڍಈ͆

Slide 57

Slide 57 text

ͨͩ͠ • int->floatΩϟετ͸ʮOKʯ • ʢ஋͕ܽམ͠ͳ͍͔ΒͩΖ͏ʣ • Type declarationsʹΑͬͯɺ༧ظͤ͵ܕΩϟε τ͕ൃੜ͢Δ͜ͱ͕…

Slide 58

Slide 58 text

ࣗಈΩϟετͰ͜Ε͕ΤϥʔʹͳΔ float͸Ωϟετ͞ΕΔ! • ·͋ɺPHPΒ͍͠Ͱ͢Ͷ"

Slide 59

Slide 59 text

͜Ε΋خ͍͠ɺฦ஋΋ࢦఆՄೳ

Slide 60

Slide 60 text

࢒೦ʁ஫ҙʁϙΠϯτ

Slide 61

Slide 61 text

ʮͱ͜ΖͰɺTypeʹ͸Կ͕ࢦఆͰ͖Δͷʁʯ • array • callable,Closure(ແ໊ؔ਺) • Ϋϥε/ΠϯλʔϑΣΠε • int,float,string,bool ㊗௥Ճ

Slide 62

Slide 62 text

͜͏͍͏ͷ͸ࢦఆͰ͖ͳ͍ • ❌ : (function(int): int) • (HackͳΒͰ͖Δ) • ❌ : \DateTime[] • PHPDocͰ͓ͳ͡Έɺཉ͍͠… • ❌ : mixed • ·͊ɺॻ͔ͳ͚Ε͹౳Ձ

Slide 63

Slide 63 text

࢖ͬͨ࣌ɺ଎౓͸Ͳ͏ͳͷʁ • ༗Γ 0.4381 sec • ແ͠ 0.3516 sec • ࠩ 0.0865 sec(86.5ms) / Ұઍສճ • MBP i7+PHP7β2Ͱɺ10,000,000(Ұઍສ)ճ͠ ͯ͜ͷఔ౓ • (PHPͷ༻్Ͱ͸)࣮༻্ޡࠩͳͷͰؾܰʹ࢖͍ ͍ͨɻ

Slide 64

Slide 64 text

ࢼͨ͠ίʔυ

Slide 65

Slide 65 text

͸͍

Slide 66

Slide 66 text

க໋తΤϥʔͷϋϯυϦϯά͕Մೳʹ ͳͬͨ • PHPʹ͸ྫ֎ͱΤϥʔɺೋ͕ͭଘࡏ • Τϥʔʹ͸க໋త(Fatal)ͱඇக໋త͕͋Δ • க໋తΤϥʔ͸؆୯ʹ͸ϋϯυϧͰ͖ͳ͔ͬͨ • PHP7͔Β͸(Ұ෦Λআ͖)Fatal ErrorΛྫ֎Ͱϋ ϯυϧՄೳ! • https://wiki.php.net/rfc/ engine_exceptions_for_php7

Slide 67

Slide 67 text

PHPͷʮExceptionʯ • ΈΜͳ͕஌ͬͯΔྫ֎ͦͷ΋ͷ • catchͯ͠ճ෮Ͱ͖Δ • Θ͔Γ΍͍͢ʂʂ

Slide 68

Slide 68 text

PHPͷʮΤϥʔʯ • ਅ໘໨ʹ࿩͢ͱ30෼Ҏ্͠Ό΂ΕΔͷͰ3ߦͰ • શମͰҰݸ͔͠ϋϯυϥΛొ࿥Ͱ͖ͳ͍ྫ֎Έ ͍ͨͳ΋ͷ • க໋తͳΤϥʔ͸ɺεΫϦϓτΛͦ͜Ͱऴྃ͞ ͤΔ(ճ෮ෆՄೳ) • ྫɿύʔεΤϥʔɺॏෳએݴΤϥʔɺඇଘࡏؔ ਺ίʔϧΤϥʔ • ʢৄ͖͖͍ͨ͘͠Ͱ͔͢ʁʣ

Slide 69

Slide 69 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 1 • Τϥʔ͸ΤϥʔϋϯυϥʹɺίʔϧόοΫؔ਺ Λొ࿥͢Δ(set_error_handler())͜ͱͰΩϟ ονͰ͖Δ • ϦΫΤετ಺ͰɺάϩʔόϧͳઃఆͰ͋Δ • ྫ֎ͷΑ͏ʹɺ֊૚ԽͰ͖ͳ͍ • ͭ·Γہॴతͳࠩ͠ସ͑͸Մೳ͕ͩɺඇৗ ʹෆศ

Slide 70

Slide 70 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 2 • ϋϯυϥΛͰΤϥʔΛΩϟον͢Δͱ… • Warnings΍Notice͸ग़ྗ͞Εͳ͍ • ѲΓͭͿͤΔ • E_RECOVERABLE_ERROR͸εΫϦϓτΛऴྃ ͠ͳ͍ʢ஫ҙ͕ඞཁʣ

Slide 71

Slide 71 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 3 • set_error_handler()Ͱྫ֎ʹม׵͢Δࣄ͕ Ͱ͖Δ set_error_handler(function($errno, $errstr, $errfile, $errline){ throw new ErrorException($errstr, $errno, 0, $errfile, $errline); });

Slide 72

Slide 72 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 4 • ͨͩ͠ɺக໋తͳΤϥʔ͸ଈࢮͰϋϯυϧͰ͖ ͳ͍(PHP<7) • register_shutdown_functionΛ͔ͭͬͨ τϦοΫ͕ඞཁʢ෮ؼ΋Ͱ͖ͳ͍ʣ register_shutdown_function( function(){ $e = error_get_last(); if( $e['type'] == E_ERROR || $e['type'] == E_PARSE || $e['type'] == E_CORE_ERROR || $e['type'] == E_COMPILE_ERROR || $e['type'] == E_USER_ERROR ){ // ͓޷͖ͳॲཧΛॻ͘ echo "க໋తͳΤϥʔ͕ൃੜ͠·ͨ͠ɻ\n"; echo "Error type:\t {$e['type']}\n"; echo "Error message:\t {$e['message']}\n"; echo "Error file:\t {$e['file']}\n"; echo "Error line:\t {$e['line']}\n"; } } );

Slide 73

Slide 73 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 5 • ൃੜͨ͠Τϥʔࣗମͷग़ྗઌ͸มߋՄೳ • ϒϥ΢βʔ(display_errorsͰOn/Off) • ϩάग़ྗ(stderr,syslog,ϑΝΠϧ౳) • ͜ͷೋͭ͸ฒྻతͳ෺

Slide 74

Slide 74 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 6 • Τϥʔʹ͸୔ࢁछྨ͕͋Δ • ඇக໋తͳ΋ͷ • E_NOTICEɺE_WARNINGɺ E_DEPRECATEDɺ౳… • க໋తͳ΋ͷ • E_PARSEɺE_ERRORɺ౳… • Ͳͬͪͱ΋͍͑ͳ͍΋ͷ

Slide 75

Slide 75 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 7 • E_RECOVERABLE_ERROR౳(ޙड़)͸ʮΩϟον͢ Ε͹ʯͦͷޙ΋࣮ߦͰ͖Δ • ྫ͑͹ɺType declarationsͷҧ൓Ͱग़Δ • ͜ΕΛΩϟονͯ͠Ͳ͏ʹ͔ͯ͠Δίʔυ ݟͨࣄແ͍…

Slide 76

Slide 76 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 8 • Τϥʔ͸ઃఆʢϏοτϚεΫʣͰൃੜछྨΛࢦ ఆՄೳ • error_reporting(0)࠷ڧɺԿ΋ग़ͳ͍ • ʮக໋తΤϥʔͰ͢Βʂʯ • ʮࣗ෼ʯͷύʔεΤϥʔʢE_PARSEʣ͸ ϜϦ • includeͷύʔεΤϥʔ΋௨աͰ͖Δ ʢʂʣ

Slide 77

Slide 77 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 9 • ѱ໊ߴ͍@͸ɺ؆୯ʹΤϥʔΛ཈੍Ͱ͖Δɺͦ ͏ɺFatalͰ΋Ͷʂ • ଎౓͸஗͍Ͱ͢ɻ • includeͨ͠ϑΝΠϧͷύʔεΤϥʔ ʢE_PARSEʣ͸ϜϦ • error_reporting(0)ͷํ͕ͭΑ͍

Slide 78

Slide 78 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 10 • ༨ஊɿPHPʹ͸ʢࠓݱࡏʣίϯύΠϧϑΣʔζ ͸ͳ͍

Slide 79

Slide 79 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 11 • ඇக໋ͷNotice,Warning͸ऴྃ͠ͳ͍ • Τϥʔ͕ग़ྗ͞ΕΔ͚ͩ • ѱ໊ߴ͍ʮը໘ʹग़ΔΤϥʔʯ • ʢॳ৺ऀʣʮઃఆΛίϐϖͨ͠ΒΤϥʔ͕ ͚ͤ·͢ʂʯˠ(ݟ͑ͳ͘ͳ͚ͬͨͩ)

Slide 80

Slide 80 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 12 • use strict;͕ཉ͍͠… • ͨͩɺʹͨΑ͏ͳ෺͸࡞ΕΔ • http://uzulla.hateblo.jp/entry/ 2013/12/20/041619

Slide 81

Slide 81 text

PHPͷҋਂ͖Errorʹ͍ͭͯ 13 • 㙽ʹ֯ʂ • க໋తΤϥʔ͸͜Ε·Ͱ෮ؼͰ͖ͳ͔ͬͨ❗ • ྫɿଘࡏ͠ͳ͍ؔ਺ίʔϧɺએݴͷॏෳͳ Ͳ

Slide 82

Slide 82 text

௕͘ଓ͍͖ͯͨ(99%ͷਓ͸ࠔͬͯͳ͍)໰୊ • ଞͷݴޠΑΓக໋తΤϥʔͷൣғ͕ͪΐͬͱ޿ ͍ • ͋·Γeval͕ಘҙͰ͸ͳ͍ • க໋తΤϥʔ͸ϦΧόϦͰ͖ͳ͍ • σετϥΫλ΋ݺ͹Εͳ͍ • ʮന͍ը໘(ಥવࢮ)ʯΛճආ͠ɺจ຺ʹԠͨ͡ Τϥʔը໘Λ͢Δͷ͕ͪΐ͍໘౗

Slide 83

Slide 83 text

PHP7͔Β͸ɺக໋తΤϥʔ΋ྫ֎ͰϦΧόϦʔ Ͱ͖Δ • \Error ΫϥεΛ਌ͱͨ͠Ϋϥε͕ྫ֎Ͱ౤͛ ΒΕΔ • க໋తͳΤϥʔͷʮେମશ෦ʯ͕ʮྫ֎ʯʹͳ Δ • ͳͬͯͳ͍ॴ΋͋Δʢྫɿ࠷ॳͷίʔυͰ ͸ύʔεΤϥʔΩϟονෆೳ౳ʣ • ࠷ޙ·ͰΩϟον͞Εͳ͔ͬͨྫ֎͸ैདྷͷΤ

Slide 84

Slide 84 text

͜ΕʹΑͬͯ • PHP͕஍ຯʹෆಘҙͳʮΧοίΠΠ500ʯ͕ग़ ͠΍͘͢ͳΔʢ͔ͳʣ • ϝλ͍ίʔυΛॻ͍ͨͱ͖ɺଈࢮ͢ΔՄೳੑΛ ݮΒͤΔ(ؾ͕͢Δ) • ίʔϧόοΫؔ਺Λଟ༻͢Δͱ͖ͱ͔ศརʢͦ ͏ʣ • σʔϞϯͳͲΛॻ͖΍͘͢ͳΔʢ͔ͳʣ

Slide 85

Slide 85 text

Slide 86

Slide 86 text

஫ҙ఺ • NoticeɺWarning͸ྫ֎ʹʮͳΒͳ͍ʯ • ྫ֎ΛΩϟον͠ͳ͍Ͱऴྃ͢Δͱɺطଘ ίʔυΛյͪ͠Ό͏ • ͭ·Γʮେ౷ҰΤϥʔϋϯυϦϯάʯͰ͸ͳ͍ • ࠓ·Ͱ௨Γset_error_handlerͰྫ֎ʹม ׵͸Մೳɺ͕Μ͹Εʂ

Slide 87

Slide 87 text

ઌऔΓDisΓ৘ใɺΤϥʔฤ • PHPer͸ΏΔ;ΘͳͷͰ catch(\Exception $e) ͱ͔͍͏ϫΠϧυΧʔυΛ࢖͍͕ͪ • ҆қʹ\Exception ͷαϒΫϥεͰΤϥʔͷྫ ֎Λੜ΍͢ͱʮΏΔ;ΘPHPerͷ໋͕Ϡό͍ʯ • ݁Ռɺ\Exceptionͷ͞Βʹ਌Ϋϥεͱͯ͠ \Throwable͕Ͱ͖ͨɻ\Error͸\Throwable ͷࢠʹɻ

Slide 88

Slide 88 text

࣮͸ • ͱ͜ΖͰɺ࣮͸\ErrorExceptionͱ͍͏ྫ֎ ͸͢Ͱʹ͋Δ • ʮPHPͷݩ͔Β͋ΔErrorͱɺErrorͱ͍͏৽ ͍͠ྫ֎ΫϥεͱɺErrorExceptionͱ͍͏ྫ ֎Ϋϥε͕ࠞࡏʯ • ͍ͩ͆͆͆͞ • ʢ͜͜͸Beta1͋ͨΓͰRFC͔Β͍͖ͳΓ࢓༷ ͕͔ΘͬͨͷͰɺ·ͨมΘΔ͔΋ʣ

Slide 89

Slide 89 text

ʮࠓޙ༧૝͞ΕΔະདྷʯ • ʮφϧϗυʂʂࠓޙ͸catch(\Throwable $e) ͔͚ͬͯ͹͍͍ΜͩͶʂʂʯ • ʮ!ʯ • ʢerror_reporting(0)ͬͯॻ͍ͯΔਓ΋͍Δ ͔Βɺ͋ͳ͕ͪ৑ஊͰ΋ͳ͍ʢഭਅʣʣ

Slide 90

Slide 90 text

͸͍

Slide 91

Slide 91 text

จ๏ͷ௥Ճ • ??ԋࢉࢠ(isset͔Βͷ։์ʣ΍<=>ԋࢉࢠ • ແ໊Ϋϥεͷ௥Ճ

Slide 92

Slide 92 text

??ԋࢉࢠ • ΈΜͳେ޷͖isset͔Βͷ୤٫ if(isset($_GET['name'])) $name = $_GET['name']; else $name = 'anonymous'; ! $hoge = (isset($_GET['name'])) ? $_GET['name'] : 'anonymous'; ! $name = $_GET['name'] ?? 'anonymous' ; • ??͸ະఆٛม਺ʹ৮ͬͯ΋େৎ෉Ͱ͢ɺศ རʂʂʂʂ

Slide 93

Slide 93 text

<=> UFOԋࢉࢠ • Rubyͷ͋ΕͰ͢ɺιʔτ͕ศརʹʂʂ 3, "name"=>"uzulla"], ["id"=>2, "name"=>"lestrrat"], ["id"=>10, "name"=>"moznion"] ]; usort($item_list, function ($left, $right) { return $left["id"] <=> $right["id"]; });

Slide 94

Slide 94 text

ෳ਺ΧϥϜ΋ࢦఆͰ͖·͢ [$right["id"], strlen($right["name"])] ; }); • ͜Ε͸SQLͷෳ਺ORDERͬΆͯ͘ศརͬΆ͍

Slide 95

Slide 95 text

ແ໊Ϋϥε • ΠϯϥΠϯͰɺଈ࣌ʹΠϯελϯεੜ੒Ͱ͖Δ • DI౳Ͱɺͦͷ৔ͰΧδϡΞϧʹΠϯελϯεڍ ಈΛม͑ΒΕͯศར…͔ͳ • (DIͱ͔͔͍ͯ·͢ͷ͕ɺʮਖ਼͍͠DIʯʹ͍ͭ ͯ͸צห͍ͯͩ͘͠͞)

Slide 96

Slide 96 text

ྫ setLogger( new class extends \My\Logger { public function emergency( $message, array $context = [] ){ \My\AlertPush($message); parent::emergency($message, $context); } } ); • ͜Ε͸֦ுͯ͠Δ͚ͲɺѲΓͭͿ࣌͢ͱ͔ʢʣ ʹ΋࢖͑ͦ͏Ͱ͢Ͷ

Slide 97

Slide 97 text

༧໿ޠ͕௥Ճ • Ϋϥε໊/ΠϯλʔϑΣΠε໊ • ஍ຯʹΠϯύΫτ͕͋Δ • int, float, bool, string, true, false, null, resource, object, mixed, numeric • Ұ෦ͷWAFʹ͸ɺStringͱ͍͏Ϋϥε͕…

Slide 98

Slide 98 text

PHP7ͷIDEͷରԠ!

Slide 99

Slide 99 text

͸͍ • ·͋ɺΦγϟϨʹͳΓ·͢Ͷ • ແ໊Ϋϥε࢖͍·͘ΔͱίʔυδϟϯϓͰ͖ͳ ͘ͳΓͦ͏ͳͷͰ΄Ͳ΄Ͳʹ͢Δ༧ఆͰ͢ • ༧໿ޠʹΑͬͯ஍ຯʹಈ͔ͳ͍ΞϓϦ͕͋Δ…

Slide 100

Slide 100 text

੝Γ্͕Γ • ਐΉίϯϙʔωϯτԽ • PSR-7ʢ…͕͜Ε͔Β͘Δʁʣ • ʮϏοάϓϨΠϠʔʯ

Slide 101

Slide 101 text

ίϯϙʔωϯτԽ • PSR-0,4 ͱComposerͷීٴͰී௨ͷݴޠͬΆ ͘ͳΓ… • ୯ମͷORMɺϧʔλʔɺςϯϓϨʔτɺDI׆ ༻͕׆ൃʹͳΓ… • Symfony, Aura, Zend Framework • ʮΦϨΦϨWAFେ޷͖ʂʂʯͳਓʹ͸࠷ߴ

Slide 102

Slide 102 text

ʮϑϨʔϜϫʔΫ͸ࢮΜͰ͍ͳ͍ʯ • 0͔Β૊·Εͨൿ఻ͷϑϨʔϜϫʔΫ΍ɺڊେ ͳϞϊγϦοΫϑϨʔϜϫʔΫ͔Βͷ୤٫… ͱɺ͍͏ײ͡Ͱ͸ͳ͍ɻ • ݁ہͦΕΒΛ͔ͭͬͨϏοάFW͕࢖ΘΕͯΔ • ͦΕΒͷதͰίϯϙʔωϯτΛ͔͍ͭͬͯͯ ΋ɺ݁ہδϟΠΞϯτϦʔϓ͸ൃੜ͢Δ

Slide 103

Slide 103 text

ͦΜͳࡢࠓɺྲྀߦΓͦ͏ͳPSR-7 • HTTPϝοηʔδΫϥεɺrequest/response • perlͰ͍͏ HTTP::Request΍ɺJavaͰ͍͏ ServletΈ͍ͨͳͷ͕ཉ͍͠ɺͱ͍͏ྲྀΕʢࠓ ·Ͱ͸FW͕Ί͍Ί͍ʹ΍ͬͯͨʣ • PHPࣗମͷػೳͰ͸ͳ͍͠ɺinterfaceͰ͔͠ͳ ͍

Slide 104

Slide 104 text

ʮPSRͬͯʁʯ • ༗ࢤʹΑΔɺ۩ମతͳઃܭ࢓༷ͷఏҊ • ΦʔτϩʔυͷϑΝΠϧܗࣜɺϩΨʔAPI౳ • ͋͘·Ͱ༗ࢤͷఏҊͰɺʮ๏ʯͰ͸ͳ͍ • ੈل຤ౖΓͷPHPσεϩʔυʹடং͕(ը૾ུ) • ڈ೥ͷࢲͷൃදΛݟ͍ͯͩ͘͞

Slide 105

Slide 105 text

PSR-7ͷϝϦοτ • PHPಠಛͳɺάϩʔόϧม਺͞ΘΓ·͘Γੈք ʢ$_GET, $_POSTͳͲʣ͔Βͷ୤٫(ʁ) • ஍ຯʹ໘౗ͳ$_FILESͱ͔ΛOOPతʹ৮ΕΔ • ͪΌΜͱ࣮ͨ͠૷ͳΒɺʮob_*ʯΛۦ࢖͢Δ ඞཁ͸ݮΔ(ޙड़)

Slide 106

Slide 106 text

• ൚༻Mock͕࡞Γ΍͘͢ͳΓςελϒϧɺαϒ ϦΫΤετͱ͔͠΍͍͢ʢ͔΋ʣ • Plack::Middleware Έ͍ͨͳ΋ͷ͕ͭ͘ΕΔΑ ͏ʹͳΔ͸ͣ • ϦΫΤετͷϩΪϯά΋͠΍͘͢ͳΔ͸ͣ • reactPHPͳͲɺPHPͰॻ͔Εͨhttpd͕ॻ͖΍ ͘͢ͳΔʢؾ͕͢Δʣ

Slide 107

Slide 107 text

σϝϦοτ΍஫ҙ఺ • ੜ$_POSTɺੜechoͷํ͕଎͍ • ૉखͰ͞ΘΔʹ͸େ෼ੜͳAPIʢWAF͕Ӆṭ͢ ΔͩΖ͏͚Ͳʣ • $_SESSION͸ʮؚ·Εͳ͍ʯ! • $_POST౳͸ʮӅͤͳ͍ʯɺੜecho͢Δͱग़ͪ Ό͏ɺ؆୯ʹҳ୤Ͱ͖ΔʢٻΊΒΕΔ੍ࣗ৺ʣ

Slide 108

Slide 108 text

ڍಈ͸࣮૷࣍ୈͳͷͰ… • ࢓༷௨ΓͪΌΜͱ࣮૷͢Δͷେมͦ͏ • ʮob_*Λීஈ͔Β͔͍ͭ͜ͳ͠ɺόΧͰ͔͍ CSVΛग़ྗ͍ͯ͠Δօ͞·ʯ͸ɺΠϯελϯε ʹϨεϙϯεΛͨΊࠐΉࣄʹջٙతͰ͠ΐ͏ɻ ࣮ࡍɺμϝͳ࣮૷΋ʮՄೳͰ͢ʯɻ • ʮॻ͖ग़ͯ͠಺෦ϦμΠϨΫτ͠Α͏ʯ ʮੈͷதʹ͸apache+mod_php͔͠ͳ͍ਓ΋ ͍ΔΜͰ͢Αʂʯ

Slide 109

Slide 109 text

My fav WAFͰ͋ΔSlim3ͷPSR-7࣮૷Ͱ͸ • php://tempΛ͔͍ͭͬͯͨ • PHP૊ΈࠐΈͷετϦʔϜϥούʔ • ΦϯϝϞϦʹอ࣋͠ɺσϑΥϧτͰ͸2MB Λ௒͑ΔͱཪͰϑΝΠϧʹॻ͖ग़͢

Slide 110

Slide 110 text

༨ஊ:"Stream"ͷଟ༻ʹ͍ͭͯ • αΠζ͕༧૝ͮ͠Β͍bodyΛѻ͏ͨΊʹ Stream͕࢖ΘΕΔࣄ͕ଟ͍໛༷ • ΧδϡΞϧʹม਺Λ࢖͍͍ͨPHPerʹ͸໘౗͆ • WAFʹӅṭ͞ΕΔͷͰɺීஈ͸ҙࣝ͠ͳͯ͘ ΋ྑ͍͕ɺ଎౓͕ෆ҆ • ͪͳΈʹ$HTTP_RAW_POST_DATA͸PHP7Ͱແ͘ ͳΔɻphp://inputΛ͔ͭ͏͔͠ͳ͍ʢͦͯ͠ ͜Ε͸multipartͰ͸͔ͭ͑ͳ͍ͷͰɺྗۀͰ౷

Slide 111

Slide 111 text

PSR-7ͷ࣮૷Λ͍͔ͭ͘ݟͨײ૝ • ݱঢ়WAF͕Ί͍Ί͍ʹ࣮૷͍ͯ͠Δ • ͳ͔ͳ͔టष͍͜ͱΛ΍͍ͬͯΔɺΤοδέʔ ε͋Γͦ͏… • ಠࣗContent-typeͱ͔ߟ͑ͯͳ͍Ϡπ΋͋Δͬ Ά͍ • ͍͖ͳΓ͜ΕΛ଍৔ʹ͢Δͷ͸ෆ҆

Slide 112

Slide 112 text

ʮPSR-7͸ඞਢ͔ʁʯ • ྫྷ੩ʹ͍͑͹ɺNo • ৽͍͠ࣄ͕Ͱ͖ΔΘ͚Ͱ͸ͳ͍ • ͔͠͠ΦγϟϨ…ςετ͠΍ͦ͢͏…઀͗໦͠ ΍ͦ͢͏… • ʢࢲ͸ੈؒ஌ΒͣͳͷͰɺ͜͏͍͏෺ʹὃ͞Ε ΍͍͢ʣ

Slide 113

Slide 113 text

༨ஊ • ʮαʔϒϨοτ͡ΌΜʯʮ͸͍ʯ • ʮ͜ͷձ৔ʹ஌ݟ͋;ΕΔํ͸͍Βͬ͠Ό͍· ͤΜ͔ɺཔΉྑ͍PSR-7࣮૷Λ࡞ͬͯ͘Εʯ • ʮPHPͰॻ͔Εͨhttpdͷ࣌୅͕͘Δʂʯʢͱ ͍͏ئ๬ʣ

Slide 114

Slide 114 text

͸͍

Slide 115

Slide 115 text

ϓϨΠϠʔͷ࿩ • ʮPHPͳΜͯͩΕ΋͔ͭͬͯͳ͍Ͱ͠ΐ͆͆ ͆ʯ • ʮΠέͯΔاۀ΋PHP͔ͭͬͯΔͧʂʂʯ • ʮ·ͩFacebookཔΈʁ͆͆ʯ

Slide 116

Slide 116 text

ϝϧΧϦ༷ • YAPCεϙϯαʔͰ΋͋ΒΕΔ

Slide 117

Slide 117 text

ಔᮐύʔιϯ

Slide 118

Slide 118 text

ҧ͏

Slide 119

Slide 119 text

• chatwork…͸୤PHPͰScala΁…

Slide 120

Slide 120 text

πΠΩϟεʂ • BUT… ʮେମCͰॻ͍ͯΔʯʢࣾ௕͞Μஊʣ • ͸ͨͯ͠PHP7ʹҠߦ͢Δͷ͔…ʁ

Slide 121

Slide 121 text

͍΍͍΍ɺ͋ͦ͜΋PHPͰ͢Αʁ

Slide 122

Slide 122 text

slack!!!

Slide 123

Slide 123 text

Slack • https://twitter.com/SlackHQ/status/ 426469205005705217 • PHP͸slack΋͔ͭͬͯΔʂʂʢ/index.phpɺ ͕͋ΔͬΆ͍ʂʣ • ʮslackఔ౓ʯ·ͰͳΒPHP͸ྑ͍Θ͚Ͱ͢Αɻ • ʢ·͍͔͋ͭ͸ͷΓ͔͑ΔͩΖ͏͚Ͳʂʂʣ • ʢπΠοτ͸2014/01ࠒʣ

Slide 124

Slide 124 text

• ͍͔ͭ͸PHPΛʮଔۀʯ͢Δձࣾ΋ଟ͍Ͱ͠ΐ ͏ɺΘ͔Δɻ • Ͱ΋ɺʮάϫοͬͱ෺Λͭ͘ΔʯͷʹPHP͸޲ ͍ͯͨΓ΋͠·͢ • ʮෛ࠴ʁෛ࠴͕ͳ͍ݴޠͱ͸ʁʯ

Slide 125

Slide 125 text

ͦͯ͠ະདྷ΁… • PHPͷσεϩʔυײ͸ઌ୺Ͱ͸ݮ͖͍ͬͯͯΔ • ͔͠͠ɺϞμϯͳPHP͸Ͳ͜ʹ͍Δͷ͔ʁ • ʮࠓ͔ΒʯPHPΛ΍Δҙຯ͕͋Δͷ͔ʁͱ͍͏ ͝ҙݟ • ʮԿͰ࡞Δ͔ΑΓɺԿΛ࡞Δ͔ͩΖʂʂʯ • ʮPHP͘Β͍ͳΒͰ͖ΔͰ͠ΐʁʯͰਓूΊ ʢPHP͕Ұ൪೉͍͠ͱ͍͏Ұ෦ͷ͝ҙݟʣ

Slide 126

Slide 126 text

https://github.com/blog/2047-language-trends- on-github

Slide 127

Slide 127 text

༨ஊɿݸਓతͳ࠷͍͔ۙͭ͘ͷଉۤ͠ ͞ • ϞμϯͳWAFɺPSRͳͲͰʮϕετϓϥΫςΟ εʯ͕ߴ·Δ • ʮ͜͏͠ͳ͍ͷ͸ඍົʯͱ͍͏෩ை • ʮ΋ͬͱྑ͍ख๏ʯͷൃ໌΍ʮγϯϓϧ͞ʯΛ ԡ͑͞ࠐ·ͳ͍͔ʁ • ೰Έ͕ݮͬͨͷ͔૿͑ͨͷ͔ྑ͘ղΒͳ͍

Slide 128

Slide 128 text

࣭ٙԠ౴λΠϜ • ͳʹ͔͍͟͝·͔͢ʁ • ແ͚Ε͹…

Slide 129

Slide 129 text

͋ͷਓ͸ࠓ

Slide 130

Slide 130 text

HHVM

Slide 131

Slide 131 text

3ߦͰղΔHHVM • Facebook࡞ͷɺޓ׵ੑ͕ߴ͍PHPϥϯλΠϜ • fastCGIɺ·ͨ͸httpdαʔόͱͯ͠ಈ࡞ • Hackͱ͍͏PHPΛຐվ଄ͨ͠Ϟμϯ෩ݴޠ͕ ࢖͑Δ

Slide 132

Slide 132 text

HHVM Ͳ͏ͳͬͨʁ • ߴ଎Խͱ͍͑͹HHVMͩͬͨͷͰ͸ʁ • PHP7ʹ଎౓͕ฒ͹Εͨʢ·͋ɺPHP7͸· ͩStableग़ͯͳ͍͚Ͳʣ • Hackͱ͍͏ݴޠ͸ʁ • গͳ͘ͱ΋ɺ೔ຊͰ͸ϚδͰྲྀߦͬͯͳ͍ • ւ֎Ͱ΋FBҎ֎Ͱ͸ྲྀߦͬͯͳ͍ͷͰ ͸…ʁ

Slide 133

Slide 133 text

΢ʔϜ

Slide 134

Slide 134 text

ݱঢ় • Hackݴޠ͸ਐԽͯ͠Δ • ಺ଂhttpd͕΋Ͳ͖ͬͯͨ • όʔδϣϯ΋݁ߏॱௐʹ্͕͍ͬͯΔ • ଎౓΋3.7>3.8Ͱ5ʙ10%͕͋ͬͨΓͯ͠Δ

Slide 135

Slide 135 text

ࠓͷॴɺcommit͸ਰ͑ͨΓ͸͍ͯ͠ ͳ͍ • ίϛολ΋ύοͱݟͰݮͬͯ͸͍ͳ͍

Slide 136

Slide 136 text

HHVM,PHP7ʹΑΔ଎౓ڝ૪ʹ͍ͭ ͯ • ʢڈ೥ҐʣʮHHVM͕ઌ佃Λ੾ΓPHP5.xͷഒ ʹʂʯʢ΢ΦΦʔʂ • zend͕ຊؾΛग़ͯ͠ɺPHP7͸଎౓Ͱ௥͍͍ͭ ͨ • HHVM΋Ҿ͖཭༷͢ʹؤுͬͯΔ • ʮ݂Ͱ݂Λચ͏ϕϯν߹ઓʯ

Slide 137

Slide 137 text

ʮͲ͕ͬͪ଎͍ͷ͔ʁʯ • PHP7 stable͸·ͩग़ͯͳ͍ͷͰͳ… • άάΔͱେྔͷαϯϓϧ͕ग़ͯ͘Δ • ߴ଎Խͷख๏͕ҧ͏ͷͰέʔεόΠέʔε • ʮࣗ෼ͷίʔυʯͰࢼ͞ͳ͍ͱԿͱ΋ݴ͑ͳ͍

Slide 138

Slide 138 text

ϕϯνϚʔΫɾϓϩύΨϯμ • ͍ΖΜͳਓ͕ʮ͕ͬͪ͜଎͍ʂʯͱ͍͍ͬͯΔ • ๯಄ͷάϥϑΛ࠶ܝࡌ

Slide 139

Slide 139 text

No content

Slide 140

Slide 140 text

No content

Slide 141

Slide 141 text

No content

Slide 142

Slide 142 text

No content

Slide 143

Slide 143 text

No content

Slide 144

Slide 144 text

No content

Slide 145

Slide 145 text

No content

Slide 146

Slide 146 text

ϓϩύΨϯμࢲײ • ʮϊϯνϡʔϯʯͩͱPHP7͕ଟগ଎͍ϕϯν ͕ଟ͍ • ʮνϡʔϯʯ͢ΔͱHHVM΋଎͍ • νϡʔϯͱ͸ɺHackԽɺawaitར༻ͳͲ • ·͋ɺPHP5.6͔ΒͷࠩΛݟΕ͹େࠩ͸ͳ͍

Slide 147

Slide 147 text

ԶతʮͲͬͪΛ࢖͏΂͖͔ʁʯ in 2015 • ։ൃ΋ຊ൪΋Linux͔ʁ • ͍͍͑ → PHP • ͸͍ → • ผʹʁ → PHP • HackΛ࢖͍͍ͨ → HHVM

Slide 148

Slide 148 text

ʮຊՈPHPʯͷڧ͞ • HHVM͕PHPʹ͋Θͤͯ΋ɺPHP͕HHVMʹ߹ ΘͤΔٛཧ͸ͳ͍ • ʢ͍͍ॴ͚ͩύΫΔ࢟੎ • ֤छπʔϧɺIDEɺC֦ு΋ຊՈ͕ୈҰ • Hack͸·ͩPHPStormͷαϙʔτແ͍ʢࠓ ޙ΋ʁʁʣ • ࠓޙͷ֤σΟετϦඪ४΋ຊՈPHPͩΖ͏

Slide 149

Slide 149 text

HHVMͷʢݱঢ়ͷʣඍົ͞ • OSXͰʢࠓݱࡏʣϏϧυͰ͖ͳ͍ʢաڈ͸Ͱ ͖ͨʣ https://github.com/facebook/hhvm/issues/ 5447 ʢBrewͱ͔ʹ΋ஆ͔͘͸ͳ͍ʣ • LinuxͰ΋ɺϏϧυ͸໘౗ʢಛʹCentOSʣ • Ubuntu͸όΠφϦ഑෍༗Γ • ʮHackΛ࢖͏ʯͱɺྲّྀ͕PHPͱҧ͍͗͢Δ

Slide 150

Slide 150 text

ͭ·Γ • ʮ·͋ɺຊՈPHPΛ͔͓ͭ͏ʯ • ͔͠͠·ͩ·ͩྲྀಈత • Hack͕IDEαϙʔτ͸͡·ͬͨΒ࢖͏͔΋ʂ

Slide 151

Slide 151 text

ҰԠɺHackͷΞπ͞ • Hack language • asyncʢMysql΍memcacheʣ • Generics • Type Aliasing • ==> Ͱλ • Type check جຊඞਢ http://docs.hhvm.com/manual/en/ install.hack.bootstrapping.php

Slide 152

Slide 152 text

HackΛ஌Βͳ͍ਓ޲͚ɺ==> ʹ͍ͭ ͚ͯͩαϯϓϧ $a + $b; } $f = l(); echo $f(2); // => 3 • ΦγϟϨͩ͠ɺʢΑ͘σΟεΒΕΔʣuse͕ෆ ཁ

Slide 153

Slide 153 text

ૉ๿ͳPHPͰॻ͘ͱ͜͏͍͏ίʔυ 3

Slide 154

Slide 154 text

ͱ͜ΖͰɺPHP7Ͱ͸ʁ 3 • ※rc1Ͱuse۟ͷܕએݴ͸͏͔ͣ͝…

Slide 155

Slide 155 text

HHVMͷະདྷ͸Ͳͬͪͩ • ެࣜͳະདྷ͸͋·Γݟ͑ͳ͍ʁʢPHP͸RFCΛ ݟΔͱ͔…ʣ • ͜ͷ··Ͱ͸ϕλʔPHPͱͯ͠ͷ࠲͕ة͏͍ • ଎౓Ͱ͞ΒʹҾ͖཭͢ͷ͔ʁ • OSXͰ΋HHVM͕͔ͭ͑ΔΑ͏ʹͯ͠΄͍͠ • xhpͳͲͷ֦ுͰReactͳͲͷJSͱ஥ྑ͘ͱ͔ ͷະདྷ͸ʁ

Slide 156

Slide 156 text

͸͍

Slide 157

Slide 157 text

㙽ʹ֯ • Έͳ͞ΜPHP΋͔͍͖ͭͬͯ·͠ΐ͏ • PHP΋ਐԽΛ͚͍ͭͮͯ·͢ • ͜Θ͘ͳ͍Α! • ΍Ζ͏ʂPHPʂʂʂʂ