Slide 1

Slide 1 text

ࠓͦ͜ਂງΓ͢Δɺ 1)1ͷ%PDLFSΠϝʔδ ʰ1)1$POGFSFODF+BQBOʱ !SVLJBEJB 4IP:BNBEB

Slide 2

Slide 2 text

ܰࣗ͘ݾ঺հ • ࢁాɹ঵ʢ΍·ͩɹ͠ΐ͏ʣ • Twitter : @rukiadia • PHP Conferenceʹొஃͤͯ͞΋Β͏ͷ͸ೋճ໨ • ίωώτגࣜձࣾͰόοΫΤϯυΤϯδχΞΛ͍ͯ͠·͢ɻ • ʮCakePHPʯʮTypeScript x React ʯΛॻ͘ࣄ͕ଟ͍Ͱ͢ɻ

Slide 3

Slide 3 text

ࠓ೔ͷϝΠϯςʔϚ w ެࣜͷΠϝʔδΛௐ΂ͯجຊΛ཈͑ɺΠϝʔδͷҧ͍Λ஌Δɻ w $BLF1)1ͷಈ࡞؀ڥΛ࡞ΔྲྀΕΛ௥͍ͭͭɺύοέʔδͷґଘؔ܎ Λ஌Δɻ w ϓϨʔϯͳ04ͷΠϝʔδΛ࢖͍͍ͨ৔߹͸Ͳ͏͢Δ͔Λ஌Δɻ

Slide 4

Slide 4 text

ࠓ೔ͷϝΠϯςʔϚͰ͸ͳ͍͜ͱ w %PDLFSͷجૅʹؔ͢Δ࿩ w ʮEPDLFSDPNQPTFͱ͸ʁʯΈ͍ͨͳ࿩΋͠·ͤΜɻ w %PDLFSΠϝʔδͷαΠζΛ࡟ΔͨΊͷϕετϓϥΫςΟε τʔΫςʔϚ͸͋͘·Ͱ1)1ʂʂ ʢ1)1ΧϯϑΝϨϯεͰ͔͢ΒͶʣ

Slide 5

Slide 5 text

͸͡Ίʹ ͜ͷτʔΫΛ࿩͍ͨ͠ͱࢥͬͨ Ϟνϕʔγϣϯ

Slide 6

Slide 6 text

τʔΫͷϞνϕʔγϣϯ w ࣾ಺Ͱ1)1ɺ$BLF1)1ͷόʔδϣϯΞοϓʹऔΓ૊Ή͜ͱʹͳΓɺ %PDLFSpMFΛݟͯΈͨɻ w ʮԿʹ࢖ͬͯΔͷ͔෼͔Βͳ͍ύοέʔδ͕ͨ͘͞Μ͋Δʯ w 1)1Ξοϓσʔτ΍%PDLFSΠϝʔδͷܰྔԽΛ΍Ζ͏ʹ΋ɺʢ๻ ࣗ਎͕ʣͲ͔͜Β੾Γ͜Ί͹͍͍͔Θ͔Βͳ͍ঢ়ଶͰ͋ͬͨɻ w ʮಉ͡ڥ۰ͷਓͬͯɺ݁ߏ͍ΔΜ͡Όͳ͍͔ͳɾɾʁʯˠτʔΫ ςʔϚʹͯ͠ΈΑ͏ʂ

Slide 7

Slide 7 text

͸͡Ίʹ %PDLFSpMFͷಡղྗΛ ͚ͭΔ͖͔͚ͬʹͳΕ͹޾͍Ͱ͢ɻ

Slide 8

Slide 8 text

ຊฤͷ͸͡·Γɺ͸͡·Γʙ

Slide 9

Slide 9 text

-FTTPO ʮ·ͣ͸ެࣜͷΠϝʔδΛ஌Ζ͏ʯ

Slide 10

Slide 10 text

ެࣜͷΠϝʔδΛ஌Ζ͏ օ͞Μ͸ɺ%PDLFSͷΠϝʔδΛ࡞Δ ʹ͋ͨͬͯ࠷ॳʹԿΛ͠·͔͢ɾɾʁ

Slide 11

Slide 11 text

ެࣜͷΠϝʔδΛ஌Ζ͏

Slide 12

Slide 12 text

ਖ਼௚ɺ͋·Γྑ͍ํ๏Ͱ͸ͳ͍ ͱߟ͍͑ͯ·͢ɻ

Slide 13

Slide 13 text

