Slide 1

Slide 1 text

3BJMTͱ3BDLͱ)551ͱ௨৴ͷ࿩ ͳΜͱͳ͘ಈ͍ͨɺ͔ΒҰา౿ΈࠐΉΤϯδχΞϦϯά 

Slide 2

Slide 2 text

ࣗݾ঺հ w ੁٶ༎հ:VTVLF4VHBNJZB!%/11 w 1SPHBUFͰϓϩάϥϚʔ΍ͬͯ·͢ɻ w 3VCZͱCBTIεΫϦϓτΛ࢖ͬͯαʔόʔαΠυํ໘ͷ࢓ࣄΛ΍ͬͯΔ ͜ͱ͕ଟ͍Ͱ͢ɻ w લ৬Ͱ͸J04ΞϓϦΛॻ͍ͯ·ͨ͠ɻ4XJGU͸࠷ߴɻ

Slide 3

Slide 3 text

8FCαʔϏε࡞ͬͯ·͔͢ʁ

Slide 4

Slide 4 text

8FCΞϓϦέʔγϣϯ ϑϨʔϜϫʔΫ࢖ͬͯ·͔͢ʁ

Slide 5

Slide 5 text

8FC"QQMJDBUJPO'SBNFXPSLʁ

Slide 6

Slide 6 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT

Slide 7

Slide 7 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB

Slide 8

Slide 8 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP

Slide 9

Slide 9 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1

Slide 10

Slide 10 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1 4ZNGPOZ

Slide 11

Slide 11 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1 4ZNGPOZ -BSBWFM

Slide 12

Slide 12 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1 4ZNGPOZ -BSBWFM FYQSFTT

Slide 13

Slide 13 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1 4ZNGPOZ -BSBWFM FYQSFTT HJO

Slide 14

Slide 14 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1 4ZNGPOZ -BSBWFM FYQSFTT HJO 1FSGFDU

Slide 15

Slide 15 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1 4ZNGPOZ -BSBWFM FYQSFTT HJO 1FSGFDU ,JUVSB

Slide 16

Slide 16 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1 4ZNGPOZ -BSBWFM FYQSFTT HJO 1FSGFDU ,JUVSB 7BQPS

Slide 17

Slide 17 text

8FC"QQMJDBUJPO'SBNFXPSLʁ 3BJMT 4JOBUSB %KBOHP $BLF1)1 4ZNGPOZ -BSBWFM FYQSFTT HJO 1FSGFDU ,JUVSB 7BQPS 4QSJOH

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

ͦ΋ͦ΋8FCαʔϏεͱ͸ʁ 8FCΞϓϦέʔγϣϯͱ͸ʁ

Slide 20

Slide 20 text

"ϢʔβʔʹԿ͔ͷαʔϏεΛ ఏڙ͢ΔΞϓϦέʔγϣϯɻ

Slide 21

Slide 21 text

αʔϏεͱ͸ʜʁ

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

αʔϏεΛఏڙ͢Δίϯϐϡʔλ͕͍Δɻ

Slide 24

Slide 24 text

αʔϏεΛఏڙ͢Δίϯϐϡʔλ͕͍Δɻ ʢେମαʔόʔͱݺ͹Ε·͢

Slide 25

Slide 25 text

αʔϏεΛఏڙ͢Δίϯϐϡʔλ͕͍Δɻ ʢେମαʔόʔͱݺ͹Ε·͢ ˣ

Slide 26

Slide 26 text

αʔϏεΛఏڙ͢Δίϯϐϡʔλ͕͍Δɻ ʢେମαʔόʔͱݺ͹Ε·͢ ˣ αʔϏεΛड͚Δίϯϐϡʔλ͕͍Δɻ

Slide 27

Slide 27 text

αʔϏεΛఏڙ͢Δίϯϐϡʔλ͕͍Δɻ ʢେମαʔόʔͱݺ͹Ε·͢ ˣ αʔϏεΛड͚Δίϯϐϡʔλ͕͍Δɻ ʢେମΫϥΠΞϯτͱݺ͹Ε·͢ʣ

Slide 28

Slide 28 text

αʔϏεΛఏڙ͢Δίϯϐϡʔλ͕͍Δɻ ʢେମαʔόʔͱݺ͹Ε·͢ ˣ αʔϏεΛड͚Δίϯϐϡʔλ͕͍Δɻ ʢେମΫϥΠΞϯτͱݺ͹Ε·͢ʣ ˣ

