Slide 1

Slide 1 text

1)1'*(ͷ)551 ॲཧඪ४ͷઃܭ͸ ͳͥ143 ʹͳͬͨͷ͔

Slide 2

Slide 2 text

ͨͳ͔ͻͯ͞Δ @tanakahisateru ॴ௕

Slide 3

Slide 3 text

IUUQTTQFBLFSEFDLDPNUBOBLBIJTBUFSVXFIBWFQTS ڈ೥ͷ࠙਌ձͰ͜Μͳ͜ͱ΍ͬͯ ͔ͬ͢Γ143೔ຊΤόϯδΣϦετͰ͢ ·͡Ͱ࠷ۙதͷਓʹόϨͨ

Slide 4

Slide 4 text

͝஫ҙ w ;FOE&YQSFTTJWFͷ࢖͍ํ͸΍Γ·ͤΜ w 143ͷ)551ϝοηʔδϯάͷઃܭΛ௨ͯ͡ w ઃܭͷΤοηϯεΛֶͼऔΔ͜ͱΛ໨తͱ͠·͢

Slide 5

Slide 5 text

ΠϯλʔϑΣʔεͷఆٛͳΜܾͯΊͷ໰୊Ͱ͠ΐ

Slide 6

Slide 6 text

ΠϯλʔϑΣʔεͷఆٛͳΜܾͯΊͷ໰୊Ͱ͠ΐ Μͳͨ͜ͶʔΑ

Slide 7

Slide 7 text

໿ϲ݄ ͨͱ͑͹143ͷऩଋʹ͔͔ͬͨ࣌ؒ ʙ

Slide 8

Slide 8 text

w ϛϡʔλϒϧWTΠϛϡʔλϒϧ w ׳शΛ͍ٙຊ࣭Λݟग़͢ w ։์ด࠯ݪଇ͔Β҆ఆ౓ந৅౓౳Ձݪଇ·Ͱ w ந৅ͷσβΠϯ ઃܭ ͕ͦ͜ຊ࣭ ͜ͷ௕͍ظؒͰԿ͕ܾ·͔͔ͬͨΒʜ ʜͬͯ࿩͠Α͏ͱͯͨ͠ΜͰ͚͢Ͳ

Slide 9

Slide 9 text

Ϊϟʔ

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

໾ཱͨͣͷڠௐੑͳ͍ϑϨʔϜϫʔΫج൫ͩͱ͔ʜ

Slide 12

Slide 12 text

ߦಈنൣŗŕʜ ͸͊ ͓·͕͍͎͑ʜ

Slide 13

Slide 13 text

ʮ͚ͯ͠;FOEͷΤΰͰ͸ͳ͍ʯ ࢲ͕Ҏલ͔Βओு͔ͨͬͨ͠ͷ͸ɺ143͔Β࢝·ͬͨઃܭ͕ ͱ͍͏͜ͱͰ͢ ΋ͱ͍

Slide 14

Slide 14 text

/ZIPMN :JJBMQIB (V[[MF 4MJN ;FOE ͪΐͬͱ஫໨ͷ࠷଎࣮૷ 4MJN΋࣍͸͜Ε࢖͏͔ͱ͔ݴͬͯΔ ࣍ੈ୅:JJͷ)551·ΘΓ΋ 143Λ࣮૷͢ΔΑ͏ʹͳΔ ΄Β͜ͷτοϓ

Slide 15

Slide 15 text

࢓্͕ΓΛΑ͘ݟΖ )551ϝοηʔδϯάͦ͜ ૬ޓӡ༻ੑͷ৅௃తͳଘࡏ͡Όͳ͍͔ ʜͱɺͳ͍ͥ͑Δͷ͔

Slide 16

Slide 16 text

8): ͳͥඞཁͳͷ͔

Slide 17

Slide 17 text

͜ΕΛݟͯΈͳ͞ΜͲ͏ࢥΘΕ·͔͢ ஫-BSBWFM4XPPMF͋ΔΑͱ͍͏ͷͱ͸ҙຯ͕ҧ͍·͢

Slide 18

Slide 18 text

