Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
4MJN'SBNFXPSLͰ࢝ΊΔ 1)1ͷNJEEMFXBSF 1)1ΧϯϑΝϨϯεؔ ߹ಉձࣾςϯϚυɹࢁԬ
Slide 2
Slide 2 text
ࣗݾհ ࢁԬ!IJSP@Z 1)1ͱ͔/PEFKTͱ͔ॻ͖·͢ Ұ൪͖ͳͷ$44 ߹ಉձࣾςϯϚυදࣾһ
Slide 3
Slide 3 text
߹ಉձࣾςϯϚυ ݄ઃཱʢظʣ දࣾһਓ!! Ϗδωεࢧԉࣄۀ αʔϏε։ൃࣄۀ JSVDBNJNFNPDPOBTV
Slide 4
Slide 4 text
NJEEMFXBSFͱʁ ͱ͍͏Λ͠·͢
Slide 5
Slide 5 text
XFCΞϓϦέʔγϣϯͱ )551ͷϦΫΤετΛड͚औΓ ͍Ζ͍ΖॲཧΛͯ͠ ೝূͱ͔%#ʹσʔλอଘͱ͔ ͍ΘΏΔϏδωεϩδοΫ )551ͷϨεϙϯεΛฦ͢
Slide 6
Slide 6 text
؆୯ʹඳ͘ͱ͜͏
Slide 7
Slide 7 text
ϑΟϧλʔͱ͍͏ൃ શϦΫΤετڞ௨ͷॲཧ ॲཧલͷϩάΠϯೝূ ॲཧલͷσʔλऔಘɹͳͲ ΞϓϦέʔγϣϯຊମͷલʹ ॲཧΛڬΊΔΑ͏ʹ͢ΕΑ͍ͷͰ
Slide 8
Slide 8 text
ϑΟϧλʔʢલॲཧʣ
Slide 9
Slide 9 text
ϑΟϧλʔͷൃɺଓ͖ શϦΫΤετڞ௨ͷॲཧɺ·ͩ͋Δ ॲཧޙͷϩΪϯά ॲཧޙʹ·ͱΊͯϝʔϧૹ৴ ΞϓϦέʔγϣϯຊମͷޙʹ ॲཧΛڬΊΔΑ͏ʹ͢Ε͍͍ΑͶ
Slide 10
Slide 10 text
ϑΟϧλʔʢޙॲཧʣ
Slide 11
Slide 11 text
͜͜Ͱ/PEFKTͷ &YQSFTTͷΛ͠·͢
Slide 12
Slide 12 text
&YQSFTT IUUQFYQSFTTKTDPN l'BTU VOPQJOJPOBUFE NJOJNBMJTUXFCGSBNFXPSLGPS /PEFKTz /PEFKTͰҰ൪ΘΕ͍ͯΔ XFCΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
Slide 13
Slide 13 text
)FMMP8PSME const express = require('express'); const app = express(); app.get('/', function(req, res) { res.send('Hello World!'); }); app.listen(3000);
Slide 14
Slide 14 text
͖ͬ͞ͷਤ
Slide 15
Slide 15 text
&YQSFTTͷߏ SPVUJOH ϦΫΤετΛॲཧʹϚοϐϯά NJEEMFXBSF SPVUJOHͷաఔͰ ҙͷॲཧΛࠩ͠ࠐΉͨΊͷΈ
Slide 16
Slide 16 text
&YQSFTTͷNJEEMFXBSF ͍Ͳ͜Ζ ڞ௨ॲཧʢલॲཧɺޙॲཧʣ ͭͷSPVUJOHʹରͯ͠ෳ࿈݁Ͱ͖Δ OFYUDBMMCBDLΛݺͿͱ ࣍ͷNJEEMFXBSFʹॲཧ͕ҠΔ ࣮ߦͷॱংએݴॱ
Slide 17
Slide 17 text
NJEEMFXBSFͷجຊ function(req, res, next) { // Կ͔લॲཧΛ͢Δ next(); // ࣍ͷmiddlewareΛݺͿ // Կ͔ޙॲཧΛ͢Δ };
Slide 18
Slide 18 text
NJEEMFXBSFͷྫ const myLogger = function(req, res, next) { console.log('Logged!'); next(); }; app.get('/', myLogger, function(req, res) { res.send('Hello World!'); });
Slide 19
Slide 19 text
NJEEMFXBSFͷྫ શ const myLogger = function(req, res, next) { console.log('Logged!'); next(); }; app.use(myLogger); // શϦΫΤετʹద༻ app.get('/', function(req, res) { res.send('Hello World!'); });
Slide 20
Slide 20 text
ೖΕࢠʹͳ͍ͬͯΔ
Slide 21
Slide 21 text
NJEEMFXBSFͷྫʢෳʣ const auth = function(req, res, next) {}; const logger = function(req, res, next) {}; app.get('/', auth, logger, function(req, res) { res.send('Hello World!'); });
Slide 22
Slide 22 text
NJEEMFXBSFͷྫʢʁʣ const myLogger = function(req, res) { console.log('Logged!'); }; app.get('/', function(req, res, next) { res.send('Hello World!'); next(); }, myLogger); // ॲཧ࣮ߦޙʹݺΕΔ
Slide 23
Slide 23 text
͋ΒΏΔॲཧ͕ NJEEMFXBSFͱͯ͠ ࣮ɾ࣮ߦ͞ΕΔੈք
Slide 24
Slide 24 text
ೖΕࢠঢ়ଶ
Slide 25
Slide 25 text
λϚωΪΈ͍ͨʁ QIPUPCZEBSXJO#FMMMJDFOTFEVOEFS$$#: IUUQTXXXqJDLSDPNQIPUPTEBSXJOCFMM
Slide 26
Slide 26 text
Ұํ1)1Ͱ ʢؼ͖ͬͯͨʂʣ
Slide 27
Slide 27 text
4UBDL1)1 IUUQTUBDLQIQDPN l$PNQPTJOH)UUQ,FSOFM*OUFSGBDF NJEEMFXBSFTTJODFz l8IBUEPXFXBOU 3FVTFBUUIF XFCMBZFSz 4ZNGPOZͷ)UUQ,FSOFM*OUFSGBDF
Slide 28
Slide 28 text
4UBDL1)1
Slide 29
Slide 29 text
ͰͦΖͦΖ 4MJN'SBNFXPSLͷ
Slide 30
Slide 30 text
4MJN'SBNFXPSLW IUUQTXXXTMJNGSBNFXPSLDPN )5513PVUFS .JEEMFXBSF 1434VQQPSU %FQFOEFODZ*OKFDUJPO
Slide 31
Slide 31 text
143 IUUQXXXQIQpHPSHQTSQTS )551NFTTBHFJOUFSGBDFT 1TSa)UUQa.FTTBHFa3FRVFTU*OUFSGBDF 1TSa)UUQa.FTTBHFa3FTQPOTF*OUFSGBDF XFCΞϓϦͷೖग़ྗͷඪ४Խ
Slide 32
Slide 32 text
)FMMP8PSME // autoloadͱ͔useলུ… $app = new \Slim\App(); $app->get('/', function($request, $response) { $response->getBody() ->write('Hello World!'); return $response; }); $app->run();
Slide 33
Slide 33 text
؆୯Ͱ͠ΐʁ
Slide 34
Slide 34 text
͍Α͍Α NJEEMFXBSFͷ
Slide 35
Slide 35 text
NJEEMFXBSFʢؔʣ function(Request $request, Response $response, callable $next): Response { // Կ͔લॲཧΛ͢Δ $response = $next($request, $response); // Կ͔ޙॲཧΛ͢Δ return $response; };
Slide 36
Slide 36 text
NJEEMFXBSFʢΫϥεʣ class ExampleMiddleware { public function __invoke( Request $request, Response $response, callable $next ): Response { // …ؔͷͱ͖ͱಉ͡ } }
Slide 37
Slide 37 text
NJEEMFXBSFͷద༻ $app->get('/', function($request, $response) { // Կ͔ॲཧͯ͠ResponseΛฦ͢ })->add(ExampleMiddleware::class); // ͠શॲཧʹڬΉͳΒ $app->add(ExampleMiddleware::class);
Slide 38
Slide 38 text
DPOUSPMMFS // $app->get('/', ExampleAction::class); class ExampleAction { public function __invoke( Request $request, Response $response, array $args): Response { return $response; } }
Slide 39
Slide 39 text
%*ίϯςφͱ Έ߹ΘͤΔͱ ͬͱศརʹ
Slide 40
Slide 40 text
4MJNͷ%*ίϯςφͷҐஔ͚ Πϯελϯεੜ%*ίϯςφͷ ͖ͳ%*ίϯςφʹࠩ͠ସ͑Մೳ 1JNQMF1)1%*"DDMJNBUF $POUBJOFS*OUFSPQ࣮ͷίϯςφ 143࣮ͷίϯςφʢ͔Βʣ
Slide 41
Slide 41 text
%*ίϯςφͱͷ૬ੑ @@JOWPLFϝιου͕͋ΕΑ͍ͷͰ DPOUSPMMFSNJEEMFXBSF ίϯετϥΫλΠϯδΣΫγϣϯ ҙͷΠϯελϯεΛͤΔ NPEFMΫϥεͱ͔ɺSFOEFSFSͱ͔
Slide 42
Slide 42 text
DPOUSPMMFS /** @var \Slim\Views\Twig */ private $view; public fucntion __construct(Twig $view) { $this->view = $view; } public function __invoke(Request $request, Response $response, array $args): Response { return $this->view->render($response, 'foo.twig'); }
Slide 43
Slide 43 text
Λͯ͠ɺ143ͷ
Slide 44
Slide 44 text
ؔ͋Γͦ͏ͳ143 IUUQXXXQIQpHPSHQTS 1)14UBOEBSET3FDPNNFOEBUJPOT 143)551.FTTBHF*OUFSGBDF"DDFQUFE 143$POUBJOFS*OUFSGBDF"DDFQUFE 143)551.JEEMFXBSFT%SBGU
Slide 45
Slide 45 text
143 "DDFQUFE %*ίϯςφͷJOUFSGBDFͷඪ४Խ 1TSa$POUBJOFSa$POUBJOFS*OUFSGBDF HFUͱIBTͷϝιουΛ࣋ͭ
Slide 46
Slide 46 text
143 %SBGU .JEEMFXBSF*OUFSGBDF NJEEMFXBSFࣗମʹؔ͢Δͷ %FMFHBUF*OUFSGBDF ҕઌίΞͷΞϓϦϨΠϠʔʁ ·ͩٞͷߦํ͕ఆ·͍ͬͯͳ͍
Slide 47
Slide 47 text
1)1ͷNJEEMFXBSFྲّྀ %PVCMF1BTT 4MJNͬͪ͜ GO SFRVFTU SFTQPOTF OFYU SFTQPOTF 4JOHMF1BTT GO SFRVFTU OFYU SFTQPOTF
Slide 48
Slide 48 text
.JEEMFXBSF*OUFSGBDF namespace Psr\Http\ServerMiddleware; interface MiddlewareInterface { public function process( ServerRequestInterface $request, DelegateInterface $delegate ): ResponseInterface; }
Slide 49
Slide 49 text
%FMFHBUF*OUFSGBDF namespace Psr\Http\ServerMiddleware; interface DelegateInterface { public function process( ServerRequestInterface $request ): ResponseInterface; }
Slide 50
Slide 50 text
ଞͷϑϨʔϜϫʔΫͷ߹
Slide 51
Slide 51 text
-BSBWFM IUUQTMBSBWFMDPNEPDT NJEEMFXBSF 143ͳͲҙ͍ࣝͯ͠ͳ͍ ैདྷͷDPOUSPMMFSͷิॿతͳׂ ڞ௨ॲཧΛ࣮͢ΔͨΊͷΈ
Slide 52
Slide 52 text
-BSBWFMྫ class CheckAge { public function handle( \Illuminate\Http\Request $request, \Closure $next) { // Կ͔ॲཧʢલͰޙΖͰʣ return $next($request); } } Route::get('/', function() { /* ॲཧ */ }) ->middleware(CheckAge::class);
Slide 53
Slide 53 text
$BLF1)1 $BLF1)1͔ΒNJEEMFXBSF͕͋Δ ࣮ํ๏4MJNͱ΄ͱΜͲಉ͕ͩ͡ɺ ਖ਼͜ͳΕ͍ͯͳ͍ײ͡ ΫϥεͰͳ͘ΠϯελϯεΛ͢ IUUQTXXXTMJEFTIBSFOFUNBSLTUPSZ DBLFQIQUIFSPBEBIFBE
Slide 54
Slide 54 text
4ZNGPOZ NJEEMFXBSFʹ૬͢Δػೳͳ͍ ػೳͱͯ͠ϑΟϧλʔ͕͋Δ 4JMFYͰNJEEMFXBSFͱݺͿͷ͋Δ ͕ɺ͍ΘΏΔϑΟϧλʔͰ͔͠ͳ͍
Slide 55
Slide 55 text
;FOE&YQSFTTJWF IUUQTEPDT[FOEGSBNFXPSLDPN [FOEFYQSFTTJWF 143.JEEMFXBSF3PVUJOH%* 143ͳͲͷඪ४Λҙࣝ BDUJPOΫϥεNJEEMFXBSFͱ࣮ͯ͠
Slide 56
Slide 56 text
;FOE&YQSFTTJWFྫ $helloMiddleware = function ( ServerRequestInterface $request, DelegateInterface $delegate ) { return new TextResponse('Hello', 200); }; // ͋Δ͍MiddlewareInterfaceΛ࣮ͨ͠Ϋϥε $app->get('/hello', $hellosMiddleware);
Slide 57
Slide 57 text
NJEEMFXBSF ͍͔͕Ͱ͔ͨ͠ʁ
Slide 58
Slide 58 text
·ͱΊ NJEEMFXBSFͱ͍͏ߟ͑ํΛΔ͜ͱ ॲཧΛNJEEMFXBSFͰׂ➡ςετ༰қੑ 143Ͱඪ४Խ͞ΕΔ͜ͱͰࠩ͠ସ͑Մೳʹ %*ίϯςφͱͷΈ߹Θͤɺศར 4MJNͱ͔;FOE&YQSFTTJWF໘ന͍Αʂ
Slide 59
Slide 59 text
͋Γ͕ͱ͏͍͟͝·ͨ͠ ࣭͕͋ΕͲ͏ͧ