Slide 29

Slide 29 text

αʔϏεΛఏڙ͢Δίϯϐϡʔλ͕͍Δɻ ʢେମαʔόʔͱݺ͹Ε·͢ ˣ αʔϏεΛड͚Δίϯϐϡʔλ͕͍Δɻ ʢେମΫϥΠΞϯτͱݺ͹Ε·͢ʣ ˣ αʔϏε͸৘ใͷ΍ΓऔΓͱ͍͏ܗͰ࣮ݱ͞ΕΔɻ

Slide 30

Slide 30 text

αʔϏεΛఏڙ͢Δίϯϐϡʔλ͕͍Δɻ ʢେମαʔόʔͱݺ͹Ε·͢ ˣ αʔϏεΛड͚Δίϯϐϡʔλ͕͍Δɻ ʢେମΫϥΠΞϯτͱݺ͹Ε·͢ʣ ˣ αʔϏε͸৘ใͷ΍ΓऔΓͱ͍͏ܗͰ࣮ݱ͞ΕΔɻ ʢ࠷ऴతʹਓ͕ؒ৘ใΛղऍ͢Δ͜ͱʹΑͬͯՁ஋͕ੜ·Ε·͢ʣ

Slide 31

Slide 31 text

৘ใͷ΍ΓͱΓʁ

Slide 32

Slide 32 text

௨৴ͩʂ

Slide 33

Slide 33 text

௨৴ͷ࿩Λ͠·͢ɻ

Slide 34

Slide 34 text

௨৴ͱ͸

Slide 35

Slide 35 text

৘ใΛ఻ୡ͢Δखஈͷ͜ͱ

Slide 36

Slide 36 text

৘ใΛ఻ୡ͢Δखஈͷ͜ͱ w ձ࿩

Slide 37

Slide 37 text

৘ใΛ఻ୡ͢Δखஈͷ͜ͱ w ձ࿩ w खࢴ

Slide 38

Slide 38 text

৘ใΛ఻ୡ͢Δखஈͷ͜ͱ w ձ࿩ w खࢴ w ࿛Ԏ

Slide 39

Slide 39 text

࿛Ԏ͸͍͢͝ ెาʹൺ΂ͯѹ౗తͳεϐʔυͰԕ͘ʹ৘ใΛ఻͑ΒΕΔɻ ͔ܽ͠͠఺΋͋Γɺ఻ୡͰ͖Δ৘ใྔ͕ͱͯ΋গͳ͍ɻ

Slide 40

Slide 40 text

ͳΜͱ͔޻෉ͯ͠࿛Ԏͷར఺Λ্ख͍ ۩߹ʹڗडͨ͘͠ͳ͍Ͱ͔͢ʁ

Slide 41

Slide 41 text

ࣄલʹ͍͔ͭ͘ͷऔΓܾΊΛ ͓͚ͯ͠͹ྑͦ͞͏Ͱ͢Ͷɻ

Slide 42

Slide 42 text

ݱ୅ͷΠϯλʔωοτʹ΋ ಉ͜͡ͱ͕ݴ͑·͢ɻ

Slide 43

Slide 43 text

༷ʑͳ෺ཧݱ৅Λ͏·͘ར༻ͯ͠ɺ ͦΕʹਓ͕ؒҙຯ߹͍Λ࣋ͨͤͯɺ ͳΜͱ͔ศརʹ࢖͍ͬͯ·͢ɻ

Slide 44

Slide 44 text

04*ࢀরϞσϧɾ5$1*1Ϟσϧ IUUQTKBQBO[EOFUDPNLFZXPSE04*ࢀরϞσϧ

Slide 45

Slide 45 text

04*ࢀরϞσϧɾ5$1*1Ϟσϧ IUUQTKBQBO[EOFUDPNLFZXPSE04*ࢀরϞσϧ

Slide 46

Slide 46 text

)551ͷ࿩

Slide 47

Slide 47 text

ͳΜͰ)551ͷ࿩ʹͳΔͷʁ

Slide 48

Slide 48 text

ී௨ͷ8FCΞϓϦέʔγϣϯ͸ɺ ৘ใΛେମશ෦)551ͷ্ʹ ৐ͤͯ௨৴͍ͯ͠Δ͔ΒͰ͢ɻ