&NJUUFS*OUFSGBDF 4BQJ&NJUUFS 4XPPMF&NJUUFS 3FRVFTU)BOEMFS*OUFSGBDF ϑϨʔϜϫʔΫ "QBDIF'1. 4XPPMF ૄ݁߹ͳΞʔΩςΫνϟ ͜͜Ͱ&NJUUFS͕ࠩ͠ସΘͬͯ΋ ϑϨʔϜϫʔΫ͸มΘΒͳ͍ ։์ด࠯ݪଇ

Slide 19

Slide 19 text

&NJUUFS*OUFSGBDF 4BQJ&NJUUFS 4XPPMF&NJUUFS 3FRVFTU)BOEMFS*OUFSGBDF ϑϨʔϜϫʔΫ "QBDIF'1. 4XPPMF ֤ϑϨʔϜϫʔΫ͕ $BLF1)1YΛ࠶ൃ໌ ͢Δͷ͸΋͏ͨ͘͞Μͩ ผͷઐ༻ϑϨʔϜϫʔΫ

Slide 20

Slide 20 text

ݴ͍͔ͨ͊ͳ͍͚Ͳ͜ΕΑ &TQSFTTP3FBDU1)14JMFY TZNGPOZIUUQGPVOEBUJPO ͳΜͰ͜ΜͳʹՄೳੑ͋ͬͨϓϩδΣΫτ͕ࢭ·ͬͯ͠·ͬͨΜͰ͠ΐ͏͔ͱ

Slide 21

Slide 21 text

ϑϨʔϜϫʔΫͱ͸ ΤϛολͷϥούϥΠϒϥϦͰ͸ͳ͍ ໰୊ʹରͯ͠࠷దͳ ղܾͷ࿮૊Έந৅ ϋʔυίʔυ͞Εͨ

Slide 22

Slide 22 text

໰୊Ҋ݅ݻ༗ͳۀ຿্ͷ՝୊ ղܾͲͷ૚Ͱෳࡶ͞Λ෧͡Δ͔ ໰୊ͱղ๏ʹଟ༷ੑ͕͋Δ͔Βͦ͜ 1)1ͱ1)1'*(ͷҙຯ͕͋Δ ϑϨʔϜϫʔΫબ୒ࢶ͕ଟ͍1)1ͷଘࡏҙٛͪΌ͍·͔͢͜Ε

Slide 23

Slide 23 text

@(&5<>FDIP ϑϨʔϜϫʔΫ %# %* 7JFX .7$ શһ͕ಉ͡Χλνͨ͠΋ͷͰڝ૪ͯ͠΋ҙຯͳ͍ %# %* 7JFX .7$ %# %* 7JFX .7$ %# %* 7JFX .7$ ŹůžŢઠŹůžŢŕŞ

Slide 24

Slide 24 text

3FRVFTU)BOEMFS*OUFSGBDF ϑϨʔϜϫʔΫ 3%# $BDIF -PH %PNBJO.PEFM )5.- "TZOD 6*69 %FTJHO1BUUFSO .77. $234 "%0 $MFBO "SDIJUFDUVSF 5FTU $POpHVSBUJPO ࠓޙͷϑϨʔϜϫʔΫʹ ҙࣝͯ͠΄͍͠ྖҬ ͔͜͜ΒԼδΣωϦοΫͳ໰୊ͳΒ αʔυύʔςΟͰͥΜͥΜ͍͍Α %*$POUBJOFS 3PVUJOH )551.FTTBHJOH %%%%$*

Slide 25

Slide 25 text

&NJUUFS*OUFSGBDF 4BQJ&NJUUFS 4XPPMF&NJUUFS 3FRVFTU)BOEMFS*OUFSGBDF ϑϨʔϜϫʔΫ "QBDIF'1. 4XPPMF ૄ݁߹ͳΞʔΩςΫνϟ ϑϨʔϜϫʔΫ࡞Δͱ͖ ͔͜͜ΒԼ͍ͬͨΜ๨Εͯ ந৅౓্͍͛ͯ͜͏Α ͜͜͸ΈΜͳ͕ ࠶ར༻Ͱ͖ΔΑ͏ʹ ෼͚ͯߟ͑Α͏ͥ

Slide 26

Slide 26 text

)08 ඞཁੑ͸ͲͷΑ͏ʹຬͨ͞ΕΔ͔