·ͣ͸ެࣜʢΦϑΟγϟϧʣΛݟͯΈΑ͏ w IUUQTIVCEPDLFSDPN@QIQ w ·ͣ͸৴པͰ͖Δ৘ใʹ͋ͨΔɻ w ҋӢʹΩʔϫʔυݕࡧΛ࢝ΊΔͷ͸ѱखɻ w ৘ใ͕ݹ͔ͬͨΓɺؒҧ͍ͬͯͨΓ΋͢Δ͠ɺʮ݁ہΑ͘෼͔Γ· ͤΜͰͨ͠ʯͰకΊ͘͘Δϒϩά΋͋Δɻ݁Ռతʹ࣌ؒͷແବʹͳ ΔՄೳੑ͕ߴ͍ɻ

Slide 14

Slide 14 text

ެࣜͷ%PDLFS)VCΛݟ͍ͯ͘ w ΫΠοΫελʔτʢ࠷ॳͷҰาʣͷखॱΛ஌Δɻ w Ͳ͏͍ͬͨΠϝʔδ͕͋Δͷ͔ΛνΣοΫͯ͠ɺλάͷҰཡΛோΊͯΈΔɻ w IUUQTHJUIVCDPNEPDLFSMJCSBSZEPDTCMPCNBTUFSQIQ 3&"%.&NETVQQPSUFEUBHTBOESFTQFDUJWFEPDLFSpMFMJOLT w BQBDIFɺGQNBMQJOFɺCVMMTFZFɺ03$DMJ CVTUFSFUDɹ w όʔδϣϯɺ04ɺ༻్͝ͱʹ༷ʑͳΠϝʔδ͕͋Γ·͢ɻ

Slide 15

Slide 15 text

ެࣜͷΠϝʔδΛ஌Ζ͏ ৭ʑ͋Δ͚Ͳ ͲΕΛ࢖ͬͨΒ͍͍ʁ

Slide 16

Slide 16 text

࢖༻͢ΔΠϝʔδΛܾΊΔ෼ذ఺ w ϕʔεͷΠϝʔδ͸ԿΛ࢖͍͍ͨʁ w 8FCαʔόʔΛ࢖͏͜ͱΛߟ͍͑ͯΔʁ w ʮ1)1'1.ʯΛ࢖͏͜ͱΛߟ͍͑ͯΔʁ

Slide 17

Slide 17 text

ॱ൪ʹݟͯΈ·͠ΐ͏

Slide 18

Slide 18 text

ϕʔεͷΠϝʔδ͸ԿΛ࢖͏͔ w ެࣜͰఏڙ͞Ε͍ͯΔͷ͸ɺʰ%FCJBOʱͱʰ"MQJOF-JOVYʱͷͭɻ w ແ೉ʹਐΊ͍ͨ৔߹͸%FCJBOʹ͢Δͷ͕҆ఆɻ w "MQJOF-JOVY͸΍΍บ͕͋Δɻ˞ޙड़ w ʮ"NB[PO-JOVY͕͍͍ΜͰ͢ʯʮ͹͋ͪΌΜͷҨݴͰ6CVOUV͠ ͔࢖͑ͳ͍ՈܥͳΜͰ͢ʯ w ϓϨʔϯͳΠϝʔδΛϕʔεʹ1)1ͷಈ࡞؀ڥΛ࡞Δ͜ͱʹͳΔɻ

Slide 19

Slide 19 text

8FCαʔόʔ͕ͳͯ͘΋໰୊ͳ͍৔߹ w ʰWFSTJPODMJʱͷΠϝʔδΛબ୒͢Δɻ w ྫɿDMJCVTUFSɺDMJBMQJOF w 8FCΞϓϦέʔγϣϯΛಈ͔͢ඞཁ͕ͳ͚Ε͹ɺ͜ΕͰ໰୊ͳ͍ɻ w ಛఆͷεΫϦϓτɺόονॲཧͳͲΛ࣮ߦ͍ͨ͠ɻ w "84-BNCEBͰ1)1Λಈ͔͍ͨ͠ɻ w ˞"NB[PO-JOVYΛ࢖ͬͨํָ͕͔΋͠Εͳ͍ɻ

Slide 20

Slide 20 text

8FCαʔόʔ͕ͳ͍ͱࠔΔ w ʰWFSTJPOBQBDIFʱͷΠϝʔδΛબ୒͢Δɻ w ྫɿBQBDIFCVMMTFZFɺBQBDIF w ΋ͪΖΜɺBQBDIFΛޙ͔ΒೖΕΔ͜ͱ΋ՄೳͰ͢ɻ w ʮͰ΋ɺࢲ͕࢖͍͍ͨͷ͸OHJOYͳΜͰ͕͢ɾɾʯ w ެ͕ࣜఏڙ͍ͯ͠ΔϓϦηοτ͸ͳ͍ɻʢͳΜͰ΍ɾɾʣ w OHJOYͷίϯςφΛ࡞ͬͯɺQIQΛಈ͔͍ͯ͠ΔίϯςφʹϦΫΤε τΛඈ͹͢ߏ੒ʹ͢Δͷ͕ͭͷखɻ˞ޙड़

Slide 21

Slide 21 text

1)1'1.Λ࢖͍͍ͨ৔߹ w ʰWFSTJPOGQNʱܥͷΠϝʔδΛબ୒͢Δɻ w ྫɿGQNCVMMTFZFɺBMQJOFͳͲ w ͳ͓ɺQIQGQNʹ͸ϦόʔεϓϩΩγ͕ඞཁͳͷͰɺBQBDIF΍ OHJOY͕ඞཁɻ w ʰWFSTJPOGQNʱܥͷΠϝʔδʹBQBDIFͷઃఆ͸ೖͬͯͳ͍৔ ߹͸ɺࣗલͰ༻ҙ͕ඞཁɻʢΧελϚΠζੑ͕ߴ͍ͱ΋ݴ͑Δʣ