Slide 49

Slide 49 text

)551Λཧղ͢Δ͜ͱ͕8FCΞϓϦ έʔγϣϯΛཧղ͢ΔҰͭͷಓͰ͢ɻ ΋ͪΖΜଞʹ΋୔ࢁͷಓ͕͋Γ·͢ɻ

Slide 50

Slide 50 text

)551ͱ͸

Slide 51

Slide 51 text

)551ͱ͸ )ZQFSUFYU5SBOTGFS1SPUPDPM

Slide 52

Slide 52 text

)551ͱ͸ )ZQFSUFYU5SBOTGFS1SPUPDPM

Slide 53

Slide 53 text

w )ZQFSUFYUˠཁ͢Δʹਓ͕ؒಡΊΔจࣈɻςΩετɻ

Slide 54

Slide 54 text

w )ZQFSUFYUˠཁ͢Δʹਓ͕ؒಡΊΔจࣈɻςΩετɻ w 5SBOTGFSˠӡͿɻૹΔɻҠస͢Δɻͦ͏͍͏ײ͡ɻ

Slide 55

Slide 55 text

w )ZQFSUFYUˠཁ͢Δʹਓ͕ؒಡΊΔจࣈɻςΩετɻ w 5SBOTGFSˠӡͿɻૹΔɻҠస͢Δɻͦ͏͍͏ײ͡ɻ w 1SPUPDPMˠن໿ͱ͔ن֨ͱ͔໿ଋࣄͱ͔ͦ͏͍͏֓೦ɻ

Slide 56

Slide 56 text

)ZQFSUFYU ͳΜͱʮਓ͕ؒಡΊΔʯͱ͍͏ඇৗʹศརͳಛੑ͕͋Γ·͢ɻ

Slide 57

Slide 57 text

D63-ίϚϯυʹΑΔ࣮ྫ

Slide 58

Slide 58 text

$ curl http://example.com

Slide 59

Slide 59 text

$ curl http://example.com Example Domain [ ... தུ ... ]

Example Domain

This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.

More information...

Slide 60

Slide 60 text

)5.-

Slide 61

Slide 61 text

)5.- )ZQFSUFYU.BSLVQ-BOHVBHF

Slide 62

Slide 62 text

)5.- )ZQFSUFYU.BSLVQ-BOHVBHF

Slide 63

Slide 63 text

͹ͬͪΓಡΊ·͢Ͷɻ

Slide 64

Slide 64 text

ࣄલʹ͍͔ͭ͘ͷऔΓܾΊΛ͍ͯ͠Δͱͷ͜ͱ͚ͩͬͨͲɺ ͦͷܾ·Γࣄ͸୭͕ܾΊ͍ͯΔͷʁ

Slide 65

Slide 65 text

3'$

Slide 66

Slide 66 text

3'$ͱ͸ 3FRVFTUGPS$PNNFOUT ΠϯλʔωοτͰ༻͍ΒΕΔ͞·͟·ͳٕज़ͷඪ४Խ΍ӡ༻ʹؔ͢Δࣄ߲ͳ Ͳ෯޿͍৘ใڞ༗Λߦ͏ͨΊʹެ։͞ΕΔจॻγϦʔζͰ͢ɻ IUUQTXXXOJDBEKQKBOFXTMFUUFS/PIUNM

Slide 67

Slide 67 text

3'$ͱ͸ 3FRVFTUGPS$PNNFOUT 3'$͸ɺ೥͝ΖɺεςΟʔϒɾΫϩοΧʔ͕ߟҊͨ͠ͱݴΘΕ͓ͯΓɺ ͸͡Ίͷ3'$͸೥݄೔ͷ೔෇ͱͳ͍ͬͯΔ IUUQTKBXJLJQFEJBPSHXJLJ3FRVFTU@GPS@$PNNFOUT

Slide 68

Slide 68 text

೥

Slide 69

Slide 69 text

)551 ೥

Slide 70

Slide 70 text

)551 ೥݄ 3'$IUUQTUPPMTJFUGPSHIUNMSGD

Slide 71

Slide 71 text

)551 ೥݄ 3'$IUUQTUPPMTJFUGPSHIUNMSGD 3'$IUUQTUPPMTJFUGPSHIUNMSGD

Slide 72