Slide 27

Slide 27 text

143 ϝοηʔδͷσʔλϞσϧ 143 143 ϝοηʔδͷϋϯυϦϯά ϝοηʔδͷੜ੒ 3FRVFTU*OUFSGBDF3FTQPOTF*OUFSGBDF 6SJ 4USFBN 6QMPBEFE'JMF 3FRVFTU)BOEMFS*OUFSGBDF .JEEMFXBSF*OUFSGBDF 3FTQPOTF'BDUPSZ*OUFSGBDF 4USFBN'BDUPSZ*OUFSGBDF

Slide 28

Slide 28 text

XJUI)FBEFS OBNF WBMVF HFU#PEZ 4USFBN*OUFSGBDF .FTTBHF*OUFSGBDF 3FRVFTU*OUFSGBDF 3FTQPOTF*OUFSGBDF 143 4USFBN*OUFSGBDF SFBE MFOHUI TUSJOH FYUFOET

Slide 29

Slide 29 text

XJUI)FBEFS ΠϛϡʔλϏϦςΟ ࣗ਎Λมߋͤͣɺࣗ਎ͷϔομͱ௥ՃϔομΛ ࣋ͬͨ৽͍͠ΠϯελϯεΛฦ͢ 4USFBN*OUFSGBDF ஗ԆಡΈग़͠ந৅ ϝϞϦʹશ಺༰ΛཷΊࠐ·ͳͯ͘΋͍͍ 1)1ׂ౰ϝϞϦΑΓେ͖͍όΠτྻΛѻ͑Δ 143ͷϙΠϯτ

Slide 30

Slide 30 text