Slide 22

Slide 22 text

ࣗ෼ʹඞཁͳ΋ͷΛચ͍ग़͠ ద੾ͳελʔτϥΠϯΛ୳ͦ͏

Slide 23

Slide 23 text

ެࣜͷΠϝʔδΛ஌Ζ͏ ༨ஊɿ"MQJOF-JOVYʹ͍ͭͯ

Slide 24

Slide 24 text

"MQJOF-JOVYʹ͍ͭͯ

Slide 25

Slide 25 text

"MQJOF-JOVYʹ͍ͭͯ w NVTMͱCVTZCPYΛϕʔεʹͨ͠-JOVYσΟετϦϏϡʔγϣϯ w #VTZCPY͸૊ΈࠐΈܥͷσΟετϦϏϡʔγϣϯͰɺ"MQJOF-JOVY ΋૊ΈࠐΈܥ޲͖ w BQLͱ͍͏ݻ༗ͷύοέʔδϚωʔδϟʔΛ࢖༻͠·͢ɻ w ೥݄ݱࡏɺόʔδϣϯ͸·Ͱདྷ͍ͯΔɻ w ΠϝʔδͷαΠζ͕ʙ.#ఔ౓ͱ͍͏ܰ͞Ͱ͋Δɻ

Slide 26

Slide 26 text

"MQJOF-JOVYʹ͍ͭͯ w ʮΠϝʔδαΠζ͕খ͍͞ʯͷ͸ྑ͍͜ͱ͕ͩɺ͚ܰͩ͞Ͱ໡໨తʹ ࢖͏ͷ͸ྑ͋͘Γ·ͤΜɻ w ଞͷσΟετϦϏϡʔγϣϯͱ͸ڍಈ͕ҧͬͨΓɺޓ׵ੑʹ͚ܽΔ໘ ͕͋ΔͷͰे෼ͳݕূ͸ඞཁɻ w ࠾༻ΛݟૹͬͨࣄྫɿIUUQTDSFBUPSTOPUFDIBUXPSLDPN FOUSZ

Slide 27

Slide 27 text

໨ઌͷ৘ใʹඈͼ͔ͭͣʹ ࣮֬ͳݕূ͕େࣄ

Slide 28

Slide 28 text

-FTTPO ʮ։ൃ؀ڥΛ࡞ΔྲྀΕΛ௥͏ʯ

Slide 29

Slide 29 text

ࠓճ૝ఆ͢Δ؀ڥ w 1)1ܥ˞ࠓճ͸%FCJBOܥͷΠϝʔδΛ࢖༻͠·͢ w $BLF1)1Yܥ w 8FMDPNFϖʔδ͕։͚Δͱ͜Ζ·ͰਐΊΔɻ w QIQGQNOHJOY w OHJOYͳͷ͸ʰ*46$0/ʱͱ͍͏ΠϕϯτͰ৮Δ͖͔͚͕ͬ૿͔͑ͨ ΒͳΜͱͳ͘Ͱ͢ɻ w ˞಺༰͸(JU)VCͷϦϙδτϦͰڞ༗͠·͢

Slide 30

Slide 30 text