Slide 72 text

)551΋͋Γ·͢ɻ ೥݄͘Β͍ͷ࿩Ͱ͕͢ɺ ͜ͷ৔Ͱ͸ׂѪ͠·͢ɻ

Slide 73

Slide 73 text

8FCۀք͸มԽ͕ૣ͍ʁ

Slide 74

Slide 74 text

)551͸গͳ͘ͱ΋೥Ҏ্ɺ ͦͯ͠ࠓޙ΋࢖ΘΕଓ͚Δ ٕज़ͷجૅͱݴ͑·͢ɻ

Slide 75

Slide 75 text

ٕज़ͷࠜװΛߏ੒͍ͯ͠Δ΋ͷ Λ஌Δ͜ͱ͸େࣄͰ͢Ͷʁ

Slide 76

Slide 76 text

3'$ʹ͸ຊ࣭ͷશ͕ͯ͋Γ·͢ɻ

Slide 77

Slide 77 text

3'$ʹ͸ຊ࣭ͷશ͕ͯ͋Γ·͢ɻ ຊ౰͔ͳʜ

Slide 78

Slide 78 text

)551ͷ࢓༷ͷ࿩

Slide 79

Slide 79 text

ϦΫΤετͱϨεϙϯε

Slide 80

Slide 80 text

ϔομͱϘσΟ

Slide 81

Slide 81 text

wϦΫΤετϔομ wϦΫΤετϘσΟ wϨεϙϯεϔομ wϨεϙϯεϘσΟ

Slide 82

Slide 82 text

$ curl --verbose http://example.com

Slide 83

Slide 83 text

$ curl --verbose http://example.com * Trying 93.184.216.34... * TCP_NODELAY set * Connected to example.com (93.184.216.34) port 80 (#0)

Slide 84

Slide 84 text

$ curl --verbose http://example.com * Trying 93.184.216.34... * TCP_NODELAY set * Connected to example.com (93.184.216.34) port 80 (#0) > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.64.1 > Accept: */* > ϦΫΤετϔομ ۭߦ

Slide 85

Slide 85 text

$ curl --verbose http://example.com [...] < HTTP/1.1 200 OK < Cache-Control: max-age=604800 < Content-Type: text/html; charset=UTF-8 < Date: Thu, 21 Nov 2019 10:07:23 GMT < Etag: "3147526947+gzip+ident" < Expires: Thu, 28 Nov 2019 10:07:23 GMT < Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT < Server: ECS (sjc/4E68) < Vary: Accept-Encoding < X-Cache: HIT < Content-Length: 1256 < Ϩεϙϯεϔομ ۭߦ

Slide 86

Slide 86 text

$ curl --verbose http://example.com Example Domain [...]

Example Domain

This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.

More information...

ϨεϙϯεϘσΟ

Slide 87

Slide 87 text

$ curl --verbose http://example.com Example Domain [...]

Example Domain

This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.

More information...

* Connection #0 to host example.com left intact * Closing connection 0

Slide 88

Slide 88 text

׬શʹཧղͨ͠ɻ

Slide 89

Slide 89 text

׬શʹཧղͨ͠ɻ ຊ౰͔ͳʜ

Slide 90

Slide 90 text

ϝιουͷ࿩ɻ

Slide 91

Slide 91 text

GET POST PUT DELETE HEAD OPTIONS ʢଞʹ΋͋ΔΑʣ

Slide 92

Slide 92 text

$ curl --verbose http://example.com * Trying 93.184.216.34... * TCP_NODELAY set * Connected to example.com (93.184.216.34) port 80 (#0) > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.64.1 > Accept: */* > ϦΫΤετϔομ

Slide 93

Slide 93 text

$ curl --verbose http://example.com * Trying 93.184.216.34... * TCP_NODELAY set * Connected to example.com (93.184.216.34) port 80 (#0) > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.64.1 > Accept: */* > ͜Ε

Slide 94

Slide 94 text

ҰൠతʹɺΫϥΠΞϯτ͔Βࢦఆ͞ΕͨϝιουʹΑͬͯ αʔόʔͷڍಈΛద੾ʹม͑Δɺͱ͍͏͜ͱΛ͠·͢ɻ 1045͕ඈΜͰ͖ͨΒɺΫϥΠΞϯτ͸͜͏͍͏͜ͱΛ๬ΜͰ͍ΔͩΖ͏ɺ αʔόʔ͸͜͏͍͏ڍಈΛ͢ΔͩΖ͏ɺͱ͍ͬͨڞ௨ೝ͕ࣝ͋Δ͜ͱͱࢥ͍·͢ɻ