SFRVFTUTFU1BSBN bGPP` CBS ΋͠ϛϡʔλϒϧͩͬͨΒʜ

Slide 31

Slide 31 text

@(&5CBS ΋͠ϛϡʔλϒϧͩͬͨΒʜ ಉҰͷϦΫΤετΠϯελϯεΛ࢖͍ճ͢͜ͱ͸ 1)1ͷ࣮ߦ࣌ʹ͸εʔύʔάϩʔόϧͱಉ͡ҙຯ ͜Μͳ΋ͷͰαʔυύʔςΟؒͷ૬ޓӡ༻ੑΛҡ࣋Ͱ͖Δ͔ෆ҆

Slide 32

Slide 32 text

ετϦʔϛϯάʹ͍ͭͯ͸ͪ͜ΒΛ͝ཡ͍ͩ͘͞ IUUQQTSOFUTBTF[BLJQIQDPOGVL IUUQTXXXTMJEFTIBSFOFUTBTF[BLJQIQIUUQ ཁ͸ɺඞͣετϦʔϛϯάΛ૝ఆ͠Ζͱ͢Δ͜ͱͰɺ ڊେ*0Ͱ΋ྫ֎ͳ͘ѻ͑ΔΑ͏഑ྀ͞Ε͍ͯ·͢ (V[[MFźŕŦŖ

Slide 33

Slide 33 text

IBOEMF 4FSWFS3FRVFTU*OUFSGBDFSFRVFTU 3FTQPOTF*OUFSGBDF 3FRVFTU)BOEMFS*OUFSGBDF 143 QSPDFTT 4FSWFS3FRVFTU*OUFSGBDFSFRVFTU 3FRVFTU)BOEMFS*OUFSGBDFIBOEMFS 3FTQPOTF*OUFSGBDF .JEEMFXBSF*OUFSGBDF ϛυϧ΢ΣΞͷ࢓༷ͱࢥΘΕ ͕͚ͪͩͲɺΉ͠Ζ͍ͭ͜ͷ ൃݟͷํ͕ॏཁ

Slide 34

Slide 34 text

app.get('/', function (req, res) { res.send('Hello World!'); }); app.use(function (req, res, next) { console.log('LOGGED'); next(); }); ·ͣ͸ͪ͜ΒΛ͝ཡ͍ͩ͘͞ 143ͷॳظҊ͸͜͏͍͏/PEFKTͷΑ͏ͳܗΛ͍ͯ͠·ͨ͠ɻ 4MJNͷ࣮૷ΛҰൠԽͨ͠ײ͡Ͱ͢ɻ ೥ϦϦʔε͞Εͨܗͱ͸͍ͩͿҧ͍·͢ɻ

Slide 35

Slide 35 text

w ͳͥϦΫΤετϋϯυϥ͕ʮϦΫΤετΛड͚ͯϨεϙϯε Λฦ͢ʯͱ͍͏ૉ௚ͳܗΛ͍ͯ͠ͳ͍ͷ͔ w ڞ༗Πϯελϯεͷঢ়ଶ͕มԽͨ͠Γɺଈ࠲ʹετϦʔϜʹ ϓογϡͨ͠Γ͢Δͷ͸ɺ143લఏͰ͜Ε͸ʜ app.get('/', function (req, res) { res.send('Hello World!'); });

Slide 36

Slide 36 text

w OFYU ͕Կऀ͔ΛܕͰද͍ͤͯͳ͍ɻʮ@@JOWPLFΛ࣋ͭ ΦϒδΣΫτʯͳͲͱ͍͏ܕ͸ͳ͍ w DBMMBCMFͳ͚ͩͰ͸Ҿ਺ͷ਺΍ܕͷ੍໿͕༩͑ΒΕͳ͍ app.use(function (req, res, next) { console.log('LOGGED'); next(); });

Slide 37

Slide 37 text

w ͔ͨ͠ʹɺଟ͘ͷϑϨʔϜϫʔΫ͕&YQSFTTͷϛυϧ΢ΣΞ ʹӨڹΛड͚ͨաڈ͸͋Δɻ1)1Ͱ΋ͦͷํ͕ଟ਺೿ͩͬͨ w Ͱ΋ɺ/PEFKTͷಈ࡞ಛੑʹରͯ͠ઃܭ͞Εͨ΋ͷΛɺΦϒ δΣΫτࢦ޲ݴޠ1)1͕ࢀߟʹ͢Δͷ͸͓͔͍͠ w ʮΠϯϥΠϯؔ਺ͻͱͭͰ؆୯ʹͰ͖Δʯͷʮ؆୯ʯ͸ɺ νϡʔτϦΞϧͰ͸༗ޮͰ΋ɺݱ৔Ͱ᠘ʹԽ͚Δ೏͍͕ϓϯ ϓϯ͢Δࢥ૝ w ߟ͑௚ͤIUUQTCMPHJSDNBYFMMDPNBMM BCPVUNJEEMFXBSFIUNM

Slide 38

Slide 38 text

QSPDFTT 4FSWFS3FRVFTU*OUFSGBDFSFRVFTU 3FRVFTU)BOEMFS*OUFSGBDFIBOEMFS 3FTQPOTF*OUFSGBDF .JEEMFXBSF*OUFSGBDF ͦͯ͜͠͏ͳͬͨ

Slide 39

Slide 39 text

app.use(function (req, res, next) { console.log('LOGGED'); next(); }); $middleware = new class($logger) implements MiddlewareInterface { // ུ public function process( ServerRequestInterface $request, RequestHandlerInterface $handler ): ResponseInterface { $this->logger->log(LogLevel::INFO, 'LOGGED'); return $handler->handle($request); } }; ೖྗϦΫΤετ ࣍ͷεςοϓ΁ͷϙΠϯλʔ ग़ྗϨεϙϯε

Slide 40

Slide 40 text

w IBOEMFS͸ඞͣIBOEMF ϝιουΛ࣋ͭอূ͕͋Δ w IBOEMF ϝιουͷҾ਺ʹ͸ܕ੍໿͕͋Δ w IBOEMF ϝιου͕ϨεϙϯεΛฦ͢อূ͕͋Δ return $handler->handle($request); IBOEMF 4FSWFS3FRVFTU*OUFSGBDFSFRVFTU 3FTQPOTF*OUFSGBDF 3FRVFTU)BOEMFS*OUFSGBDF ܕͷ͔ͪΒ

Slide 41

Slide 41 text

IBOEMF 4FSWFS3FRVFTU*OUFSGBDFSFRVFTU 3FTQPOTF*OUFSGBDF 3FRVFTU)BOEMFS*OUFSGBDF ͭ·Γ8FCΞϓϦέʔγϣϯ ൚Խ ʜ͋ɺͦ͏Ͷɺ͢΂ͯͷΞϓϦέʔγϣϯ͸ཁ͢Δʹ ϦΫΤετΛड͚ͯϨεϙϯεΛฦ͚ͩͩ͢ΑͶ ϦΫΤετΛड͚ͯ ϨεϙϯεΛฦ͢ʜ

Slide 42

Slide 42 text

"QQ IBOEMF 1SPYZ QSPDFTT ϦΫΤετ Ϩεϙϯε 1SPYZ"QQؒͰɺಉҰͷϝοηʔδΠϯελϯεΛڞ༗͠ͳ͍͜ͱ͕ॏཁ ح͘͠΋143͸ ෺ཧαʔόʔߏ੒ͱಉ͡ߏਤʹ ετϦʔϛϯά ετϦʔϛϯά 3FRVFTU)BOEMFS*OUFSGBDF .JEEMFXBSF*OUFSGBDF $PQZXJUITUSFBNJOH $PQZXJUITUSFBNJOH

Slide 43

Slide 43 text

ݱঢ়ͷྲྀߦΓʹଥڠͤͣͪΌΜͱઃܭ͠Α͏ͱͨ͠Β ͳΜ͔ݱ࣮ͷࣸ૾ʹ͍ۙϞσϧ͕ग़͖ͯͨͧ ͪΐͬͱײಈͳΜͰ͚͢Ͳ ߟ͑௚ͯ͠ຊ౰ʹྑ͔ͬͨ

Slide 44

Slide 44 text

͋ͱͪΐͬͱ଍Γͳ͍͜ͱ

Slide 45

Slide 45 text

DSFBUF3FTQPOTF DPEF ʜ 3FTQPOTF*OUFSGBDF 3FTQPOTF'BDUPSZ*OUFSGBDF 143 4USFBN'BDUPSZ*OUFSGBDF 3FRVFTU'BDUPSZ*OUFSGBDF ʜ

Slide 46

Slide 46 text

$handler = new class implements RequestHandlerInterface { public function handle( ServerRequestInterface $request ): ResponseInterface { // ͳʹ͔Λॲཧ͢Δ return new } }; ͋Ε ͜͜Ͳ͏͢Μͩ

Slide 47

Slide 47 text

return (new \Zend\Diactoros\Response()) ->withHeader( ‘Content-Type', ‘application/json' ) ->withBody( new \Zend\Diactoros\Stream($data) ); ʜ͑ ͜ΕͩΊ ͩΊͰ͢

Slide 48

Slide 48 text

143 "QQ SEQBSUZ *NQMFNFOUBUJPO ͔ͤͬ͘ΠϯλʔϑΣʔεʹґଘͯ͠ ࣮૷ϥΠϒϥϦΑΓ"QQ͕ ந৅౓্ʹͳΕΔͷʹ ґଘ ࣮૷ ΠϯϑϥετϥΫνϟ૚ ΞϓϦέʔγϣϯ૚ ۀքඪ४ͷந৅ ࠷҆ఆ

Slide 49

Slide 49 text

143 "QQ SEQBSUZ *NQMFNFOUBUJPO ௚ࢀরͨ͠Β҆ఆ౓ந৅౓౳Ձݪଇͷҧ൓ ඪ४ΠϯλʔϑΣʔε୆ແ͠ ґଘ ࣮૷ ΠϯϑϥετϥΫνϟ૚ ΞϓϦέʔγϣϯ૚ ۀքඪ४ͷந৅ ࠷҆ఆ ґଘ

Slide 50

Slide 50 text

class MyAppHandler implements RequestHandlerInterface { private $responseFactory; private $streamFactory; public function __construct( ResponseFactoryInterface $responseFactory, StreamFactoryInterface $streamFactory ) { $this->responseFactory = $responseFactory; $this->streamFactory = $streamFactory; } public function handle( ServerRequestInterface $request ): ResponseInterface { // ུ return $this->responseFactory->createResponse() ->withHeader('Content-Type', 'application/json') ->withBody($this->streamFactory->createStream($data)); } };

Slide 51

Slide 51 text

public function __construct( ResponseFactoryInterface $responseFactory, StreamFactoryInterface $streamFactory ) ίϯετϥΫλͷ͋ͨΓͰ͸ ೚ҙʹ%* ґଘੑ஫ೖ ظ଴ͯ͠Δ͚ͩͰ͢ ͨͿΜબ୒ͨ͠143ͷ࣮૷ϥΠϒϥϦΛ஫ೖͯ͘͠ΕΔ

Slide 52

Slide 52 text

return $this->responseFactory->createResponse() ->withHeader( ‘Content-Type', ‘application/json' ) ->withBody( $this->streamFactory->createStream($data) ); ۩৅ΛOFXͤͣɺੜ੒͸ ந৅ϑΝΫτϦʹ೚ͤΔ Ͳͷ࣮૷ϥΠϒϥϦΛ࢖͏ͷ͔Λ ͍͍ͬ͞ؾʹͤͣࣗ෼ͷίʔυ͕׬੒͢Δ

Slide 53

Slide 53 text

143 "QQ SEQBSUZ *NQMFNFOUBUJPO ,&&1 ґଘ ࣮૷ ΠϯϑϥετϥΫνϟ૚ ΞϓϦέʔγϣϯ૚ ۀքඪ४ͷந৅ ࠷҆ఆ

Slide 54

Slide 54 text

·ͱΊ

Slide 55

Slide 55 text

class MyAppHandler implements RequestHandlerInterface { private $responseFactory; private $streamFactory; public function __construct( ResponseFactoryInterface $responseFactory, StreamFactoryInterface $streamFactory ) { $this->responseFactory = $responseFactory; $this->streamFactory = $streamFactory; } public function handle( ServerRequestInterface $request ): ResponseInterface { // ུ return $this->responseFactory->createResponse() ->withHeader('Content-Type', 'application/json') ->withBody($this->streamFactory->createStream($data)); } };

Slide 56

Slide 56 text

class MyAppHandler implements RequestHandlerInterface { private $responseFactory; private $streamFactory; public function __construct( ResponseFactoryInterface $responseFactory, StreamFactoryInterface $streamFactory ) { $this->responseFactory = $responseFactory; $this->streamFactory = $streamFactory; } public function handle( ServerRequestInterface $request ): ResponseInterface { // ུ return $this->responseFactory->createResponse() ->withHeader('Content-Type', 'application/json') ->withBody($this->streamFactory->createStream($data)); } };

Slide 57

Slide 57 text

class MyAppHandler implements RequestHandlerInterface { private $responseFactory; private $streamFactory; public function __construct( ResponseFactoryInterface $responseFactory, StreamFactoryInterface $streamFactory ) { $this->responseFactory = $responseFactory; $this->streamFactory = $streamFactory; } public function handle( ServerRequestInterface $request ): ResponseInterface { // ུ return $this->responseFactory->createResponse() ->withHeader('Content-Type', 'application/json') ->withBody($this->streamFactory->createStream($data)); } };

Slide 58

Slide 58 text

Α͏Θ͔ΒΜ͚Ͳ ͋Μͨͷ࿩Ϝζ͍Θ ʮΈΜͳ޲͚ͷΘ͔Γ΍͍͢΍ͭͳ͍ͷ ʯ Ͱɺ͍͍ͷͰ͠ΐ͏͔

Slide 59

Slide 59 text

ࠓ͙͢໾ʹཱͨͳ͍ͱ ཧղ͞Εͳͯ͘΋ ະདྷͷͨΊʹ ਖ਼͠͞Λ؏͘͜ͱͦ͜ ༏Εͨந৅ͷઃܭʹͱͬͯ େࣄͳ͜ͱͳͷͰ͸

Slide 60

Slide 60 text

ϦϑΝΫλ͕ཁΔ ͋ͱͰޮ͍ͯ͘Δ ࠓಈ͍ͯΔ͔Β͍͍͡ΌΜ ࠓ͙͢໾ʹཱͨͳ͍ͱ ཧղ͞Εͳͯ͘΋ ະདྷͷͨΊʹ ਖ਼͠͞Λ؏͘͜ͱͦ͜ ༏Εͨந৅ͷઃܭʹͱͬͯ େࣄͳ͜ͱͳͷͰ͸