΍ͬͯΈͨಈػ w ެࣜΠϝʔδʹ৭ʑࡌ͍ͬͯΔͷ͸ཧղ͕ͨ͠ɺ΍͸Γࣗ෼Ͱ࡞ͬͯ Έͳ͍ͱצ͕௫Ίͳ͍ɻࣗ෼ͷܦݧʹͳΒͳ͍ɻ w ʮ؆୯ʹ࡞ΕΔ΍ΖʂʯˠେମԿ͔͠ΒͰϋϚͬͯ਺༹͔࣌ؒͨ͠ Γ͢Δɻ w ࣗࣾͷϓϩμΫτͰ࢖͍ͬͯΔϑϨʔϜϫʔΫ΁ͷཧղΛਂΊ͍ͨɻ

Slide 31

Slide 31 text

ඞཁͳաఔΛચ͍ग़͢ w OHJOY͕ಈ࡞͢ΔίϯςφΛ࡞੒ɻ w 1)1ɺQIQGQN͕ಈ࡞͢ΔίϯςφΛ࡞੒ɻ w ίϯςφؒͷ௨৴Λߏ੒͢Δɻ w $BLF1)1ͷॳظΠϯετʔϧΛ࣮ߦ͠ɺެ։༻ͷσΟϨΫτϦΛ OHJOY͔ΒࢀরͰ͖ΔΑ͏ʹ͢Δɻ

Slide 32

Slide 32 text

ࠓճ૝ఆ͍ͯ͠Δߏ੒ਤ

Slide 33

Slide 33 text

EPDLFSDPNQPTFZNMͷ಺༰ version: ‘3’ services: nginx: image: nginx:1.21 ports: - 80:80 volumes: - ./source:/usr/share/nginx/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf php-fpm: build: ./php-fpm volumes: - ./source:/var/www/html

Slide 34

Slide 34 text

1)1༻Πϝʔδͷॳظঢ়ଶ FROM php:8.0-fpm QIQGQN͕࢖͑Δλάɻ ઌఔ৮Εͨ࿩Λݩʹɺ%FCJBOܥΛ࢖༻ɻ

Slide 35

Slide 35 text

QIQGQNOHJOYͷઃఆ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} location ~ \.php$ { root /var/www/html/; fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } OHJOY΁ͷϦΫΤετ࣌ 1)1ͷίϯςφͱ௨৴͢Δ

Slide 36

Slide 36 text

ॳճͷૄ௨֬ೝ # index.phpΛҎԼͷΑ͏ʹฤूͯ͠อଘ IUUQMPDBMIPTU Λ։͍ͨΒ1)1ͷόʔδϣϯΛ֬ೝͰ͖Δ

Slide 37

Slide 37 text

͔͜͜Β$BLF1)1Λ ೖΕ͍ͯ͘ύʔτͰ͢

Slide 38

Slide 38 text

$BLF1)1ͷཁ݅Λ֬ೝ w ϑϨʔϜϫʔΫʹ͸جຊతʹγεςϜཁ͕݅͋ΔͷͰɺΠϯετʔϧΛ ࢝ΊΔલʹཁ݅ΛݟͯΈ·͢ɻ w )551αʔόʔʢ"QBDIFɺNPE@SFXSJUF͕ਪ঑͞ΕΔʣ w 1)1 w NCTUSJOH1)1֦ுɺJOUM1)1֦ுɺTJNQMFYNM1)1֦ு w ࢖༻͢ΔσʔλϕʔεʹԠͨ͡1%0֦ுϞδϡʔϧ w ࢀߟIUUQTCPPLDBLFQIQPSHKBJOTUBMMBUJPOIUNM

Slide 39

Slide 39 text

·ͣ͸$BLF1)1ͷཁ݅Λ֬ೝ w ϑϨʔϜϫʔΫʹ͸جຊతʹγεςϜཁ͕݅͋ΔͷͰɺ$BLF1)1ͷཁ ݅ΛݟͯΈ·͢ɻ w )551αʔόʔʢ"QBDIFɺNPE@SFXSJUF͕ਪ঑͞ΕΔʣ w 1)1 w NCTUSJOH1)1֦ுɺJOUM1)1֦ுɺTJNQMFYNM1)1֦ு w ࢖༻͢ΔσʔλϕʔεʹԠͨ͡1%0֦ுϞδϡʔϧ w ࢀߟIUUQTCPPLDBLFQIQPSHKBJOTUBMMBUJPOIUNM ࠓճͷτʔΫͰ஫໨͍ͨ͠ͷ͸ ͜͜ͷ෦෼ʂ

Slide 40

Slide 40 text

τʔΫςʔϚΒ͍͠࿩୊͕ ग़͖ͯ·ͨ͠Ͷ

Slide 41

Slide 41 text