Slide 95

Slide 95 text

εςʔλείʔυͷ࿩

Slide 96

Slide 96 text

w ൪୆ˠ໾ʹཱͪͦ͏ͳ৘ใΛฦ͢Αɻʢ࣮ࡍʹ࢖͏͜ͱ͸΄΅ແ͍ʣ

Slide 97

Slide 97 text

w ൪୆ˠ໾ʹཱͪͦ͏ͳ৘ใΛฦ͢Αɻʢ࣮ࡍʹ࢖͏͜ͱ͸΄΅ແ͍ʣ w ൪୆ˠ੒ޭͨ͠Αɻ

Slide 98

Slide 98 text

w ൪୆ˠ໾ʹཱͪͦ͏ͳ৘ใΛฦ͢Αɻʢ࣮ࡍʹ࢖͏͜ͱ͸΄΅ແ͍ʣ w ൪୆ˠ੒ޭͨ͠Αɻ w ൪୆ˠͲ͔͜ʹҠಈͨ͠ΑɻҠಈઌΛࢀরͯ͠Ͷɻ

Slide 99

Slide 99 text

w ൪୆ˠ໾ʹཱͪͦ͏ͳ৘ใΛฦ͢Αɻʢ࣮ࡍʹ࢖͏͜ͱ͸΄΅ແ͍ʣ w ൪୆ˠ੒ޭͨ͠Αɻ w ൪୆ˠͲ͔͜ʹҠಈͨ͠ΑɻҠಈઌΛࢀরͯ͠Ͷɻ w ൪୆ˠΫϥΠΞϯτʢͦͬͪଆʣʹΤϥʔ͕͋ΔΑɻ௚ͯ͠Ͷɻ

Slide 100

Slide 100 text

w ൪୆ˠ໾ʹཱͪͦ͏ͳ৘ใΛฦ͢Αɻʢ࣮ࡍʹ࢖͏͜ͱ͸΄΅ແ͍ʣ w ൪୆ˠ੒ޭͨ͠Αɻ w ൪୆ˠͲ͔͜ʹҠಈͨ͠ΑɻҠಈઌΛࢀরͯ͠Ͷɻ w ൪୆ˠΫϥΠΞϯτʢͦͬͪଆʣʹΤϥʔ͕͋ΔΑɻ௚ͯ͠Ͷɻ w ൪୆ˠαʔόʔʢͬͪ͜ଆʣʹΤϥʔ͕͋ΔΑɻ͝ΊΜͶɻ

Slide 101

Slide 101 text

$ curl --verbose http://example.com [...] < HTTP/1.1 200 OK < Cache-Control: max-age=604800 < Content-Type: text/html; charset=UTF-8 < Date: Thu, 21 Nov 2019 10:07:23 GMT < Etag: "3147526947+gzip+ident" < Expires: Thu, 28 Nov 2019 10:07:23 GMT < Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT < Server: ECS (sjc/4E68) < Vary: Accept-Encoding < X-Cache: HIT < Content-Length: 1256 < Ϩεϙϯεϔομ ۭߦ

Slide 102

Slide 102 text

$ curl --verbose http://example.com [...] < HTTP/1.1 200 OK < Cache-Control: max-age=604800 < Content-Type: text/html; charset=UTF-8 < Date: Thu, 21 Nov 2019 10:07:23 GMT < Etag: "3147526947+gzip+ident" < Expires: Thu, 28 Nov 2019 10:07:23 GMT < Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT < Server: ECS (sjc/4E68) < Vary: Accept-Encoding < X-Cache: HIT < Content-Length: 1256 <

Slide 103

Slide 103 text

$ curl --verbose http://example.com [...] < HTTP/1.1 200 OK < Cache-Control: max-age=604800 < Content-Type: text/html; charset=UTF-8 < Date: Thu, 21 Nov 2019 10:07:23 GMT < Etag: "3147526947+gzip+ident" < Expires: Thu, 28 Nov 2019 10:07:23 GMT < Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT < Server: ECS (sjc/4E68) < Vary: Accept-Encoding < X-Cache: HIT < Content-Length: 1256 < ੒ޭͨ͠Α

Slide 104

Slide 104 text

ཧղ͠΍͍͢ɻ

Slide 105

Slide 105 text

සग़εςʔλείʔυ͸֮͑Α͏ɻ

Slide 106

Slide 106 text

සग़ͷϔομ΋֮͑Α͏ɻ

Slide 107

Slide 107 text

සग़ͷϔομ͸΍ͬͯΕ͹ͳΜͱͳ͘Θ͔Δɻ 3'$ʹ΋৭ʑఆٛ͞Ε͍ͯΔ΋ͷ͕͋ΔͷͰ ͦͪΒΛݟ·͠ΐ͏ɻ

Slide 108

Slide 108 text

εςʔτϨεͱ͍͏େࣄͳಛੑͷ࿩ɻ

Slide 109

Slide 109 text

ຖ౓)551ͷ௨৴ͷ౓ʹɺ ʮલճͷ௨৴ͨ͠಺༰ʯ΍ʮ௨৴૬खʯΛ ֮͑ͯͳͯ͘΋େৎ෉ͩΑɻ

Slide 110

Slide 110 text

௨৴૬खΛࣝผ͢Δํ๏͸)551ͷن֨ଆͰ ͸໘౗Λݟͳ͍͚Ͳɺ΍Γ͔ͨͬͨΒ֤ΞϓϦ έʔγϣϯͰ޷͖ʹ΍ͬͯͶɺͱ͍͏͜ͱɻ

Slide 111

Slide 111 text

3BDLͷ࿩

Slide 112

Slide 112 text

IUUQTHJUIVCDPNSBDLSBDL

Slide 113

Slide 113 text

3BDL͕ந৅Խ͍ͯ͠Δ΋ͷ͸ )551ͷϦΫΤετͱϨεϙϯε

Slide 114

Slide 114 text

run Proc.new do |env| [ 200, {'Content-Type' => 'text/plain'}, ['Hello'] ] end 3BDLͷ࠷খͷ࢖͍ํ

Slide 115

Slide 115 text

run Proc.new do |env| [ 200, {'Content-Type' => 'text/plain'}, ['Hello'] ] end envʹ͸ΫϥΠΞϯτ͔Βͷ ϦΫΤετͷ৘ใ͕ೖͬͯΔΑɻ Ϩεϙϯεͷεςʔλείʔυ Ϩεϙϯεϔομ ϨεϙϯεϘσΟ 3BDLͷΤϯυϙΠϯτͱͯ࣍͠ͷ Proc Λ࢖͏Αɻ

Slide 116

Slide 116 text

ͳΔ΄ͲͰ͢Ͷɻ

Slide 117

Slide 117 text

΋͏ͪΐͬͱྑ͍ײ͡ʹ͠·͢ɻ

Slide 118

Slide 118 text

class Hello def call(env) [200, {'Content-Type' => 'text/plain'}, ["Hello Rack\n"]] end end run Hello.new

Slide 119

Slide 119 text

class Hello def call(env) [200, {'Content-Type' => 'text/plain'}, ["Hello Rack\n"]] end end run Hello.new $ curl http://localhost:9292/

Slide 120

Slide 120 text

class Hello def call(env) [200, {'Content-Type' => 'text/plain'}, ["Hello Rack\n"]] end end run Hello.new $ curl http://localhost:9292/ Hello Rack

Slide 121

Slide 121 text

͍͍ײ͡Ͱ͢Ͷɻ

Slide 122

Slide 122 text

NJEEMFXBSFΛڬΜͰΈ·͠ΐ͏ɻ

Slide 123

Slide 123 text

class Secret def initialize(app) @app = app end def call(env) if env["PATH_INFO"] == '/secret' [200, {'Content-Type' => 'text/plain'}, ["This is Secret\n"]] else @app.call(env) end end end class Hello def call(env) [200, {'Content-Type' => 'text/plain'}, ["Hello Rack\n"]] end end run Secret.new(Hello.new)

Slide 124

Slide 124 text