$BLF1)1ʹඞཁͳ֦ுϞδϡʔϧ w $BLF1)1͸ҎԼͷ1)1֦ுϞδϡʔϧΛඞཁͱ͠·͢ɻ w NCTUSJOH1)1֦ு w ϚϧνόΠτରԠͷจࣈྻؔ਺Λఏڙ w JOUM1)1֦ு w ࠃࡍԽରԠ༻ͷػೳʢλΠϜκʔϯ΍೔෇ܗࣜͳͲʣΛఏڙ w TJNQMFYNM1)1֦ு w 9.-ΛΦϒδΣΫτͱͯ͠ѻ͏ػೳ w 1%0֦ுϞδϡʔϧ w 1%0ʢ1)1%BUB0CKFDUʣͷ֦ுϞδϡʔϧɻ1)1͔ΒσʔλϕʔεʹΞΫηε͢ΔΠϯλʔϑΣΠεΛఏڙ w ˞࢖༻͢ΔσʔλϕʔεʹԠͨ͡υϥΠό͕ඞཁ

Slide 42

Slide 42 text

ೖ͍ͬͯΔϞδϡʔϧͷ֬ೝ # php -m [PHP Modules] Core ctype curl date dom fileinfo filter ftp … # php -m | grep mbstring Mbstring QIQNͰҰཡදࣔͰ͖Δɻ ಛఆͷϞδϡʔϧ͚ͩ֬ೝ͚ͨ͠Ε͹ɺ HSFQΛซ༻͢Δͷָ͕ɻ

Slide 43

Slide 43 text

$BLF1)1ʹඞཁͳ֦ுϞδϡʔϧ w NCTUSJOH1)1֦ுˠQIQGQNʹೖͬͯΔ w JOUM1)1֦ுˠೖͬͯͳ͍ͷͰೖΕΔඞཁ͕͋Δɻ w TJNQMFYNM1)1֦ுˠQIQGQNʹೖͬͯΔ w 1%0֦ுϞδϡʔϧˠೖͬͯͳ͍ͷͰೖΕΔඞཁ͕͋Δɻ w ˞ࠓճ͸.Z42-Λ࢖͏૝ఆͰ࿩ΛਐΊ·͢ɻ

Slide 44

Slide 44 text

1)1༻Πϝʔδɾͦͷ FROM php:8.0-fpm # add extension module RUN docker-php-ext-install pdo_mysql intl # docker-php-ext-install͸ެࣜͷPHPΠϝʔδ͕ఏڙ͍ͯ͠Δʮ֦ுϞδϡʔϧૢ࡞πʔϧʯ # ެࣜΠϝʔδΛ࢖͏ϝϦοτͷ1ͭ ֦ுϞδϡʔϧΛΠϯετʔϧ

Slide 45

Slide 45 text

࣮ࡍʹ؀ڥΛ࡞ͬͯΈΑ͏ ඞཁͳϞδϡʔϧ͕͜ΕͰἧͬͨʂ

Slide 46

Slide 46 text

࣮ࡍʹ؀ڥΛ࡞ͬͯΈΑ͏ ͱࢥΘΕΔ͔΋͠Εͳ͍Ͱ͕͢ɺ ࣮͸·ͩͰ͢

Slide 47

Slide 47 text

֦ுϞδϡʔϧʹ΋ཁ͕݅͋Δ w JOUM1)1֦ுͷϏϧυཁ݅ w ͜ͷ֦ுϞδϡʔϧΛϏϧυ͢Δʹ͸{*$6ϥΠϒϥϦͷόʔ δϣϯҎ߱ΛΠϯετʔϧ͢Δඞཁ͕͋Γ·͢ɻ1)1 Ҏ߱͸ɺ*$6Ҏ͕߱ඞཁͰ͢ɻ w IUUQTXXXQIQOFUNBOVBMKBJOUMSFRVJSFNFOUTQIQ

Slide 48

Slide 48 text

1)1༻Πϝʔδɾͦͷ FROM php:8.0-fpm RUN apt update RUN apt install -y libicu-dev # add extension module RUN docker-php-ext-install pdo_mysql intl ֦ுϞδϡʔϧͷϏϧυʹ࢖༻͢Δ ύοέʔδͷ௥Ճ

Slide 49

Slide 49 text

1)1༻Πϝʔδɾ׬੒ܗ FROM php:8.0-fpm RUN apt update RUN apt install -y git zip unzip libicu-dev # add extension module RUN docker-php-ext-install pdo_mysql intl # install composer COPY --from=composer:2.0.12 /usr/bin/composer /usr/bin/composer $BLF1)1ຊମͷऔಘ͸ DPNQPTFSʹ೚ͤΔɻ ඞཁͳ΋ͷΛผ్௥Ճɻ