class Secret def initialize(app) @app = app end def call(env) if env["PATH_INFO"] == '/secret' [200, {'Content-Type' => 'text/plain'}, ["This is Secret\n"]] else @app.call(env) end end end class Hello def call(env) [200, {'Content-Type' => 'text/plain'}, ["Hello Rack\n"]] end end run Secret.new(Hello.new) NJEEMFXBSFͱͯ͠࢖͏DMBTTΛ3BDLͷ ΠϯλʔϑΣʔεʹैͬͨܗͰ࡞ΔΑɻ TFDSFUʹΞΫηεͨ͠ͱ͖͚ͩ5IJTJT4FDSFUͱ ฦͯ͠ɺͦΕҎ֎ͷͱ͖͸ॲཧΛଞʹؙ౤͛͢ΔΑɻ 4FDSFUΛΤϯυϙΠϯτʹͯ͠ɺؙ౤͛ઌΛ)FMMPʹ͢ΔΑɻ

Slide 125

Slide 125 text

$ curl http://localhost:9292/ Hello Rack

Slide 126

Slide 126 text

$ curl http://localhost:9292/hello $ curl http://localhost:9292/ Hello Rack

Slide 127

Slide 127 text

$ curl http://localhost:9292/hello Hello Rack $ curl http://localhost:9292/ Hello Rack

Slide 128

Slide 128 text

$ curl http://localhost:9292/secret $ curl http://localhost:9292/hello Hello Rack $ curl http://localhost:9292/ Hello Rack

Slide 129

Slide 129 text

$ curl http://localhost:9292/secret This is Secret $ curl http://localhost:9292/hello Hello Rack $ curl http://localhost:9292/ Hello Rack

Slide 130

Slide 130 text

No content

Slide 131

Slide 131 text

ͪΐͬͱΠϠͳ༧ײ͕͢Δ෦෼ run Secret.new(Hello.new)

Slide 132

Slide 132 text

run Function.new(Secret.new(Hello.new(Hi.new))) ͪΐͬͱΠϠͳ༧ײ͕͢Δ෦෼ NJEEMFXBSF͕૿͑ͨΒେମ͜͏ͳ͍͖ͬͯͦ͏ʜɻ

Slide 133

Slide 133 text

use Function use Secret use Hello run Hi.new ͜͏͍͏෩ʹॎʹฒ΂ͯॻ͚·͢ɻ

Slide 134

Slide 134 text

No content

Slide 135

Slide 135 text

IUUQTHJUIVCDPNSBDLSBDL

Slide 136

Slide 136 text

IUUQTHJUIVCDPNSBDLSBDL

Slide 137

Slide 137 text

վΊͯ ͳΜͰ3BDLͷ࿩Λͨ͠ͷʁ

Slide 138

Slide 138 text

3BJMT΋3BDLʹ৐͔ͬͬͯΔ͔ΒͰ͢ɻ

Slide 139

Slide 139 text

$ ./bin/rails middleware

Slide 140

Slide 140 text

$ ./bin/rails middleware use Rack::Sendfile use ActionDispatch::Static use ActionDispatch::Executor use ActiveSupport::Cache::Strategy::LocalCache::Middleware use Rack::Runtime use Rack::MethodOverride use ActionDispatch::RequestId use ActionDispatch::RemoteIp use Sprockets::Rails::QuietAssets use Rails::Rack::Logger use ActionDispatch::ShowExceptions use WebConsole::Middleware use ActionDispatch::DebugExceptions use ActionDispatch::Reloader use ActionDispatch::Callbacks use ActiveRecord::Migration::CheckPending use ActionDispatch::Cookies use ActionDispatch::Session::CookieStore use ActionDispatch::Flash use ActionDispatch::ContentSecurityPolicy::Middleware use Rack::Head use Rack::ConditionalGet use Rack::ETag use Rack::TempfileReaper run MyApp::Application.routes

Slide 141

Slide 141 text

ʜ͜Μͳʹ୔ࢁඞཁͳͷʁ

Slide 142

Slide 142 text

͜Ε͸ਓྨͷӳ஌ͷ݁থͰ͢ɻ ͋Γ͕ͨ͘࢖͍·͠ΐ͏ɻ ͖ͦͯͪ͠Μͱ಺෦·Ͱௐ΂·͠ΐ͏ɻ

Slide 143

Slide 143 text

·ͱΊ

Slide 144

Slide 144 text

·ͱΊ w 8FCۀք͸มԽ͕ૣ͍ͱ͍ͬͨ࿩͸ਖ਼͍͠෦෼΋͋Δ͚ͲɺͲͷۀքͩͬͯมԽ͕ૣ͍෦෼ͱ جૅʹͳ͍ͬͯͯɺͦ͏ͦ͏มΘΒͳ͍෦෼͸͋ΔΑɻ

Slide 145