Slide 50

Slide 50 text

ิ଍OHJOYͷઃఆ location / { root /usr/share/nginx/html/my_app/webroot; index index.html index.htm index.php; } location ~ \.php$ { root /var/www/html/my_app/webroot; fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } $BLF1)1ͷެ։༻σΟϨΫτϦΛࢦఆ

Slide 51

Slide 51 text

࢒Γͷ࡞ۀ w OHJOYͷઃఆΛߋ৽͠ɺ$BLF1)1ͷެ։༻σΟϨΫτϦʹ޲͚Δɻ w ׬੒ܗͷ%PDLFSpMFΛݩʹίϯςφΛϏϧυɻ w ίϯςφ಺Ͱ$BLF1)1ͷΠϯετʔϧ w $PNQPTFSDSFBUFQSPKFDUŠQSFGFSEJTUDBLFQIQBQQ NZ@BQQ

Slide 52

Slide 52 text

׬੒ʂ

Slide 53

Slide 53 text

$BLF1)1ͷը໘͕ݟΕΔΑ͏ʹͳΔ·Ͱ w ϕʔεͱͳΔΠϝʔδʢQIQGQNʣΛબͿɻ w $BLF1)1ͷΠϯετʔϧཁ݅Λ֬ೝ͠ɺඞཁͳϞδϡʔϧΛΠϯε τʔϧɾ༗ޮԽ͢Δɻ w Ϗϧυ࣌ͷґଘؔ܎͕͋Ε͹ɺͦΕΛղܾʢJOUMͷ*$6ґଘʣ w ࢀߟIUUQTXXXQIQOFUNBOVBMKBFYUFOTJPOTQIQ w $PNQPTFSΛ࢖͑Δঢ়ଶʹ͠ɺ$BLF1)1ΛΠϯετʔϧɻ w OHJOYͷઃఆ

Slide 54

Slide 54 text

-FTTPO ʮެࣜΠϝʔδͷத਎ΛݟͯΈΑ͏ʯ

Slide 55

Slide 55 text

ެࣜͷΠϝʔδͷத਎ΛݟͯΈΑ͏ ެࣜͰఏڙ͞Εͯͳ͍ϕʔε Λ࢖͍͍ͨ৔߹͸Ͳ͏͢Δ͔ʁ

Slide 56

Slide 56 text

ެࣜͷΠϝʔδͷத਎ΛݟͯΈΑ͏

Slide 57

Slide 57 text

ެࣜΠϝʔδΛಡΜͰΈΔ w 6CVOUV΍"NB[PO-JOVYΛݩʹ1)1ͷಈ࡞؀ڥΛ࡞Δ͜ͱ͸໪࿦Մ ೳͰ͢ɻ w ͔͠͠ɺʮ΍ͬͯΈ·͠ΐ͏ʂʯͱݴΘΕͯ΋Կ͔Β࢝ΊΕ͹͍͍ ͷ͔ࠔΓ·͢ΑͶɾɾɻ w ެࣜͷΠϝʔδΛίʔυϦʔσΟϯάͯ͠ɺԿΛ΍͍ͬͯΔͷ͔Λ ཧղΛਐΊΔͷ͕࣮͸ۙಓʹͳΓ·͢ɻ

Slide 58

Slide 58 text

ެࣜΠϝʔδΛಡΜͰΈΔ w ୊ࡐɿCVMMTFZF w IUUQTHJUIVCDPNEPDLFSMJCSBSZQIQCMPC EECDFCDEG⒎FECCGBCGF CVMMTFZFDMJ%PDLFSpMF w ΍͍ͬͯΔ಺༰ͷେ·͔ͳྲྀΕΛ௫ΜͰ΋Β͏ͷ͕໨తͳͷͰɺཁ ॴཁॴΛൈਮͯ͠࿩͠·͢ɻ

Slide 59

Slide 59 text

࣮ࡍʹಡΜͰΈͨ

Slide 60

Slide 60 text

FROM debian:bullseye-slim # prevent Debian’s PHP packages from being installed RUN set -eux; \ { \ echo ‘Package: php*’; \ echo ‘Pin: release *’; \ echo ‘Pin-Priority: -1’; \ } > /etc/apt/preferences.d/no-debian-php # dependencies required for running “phpize” # (see persistent deps below) ENV PHPIZE_DEPS \ autoconf \ dpkg-dev \ file \ g++ \ gcc \ libc-dev \ make \ pkg-config \ re2c ࠷௿ݶͷ΋ͷ͔͠ೖͬͯͳ͍ ܰྔ൛ΠϝʔδΛϕʔεʹ࢖͏ ʮphp-*ʯͰ࢝·ΔύοέʔδΛ aptͰΠϯετʔϧ͠ͳ͍ઃఆ PHP֦ுϞδϡʔϧͷϏϧυʹ࢖༻ ͢Δphpize͕ґଘ͢ΔύοέʔδΛ వΊͯࢦఆ͍ͯ͠Δ

Slide 61

Slide 61 text

# persistent / runtime deps RUN set -eux; \ apt-get update; \ apt-get install -y --no-install-recommends \ $PHPIZE_DEPS \ ca-certificates \ curl \ xz-utils \ ; \ rm -rf /var/lib/apt/lists/* ENV PHP_INI_DIR /usr/local/etc/php RUN set -eux; \ mkdir -p “$PHP_INI_DIR/conf.d”; \ [ ! -d /var/www/html ]; \ mkdir -p /var/www/html; \ chown www-data:www-data /var/www/html; \ chmod 777 /var/www/html લड़Ͱࢦఆͨ͠phpize༻ͷύοέʔδͱ PHPຊମͷΠϯετʔϧʹ࢖༻͢Δύοέʔδ /var/www/htmlσΟϨΫτϦͷॴ༗ऀ Λwww-dataʹઃఆ͠ɺapacheΛ࣮ߦ Մೳʹ͢Δɻ ※-apacheܥͷΠϝʔδ͸͜ ͷޙʹapacheΛΠϯετʔϧ͢Δɻ iniϑΝΠϧͷஔ͖৔ॴΛ༻ҙ

Slide 62

Slide 62 text

1)1ຊମΛΠϯετʔϧ͢Δઃఆ͕ ͠͹Β͘ଓ͘ͷͰதུɾɾ 1)1ຊମͷϏϧυઃఆΛͨ͠Γɺ ιʔείʔυΛXHFUͰऔಘͨ͠Γͯ͠·͢ɻ

Slide 63

Slide 63 text

COPY docker-php-source /usr/local/bin/ RUN set -eux; \ \ savedAptMark=“$(apt-mark showmanual)“; \ apt-get update; \ apt-get install -y --no-install-recommends \ ${PHP_EXTRA_BUILD_DEPS:-} \ libargon2-dev \ libcurl4-openssl-dev \ libonig-dev \ libreadline-dev \ libsodium-dev \ libsqlite3-dev \ libssl-dev \ libxml2-dev \ zlib1g-dev \ PHPͷϏϧυʹ࢖͏ύοέʔδΛΠ ϯετʔϧͭͭ͠ɺʮapt-mark showmanualʯͰΠϯετʔϧͨ͠΋ ͷΛه࿥͍ͯ͠Δɻ PHPίʔυΛల։͢Δ γΣϧεΫϦϓτΛίϐʔ ※ݩͷεΫϦϓτ͸ϦϙδτϦʹ

Slide 64

Slide 64 text

./configure \ --build="$gnuArch" \ --with-config-file-path="$PHP_INI_DIR" \ --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ \ # make sure invalid --configure-flags are fatal errors instead of just warnings --enable-option-checking=fatal \ \ # https://github.com/docker-library/php/issues/439 --with-mhash \ \ # https://github.com/docker-library/php/issues/822 --with-pic \ \ # --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236) --enable-ftp \ # --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195) --enable-mbstring \ ※ ௕͗͢ΔͷͰҰ෦ൈਮ PHPຊମʹؚ·Ε͍ͯΔʮconfigureʯͱ͍͏γΣϧεΫϦϓτΛ࣮ߦɻ Πϯετʔϧʹඞཁͳ΋ͷΛνΣοΫͭͭ͠ɺMakefileΛੜ੒

Slide 65

Slide 65 text

make -j "$(nproc)"; \ find -type f -name '*.a' -delete; \ make install; \ find /usr/local/bin /usr/local/sbin -type f -perm +0111 -exec strip --strip-all '{}' + || true; \ make clean; \ \ # https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable) cp -v php.ini-* "$PHP_INI_DIR/"; \ \ cd /; \ docker-php-source delete; \ PHP͔ΒॳظͷiniϑΝΠϧʢphp.ini.production ͳͲʣΛίϐʔͭͭ͠ɺϏϧυΛऴ͑ͯෆཁ ʹͳͬͨPHPͷιʔείʔυΛফ͢ɻ લͷ޻ఔͰੜ੒ͨ͠makefileΛ࣮ߦͱ૟আ