Slide 145 text

·ͱΊ w 8FCۀք͸มԽ͕ૣ͍ͱ͍ͬͨ࿩͸ਖ਼͍͠෦෼΋͋Δ͚ͲɺͲͷۀքͩͬͯมԽ͕ૣ͍෦෼ͱ جૅʹͳ͍ͬͯͯɺͦ͏ͦ͏มΘΒͳ͍෦෼͸͋ΔΑɻ w มԽ͠ͳ͍෦෼͸Ͳ͜ʹ͋Δͷ͔ͱ͍͏͜ͱΛ஌͍ͬͯΔͱੜ͖΍͘͢ͳΔΑɻ͜ͷۀքʹ͓͍ ͯɺͦΕ͸ओʹʮඪ४Խ͞Εͨن֨ʯͱʮίϯϐϡʔλαΠΤϯεʯͷ෦෼ʹूதͯ͠ΔΑɻ

Slide 146

Slide 146 text

·ͱΊ w 8FCۀք͸มԽ͕ૣ͍ͱ͍ͬͨ࿩͸ਖ਼͍͠෦෼΋͋Δ͚ͲɺͲͷۀքͩͬͯมԽ͕ૣ͍෦෼ͱ جૅʹͳ͍ͬͯͯɺͦ͏ͦ͏มΘΒͳ͍෦෼͸͋ΔΑɻ w มԽ͠ͳ͍෦෼͸Ͳ͜ʹ͋Δͷ͔ͱ͍͏͜ͱΛ஌͍ͬͯΔͱੜ͖΍͘͢ͳΔΑɻ͜ͷۀքʹ͓͍ ͯɺͦΕ͸ओʹʮඪ४Խ͞Εͨن֨ʯͱʮίϯϐϡʔλαΠΤϯεʯͷ෦෼ʹूதͯ͠ΔΑɻ w ઌਓͷ஌ܙ͸ҒେͩΑɻڊਓͷݞʹ͸ૉ௚ʹ৐Δͷ͕͍͍Αɻࣗ෼Ͱ࡞ΔͱେମࣄނΔΑɻͱ͸ ͍͑ઌਓ͕Ͳ͏͍ͬͨ޻෉Λͯ͠ɺࠓԿނͦ͏ͳ͍ͬͯΔͷ͔Λ஍ಓʹௐ΂Δ͜ͱ͸େࣄͩΑɻ

Slide 147

Slide 147 text

·ͱΊ w 8FCۀք͸มԽ͕ૣ͍ͱ͍ͬͨ࿩͸ਖ਼͍͠෦෼΋͋Δ͚ͲɺͲͷۀքͩͬͯมԽ͕ૣ͍෦෼ͱ جૅʹͳ͍ͬͯͯɺͦ͏ͦ͏มΘΒͳ͍෦෼͸͋ΔΑɻ w มԽ͠ͳ͍෦෼͸Ͳ͜ʹ͋Δͷ͔ͱ͍͏͜ͱΛ஌͍ͬͯΔͱੜ͖΍͘͢ͳΔΑɻ͜ͷۀքʹ͓͍ ͯɺͦΕ͸ओʹʮඪ४Խ͞Εͨن֨ʯͱʮίϯϐϡʔλαΠΤϯεʯͷ෦෼ʹूதͯ͠ΔΑɻ w ઌਓͷ஌ܙ͸ҒେͩΑɻڊਓͷݞʹ͸ૉ௚ʹ৐Δͷ͕͍͍Αɻࣗ෼Ͱ࡞ΔͱେମࣄނΔΑɻͱ͸ ͍͑ઌਓ͕Ͳ͏͍ͬͨ޻෉Λͯ͠ɺࠓԿނͦ͏ͳ͍ͬͯΔͷ͔Λ஍ಓʹௐ΂Δ͜ͱ͸େࣄͩΑɻ w γϯϓϧͱΠʔδʔ͸ҧ͏Αɻ͜ͷ҉໧஌͕ଟ͘ٻΊΒΕΔ8FCۀքͰ͸ॳֶऀʹͱͬͯγϯ ϓϧͳ΋ͷ͸গͳ͍Αɻʢނʹߴ౓ͳٕೳ৬Ͱ͋Δͱ͞Ε͍ͯΔଆ໘΋͋Δͱࢥ͏Αɻʣ

Slide 148

Slide 148 text