Slide 66

Slide 66 text

# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies apt-mark auto '.*' > /dev/null; \ [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \ find /usr/local -type f -executable -exec ldd '{}' ';' \ | awk '/=>/ { print $(NF-1) }' \ | sort -u \ | xargs -r dpkg-query --search \ | cut -d: -f1 \ | sort -u \ | xargs -r apt-mark manual \ ; \ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ rm -rf /var/lib/apt/lists/*; \ Ϗϧυʹ࢖͍ͬͯͨύοέʔδ͸͜ͷλΠϛϯάͰඞཁͳ͘ͳ ΔͷͰফ͢ɻʮapt-mark showmanualʯͰΠϯετʔϧͨ͠΋ͷΛ ه࿥͍ͯͨ͠ͷ͸ɺ͜ͷ࣌ͷͨΊɻ

Slide 67

Slide 67 text

ۦ͚଍Ͱ͕ͨ͠ɺ େ·͔ͳྲྀΕ͸Ҏ্Ͱ͢

Slide 68

Slide 68 text

ެࣜΠϝʔδͰ΍͍ͬͯΔ͜ͱ w ܰྔ൛ΠϝʔδͰ͋ΔɺEFCJBOCVMMTFZFTMJNΛϕʔεʹ͢Δɻ w 1)1ຊମͷϏϧυɺ1)1ͷ֦ுϞδϡʔϧΛϏϧυͷͨΊͷύοέʔδΛΠϯε τʔϧ͢Δɻ w 1)1ຊମΛΠϯετʔϧ͢Δɻ w %PDLFSpMFͰ͸ιʔείʔυΛXHFUͰऔಘ͍ͯ͠Δ͕ɺʮBQUHFUQIQʯ ͰೖΕͯ΋໰୊ͳ͍ɻ w ઃఆϑΝΠϧΛ1)1͔Β࣋ͬͯ͘Δɻ w ϏϧυΛҰ௨Γऴ͑ͨΒɺϏϧυ༻ͷύοέʔδΛফ͢ɻ

Slide 69

Slide 69 text

େ·͔ͳྲྀΕΛ ࣗ෼Ͱ࠶ݱ͢Ε͹0,

Slide 70

Slide 70 text

ࠓ೔࿩͔ͨͬͨ͠಺༰͸ ͜Μͳͱ͜ΖͰ͢

Slide 71

Slide 71 text

·ͱΊ

Slide 72

Slide 72 text

·ͱΊ w ҋӢʹݕࡧͤͣʹɺ·ͣ͸ެࣜͷ%PDLFSΠϝʔδΛݟΔɻ w ࣗ෼ͷ໨తʢϕʔεͷ04ɺQIQGQN΍8FCαʔόʔͷ༗ແʣΛݩʹ ༻ҙ͞ΕͨΠϝʔδ͔Βબͼ·͠ΐ͏ɻ w "MQJOFΛ࢖͍͍ͨ৔߹͸࣮֬ͳݕূΛɻ w ࣗ෼ͰΠϝʔδΛ૊Έཱ͍ͯͨ৔߹ɺ࣮ࡍʹखΛಈ͔ͯ͠׳ΕͯΈΔ ͷ͕ॏཁͳୈҰาͱͳΔɻ

Slide 73

Slide 73 text

%PDLFSpMFΛಡΉࡍͷࢀߟϦϯΫ • PHP֦ுϞδϡʔϧͷҰཡ • https://www.php.net/manual/ja/extensions.alphabetical.php • PECL֦ுϞδϡʔϧΛPHPʹ૊ΈࠐΉ • https://www.php.net/manual/ja/install.pecl.static.php • PhpizeͰPECL֦ுϞδϡʔϧΛಡΈࠐΉ • https://www.php.net/manual/ja/install.pecl.phpize.php • ୊ࡐͱͨ͠Dockerfileʢdebian-bullseyeʣ • https://github.com/docker-library/php/blob/8d98db4cebcdf5ff776e2d0b9bf4a5b482f4e657/8.0/ bullseye/cli/Dockerfile

Slide 74

Slide 74 text

·ͱΊ ʢ܁Γฦ͠ʹͳΓ·͕͢ʣ %PDLFSpMFΛཧղ͢Δ͖͔͚ͬ ʹͳΕ͹޾͍Ͱ͢ɻ

Slide 75

Slide 75 text

ൃදʹର͢ΔϑΟʔυόοΫ͸ େ׻ܴͰ͢ʂ

Slide 76

Slide 76 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