$30 off During Our Annual Pro Sale. View Details »

たのしいOSSコードリーディング:Let's read "cookies"🍪

たのしいOSSコードリーディング:Let's read "cookies"🍪

More Decks by Misaki Shioi(塩井美咲/しおい)

Other Decks in Programming

Transcript

  1. ͨͷ͍͠044ίʔυϦʔσΟϯά
    -FU`TSFBElDPPLJFTz
    ԘҪඒ࡙!DPF@
    +VM
    5BNB3VCZձٞ

    View Slide

  2. ⚠ૣޱ஫ҙ⚠
    ίʔυΛҰߦͣͭಡΜͩৄࡉهࣄΛ
    2JJUBʹ౤ߘ͠·͢ͷͰ
    ޙ΄ͲΏͬ͘Γࠪ͝ऩ͍ͩ͘͞
    IUUQTRJJUBDPNDPF@JUFNTBEEDGFDCFBG
    ɹ
    օ༷͔Βͷٕज़తࢦఠΛ͓଴͓ͪͯ͠Γ·͢

    View Slide

  3. ࣗݾ঺հ
    ԘҪඒ࡙!DPF@

    5BNB3VCZձٞӡӦ
    5BNBSCɺ"TBLVTBSCɺ'VLVPLBSCʢ࿦ཧʣʹ͍·͢
    झຯ͸٤஡ళ☕ͱ044ίʔυϦʔσΟϯά

    View Slide

  4. ࣗݾ঺հ
    ԘҪඒ࡙!DPF@

    5BNB3VCZձٞӡӦ
    5BNBSCɺ"TBLVTBSCɺ'VLVPLBSCʢ࿦ཧʣʹ͍·͢
    झຯ͸٤஡ళ☕ͱ044ίʔυϦʔσΟϯά
    ‐ࠓ೔ͷ͓࿩

    View Slide

  5. ͋Δ೔ɺ3BJMTνϡʔτϦΞϧΛಡΜͰ͍Δͱʜ
    ͜Μͳϝιου͕ొ৔
    DPPLJFT<VTFS@JE>VTFSJE
    ‎VTFSJEΛ$PPLJFʹӬଓతʹอଘ͢Δ
    ग़యɿ3VCZPO3BJMTνϡʔτϦΞϧ
    ɹɹɹୈষൃలతͳϩάΠϯػߏϩάΠϯঢ়ଶͷอ࣋

    View Slide

  6. ͓͍͠͸ؾʹͳͬͨ
    DPPLJFT<VTFS@JE>VTFSJE
    ɹͦ͏͍͑͹ɺDPPLJFTϝιουͬͯ
    ɹͲ͏΍࣮ͬͯ૷͞Ε͍ͯΔͷ͔ͳʜʁ
    ɹݟͨ໨͸ϋογϡͬΆ͍͚ΕͲʜ

    View Slide

  7. ͱ͍͏͜ͱͰɺ
    ૣ଎ಡΜͰ͍͖·͠ΐ͏

    View Slide

  8. ΋͘͡
    ᶃͨͷ͍͠044ίʔυϦʔσΟϯά
    ʲࣄલ஌ࣝʳ3BDLϛυϧ΢ΣΞͷ͓࿩
    ʲɹຊฤɹʳ-FUTSFBEDPPLJFT
    ᶄͳͥ044ΛಡΉͷʁ

    View Slide

  9. ᶃͨͷ͍͠044ίʔυϦʔσΟϯά
    ʲࣄલ஌ࣝʳ3BDLϛυϧ΢ΣΞͷ͓࿩

    View Slide

  10. 3BDLͷ͓࿩

    ‎3BJMTΞϓϦέʔγϣϯ͸3BDLϓϩτίϧΛຬͨ͠ɺ
    ɹ3BDLϥΠϒϥϦΛ಺෦Ͱ࢖༻͍ͯ͠Δ
    ɹ3BDLͱ͸
    ◦ 8FCΞϓϦέʔγϣϯͱ8FCαʔόʔΛܨ͙ϓϩτίϧ
    ◦ 8FCΞϓϦέʔγϣϯͱ8FCαʔόʔΛܨ͙ϥΠϒϥϦ
    ը૾ग़యɿIUUQTSVCZPOSBJMTPSH͓ΑͼIUUQTSBDLHJUIVCJP

    View Slide

  11. 3BDLϛυϧ΢ΣΞͷ͓࿩
    ɹ8FCΞϓϦέʔγϣϯ͕
    ɹ͍࣋ͬͯΔ΂͖ɺ
    ɹʮಛఆͷ൚༻తͳػೳʯΛ
    ɹ੾Γग़ͨ͠3BDLϥΠϒϥϦ
    $ rails middleware

    use Webpacker::DevServerProxy

    use ActionDispatch::HostAuthorization

    use Rack::Sendfile

    use ActionDispatch::Static

    ɹ (ུ)...

    View Slide

  12. "DUJPO%JTQBUDI$PPLJFT͸3BDLϛυϧ΢ΣΞ
    $PPLJFΛอଘ͢ΔͨΊͷ"DUJPO%JTQBUDI$PPLJFTΫϥε
    ʜ3BJMTΞϓϦέʔγϣϯ͕࢖͏3BDLϛυϧ΢ΣΞͷͻͱͭ
    $ rails middleware

    ɹ (ུ)...

    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

    View Slide

  13. DPPLJFTϝιουͷ࣮૷
    DPPLJFT<VTFS@JE>VTFSJE
    ɹ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSNFUBMDPPLJFTSCDPPLJFT
    ɹ
    DPPLJFTϝιου͸DPPLJF@KBSϝιουΛ
    ݺͼग़͍ͯ͠Δ͚ͩ
    3 module ActionController

    4 module Cookies

    . . .

    12 def cookies

    13 request.cookie_jar

    14 end

    View Slide

  14. DPPLJFTϝιουͷ࣮૷
    DPPLJFT<VTFS@JE>VTFSJE
    ɹ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSNFUBMDPPLJFTSCDPPLJFT
    ɹ
    3 module ActionController

    4 module Cookies

    . . .

    12 def cookies

    13 request.cookie_jar

    14 end

    ΞϓϦέʔγϣϯ͔ΒDPPLJFTϝιουΛݺͿ
    ‎"DUJPO%JTQBUDI$PPLJFTϛυϧ΢ΣΞΛ࢖༻͢Δ
    DPPLJF@KBSϝιουͷ಺෦Ͱ
    "DUJPO%JTQBUDI$PPLJFTͷ
    ΠϯελϯεΛੜ੒

    View Slide

  15. ᶃͨͷ͍͠044ίʔυϦʔσΟϯά
    ʲɹຊฤɹʳ-FUTSFBEDPPLJFT

    View Slide

  16. DPPLJFT<VTFS@JE>VTFSJE͢Δͱɺ
    Կ͕ى͜Δʁ
    ௐࠪ؀ڥɿ3BJMTSD
    ɹɹɹɹɹ5SBDF-PDBUJPO

    View Slide

  17. શମͷྲྀΕΛ֬ೝCZ5SBDF-PDBUJPO
    ϝιου͕ݺ͹ΕΔܦ࿏Λௐ΂ͯ͘ΕΔHFN

    View Slide

  18. શମͷྲྀΕΛ֬ೝCZ5SBDF-PDBUJPO
    ……

    View Slide

  19. େมڪॖͰ͕͢
    εϥΠυʹऩ·Γ͖Βͳ͔ͬͨͨΊ
    ཁ໿͍ͨ͠·͢

    View Slide

  20. શମͷྲྀΕ͸͜Μͳײ͡
    ɹ
    ɹ
    <3BJMT>"DUJPO$POUSPMMFS.FUBMDPPLJFT
    ɹ
    <3BJMT>"DUJPO%JTQBUDI3FRVFTUDPPLJF@KBS
    ɹ
    <3BDL>3FRVFTU&OWGFUDI@IFBEFS΋͘͠͸
    ɹɹ<3BDL>3FRVFTU&OWTFU@IFBEFS
    ɹ
    ɹɹɹɹ<3BJMT>"DUJPO%JTQBUDI$PPLJFT$PPLJF+BSCVJME
    <3BDL>3FRVFTU)FMQFSTDPPLJFT
    ɹ
    <3BJMT>"DUJPO%JTQBUDI$PPLJFT<>
    ɿ
    <3BJMT>"DUJPO%JTQBUDI$PPLJFTDBMM
    DPPLJFT<VTFS@JE>VTFSJE͢Δͱʜ

    View Slide

  21. શମͷྲྀΕ͸͜Μͳײ͡
    ɹ
    ɹ
    <3BJMT><3BDL>ϦΫΤετ͔Βطଘͷ$PPLJFΛݟ͚ͭͯฦ͢
    ݟ͔ͭΒͳ͔ͬͨ৔߹

    <3BJMT><3BDL>ۭͷ$PPLJFΛϔομʹ௥Ճ
    ɹɹɹ"DUJPO%JTQBUDI$PPLJFT$PPLJF+BSͷΠϯελϯεԽ
    ɹɹɹΠϯελϯεม਺@cookiesͷॳظԽ

    <3BJMT>Πϯελϯεม਺@cookiesʹ৽͍͠$PPLJFͷ஋Λ௥Ճ

    <3BJMT>ϛυϧ΢ΣΞ͕ΞϓϦέʔγϣϯΛฦ͢λΠϛϯάͰ
    ɹɹɹΠϯελϯεม਺ͷ಺༰Λϔομʹॻ͖ࠐΉ

    DPPLJFT<VTFS@JE>VTFSJE͢Δͱʜ
    ‐͜͜·ͰಡΈ·͢

    View Slide

  22. ͔͍ͭ·ΜͰ

    View Slide

  23. <3BJMT>ϦΫΤετ͔Βطଘͷ$PPLJFΛݟ͚ͭͯฦ͢
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSNFUBMDPPLJFTSCDPPLJFT
    12 def cookies

    13 request.cookie_jar

    14 end

    View Slide

  24. BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSNFUBMDPPLJFTSCDPPLJFT
    12 def cookies

    13 request.cookie_jar

    14 end
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSC
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    <3BJMT>ϦΫΤετ͔Βطଘͷ$PPLJFΛݟ͚ͭͯฦ͢

    View Slide

  25. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    <3BJMT>ϦΫΤετ͔Βطଘͷ$PPLJFΛݟ͚ͭͯฦ͢

    View Slide

  26. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    <3BDL>ϦΫΤετ͔Βطଘͷ$PPLJFΛݟ͚ͭͯฦ͢
    SBDLMJCSBDLSFRVFTUSC
    69 def fetch_header(name, block)

    70 @env.fetch(name, &block)

    71 end

    ϦΫΤετϔομ ˞)BTI\^
    )BTIGFUDI

    View Slide

  27. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    <3BDL>ϦΫΤετ͔Βطଘͷ$PPLJFΛݟ͚ͭͯฦ͢
    SBDLMJCSBDLSFRVFTUSC
    69 def fetch_header(name, block)

    70 @env.fetch(name, &block)

    71 end

    BDUJPO@EJTQBUDIDPPLJFT

    View Slide

  28. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    <3BJMT><3BDL>ϦΫΤετ͔Βطଘͷ$PPLJFΛݟ͚ͭͯฦ͢
    <3BJMT><3BDL>ϦΫΤετ͔Β
    طଘͷ$PPLJFΛݟ͚ͭͯฦ͢

    View Slide

  29. <3BJMT>ۭͷ$PPLJFΛϔομʹ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    Ωʔ͕ݟ͔ͭΒͳ͔ͬͨ৔߹ɺ
    ϒϩοΫͷ಺෦͕ධՁ͞ΕΔ

    View Slide

  30. <3BJMT>ۭͷ$PPLJFΛϔομʹ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    28 def cookie_jar=(jar)

    29 set_header "action_dispatch.cookies", jar

    30 end

    View Slide

  31. <3BDL>ۭͷ$PPLJFΛϔομʹ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end SBDLMJCSBDLSFRVFTUSC
    78 def set_header(name, v)

    79 @env[name] = v

    80 end

    )BTI<>
    ϋογϡͷΩʔʹରͯ͠
    ஋Λؔ࿈͚ͮΔ

    View Slide

  32. <3BDL>ۭͷ$PPLJFΛϔομʹ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end SBDLMJCSBDLSFRVFTUSC
    78 def set_header(name, v)

    79 @env[name] = v

    80 end

    $PPLJFT$PPLJF+BSCVJME
    BDUJPO@EJTQBUDIDPPLJFT

    View Slide

  33. <3BDL>ۭͷ$PPLJFΛϔομʹ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    @env = { "action_dispatch.cookies":

    Cookies::CookieJar.build(self, cookies) }
    MJCSBDLSFRVFTUSCDPPLJFT
    ۭͷ$PPLJF

    View Slide

  34. <3BJMT><3BDL>ۭͷ$PPLJFΛϔομʹ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    <3BJMT><3BDL>ۭͷ$PPLJFΛϔομʹ௥Ճ

    View Slide

  35. <3BJMT>"DUJPO%JTQBUDI$PPLJFT$PPLJF+BSΛΠϯελϯεԽ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCDPPLJF@KBS
    9 module ActionDispatch

    10 module Request

    11 def cookie_jar

    12 fetch_header("action_dispatch.cookies") do

    13 self.cookie_jar = Cookies::CookieJar.build(self, cookies)

    14 end

    15 end
    @env = { "action_dispatch.cookies":

    Cookies::CookieJar.build(self, cookies) }

    View Slide

  36. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCCVJME
    272 class CookieJar

    289 def self.build(req, cookies)

    290 new(req, cookies).tap do |jar|

    291 jar.update(cookies)

    292 end

    293 end
    <3BJMT>"DUJPO%JTQBUDI$PPLJFT$PPLJF+BSΛΠϯελϯεԽ

    View Slide

  37. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCCVJME
    272 class CookieJar

    289 def self.build(req, cookies)

    290 new(req, cookies).tap do |jar|

    291 jar.update(cookies)

    292 end

    293 end
    <3BJMT>"DUJPO%JTQBUDI$PPLJFT$PPLJF+BSΛΠϯελϯεԽ
    <3BJMT>"DUJPO%JTQBUDI$PPLJFT$PPLJF+BS
    ΛΠϯελϯεԽ

    View Slide

  38. <3BJMT>Πϯελϯεม਺@cookiesͷॳظԽ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCCVJME
    272 class CookieJar

    289 def self.build(req, cookies)

    290 new(req, cookies).tap do |jar|

    291 jar.update(cookies)

    292 end

    293 end
    297 def initialize(request)

    ...

    301 @cookies = {}

    View Slide

  39. <3BJMT>Πϯελϯεม਺@cookiesͷॳظԽ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCCVJME
    272 class CookieJar

    289 def self.build(req, cookies)

    290 new(req, cookies).tap do |jar|

    291 jar.update(cookies)

    292 end

    293 end
    <3BJMT>Πϯελϯεม਺
    @cookiesͷॳظԽ

    View Slide

  40. <3BJMT>Πϯελϯεม਺@cookiesͷॳظԽ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCCVJME
    272 class CookieJar

    289 def self.build(req, cookies)

    290 new(req, cookies).tap do |jar|

    291 jar.update(cookies)

    292 end

    293 end
    <3BJMT>Πϯελϯεม਺
    @cookiesͷॳظԽ
    334 def update(other_hash)

    335 @cookies.update other_hash.stringify_keys

    336 self

    337 end
    )BTINFSHFͷΤΠϦΞε ۭͷ$PPLJF

    View Slide

  41. <3BJMT>Πϯελϯεม਺@cookiesͷॳظԽ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSCCVJME
    272 class CookieJar

    289 def self.build(req, cookies)

    290 new(req, cookies).tap do |jar|

    291 jar.update(cookies)

    292 end

    293 end
    <3BJMT>Πϯελϯεม਺
    !DPPLJFTͷॳظԽ
    <3BJMT>Πϯελϯεม਺@cookiesͷॳظԽ
    <3BJMT>Πϯελϯεม਺
    @cookiesͷॳظԽ

    View Slide

  42. <3BJMT>Πϯελϯεม਺@cookiesʹ৽͍͠$PPLJFͷ஋Λ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSC<>
    374 def [ ]=(name, options)

    375 if options.is_a?(Hash)

    ...

    378 else

    379 value = options

    380 options = { value: value }

    381 end

    382

    383 handle_options(options)

    384

    385 if @cookies[name.to_s] != value || options[:expires]

    386 @cookies[name.to_s] = value
    ஫໨

    View Slide

  43. <3BJMT>Πϯελϯεม਺@cookiesʹ৽͍͠$PPLJFͷ஋Λ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSC<>
    374 def [ ]=(name, options)

    ɹ
    DPPLJFT<VTFS@JE>VTFSJE
    ‐OBNF ‐PQUJPOT

    View Slide

  44. <3BJMT>Πϯελϯεม਺@cookiesʹ৽͍͠$PPLJFͷ஋Λ௥Ճ
    BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSC<>
    374 def [ ]=(name, options)

    375 if options.is_a?(Hash)

    ...

    378 else

    379 value = options

    380 options = { value: value }

    381 end

    382

    383 handle_options(options)

    384

    385 if @cookies[name.to_s] != value || options[:expires]

    386 @cookies[name.to_s] = value

    View Slide

  45. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSC<>
    379 value = options
    386 @cookies[name.to_s] = value

    <3BJMT>Πϯελϯεม਺@cookiesʹ৽͍͠$PPLJFͷ஋Λ௥Ճ
    ɹ
    DPPLJFT<VTFS@JE>VTFSJE
    ‐OBNF ‐PQUJPOT
    VTFS@JE VTFSJE

    View Slide

  46. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSC<>
    379 value = options
    386 @cookies[name.to_s] = value

    <3BJMT>Πϯελϯεม਺@cookiesʹ৽͍͠$PPLJFͷ஋Λ௥Ճ
    ɹ
    DPPLJFT<VTFS@JE>VTFSJE
    ‐OBNF ‐PQUJPOT
    ɹ!DPPLJFT\VTFS@JEVTFSJE^

    View Slide

  47. BDUJPOQBDLMJCBDUJPO@EJTQBUDINJEEMFXBSFDPPLJFTSC<>
    379 value = options
    386 @cookies[name.to_s] = value

    <3BJMT>Πϯελϯεม਺@cookiesʹ৽͍͠$PPLJFͷ஋Λ௥Ճ
    ɹ
    DPPLJFT<VTFS@JE>VTFSJE
    ‐OBNF ‐PQUJPOT
    <3BJMT>Πϯελϯεม਺@cookiesʹ
    ৽͍͠$PPLJFͷ஋Λ௥Ճ

    View Slide

  48. શମͷྲྀΕΛ͓͞Β͍
    ɹ
    ɹ
    <3BJMT>"DUJPO$POUSPMMFS.FUBMDPPLJFT
    ɹ
    <3BJMT>"DUJPO%JTQBUDI3FRVFTUDPPLJF@KBS
    ɹ
    <3BDL>3FRVFTU&OWGFUDI@IFBEFS΋͘͠͸
    ɹɹ<3BDL>3FRVFTU&OWTFU@IFBEFS
    ɹ
    ɹɹɹɹ<3BJMT>"DUJPO%JTQBUDI$PPLJFT$PPLJF+BSCVJME
    <3BDL>3FRVFTU)FMQFSTDPPLJFT
    ɹ
    <3BJMT>"DUJPO%JTQBUDI$PPLJFT<>
    ɿɹ
    <3BJMT>"DUJPO%JTQBUDI$PPLJFTDBMM
    DPPLJFT<VTFS@JE>VTFSJE͢Δͱʜ

    View Slide

  49. શମͷྲྀΕΛ͓͞Β͍
    ɹ
    ɹ
    <3BJMT><3BDL>ϦΫΤετ͔Βطଘͷ$PPLJFΛݟ͚ͭͯฦ͢
    ݟ͔ͭΒͳ͔ͬͨ৔߹

    <3BJMT><3BDL>ۭͷ$PPLJFΛϔομʹ௥Ճ
    ɹɹɹ"DUJPO%JTQBUDI$PPLJFT$PPLJF+BSͷΠϯελϯεԽ
    ɹɹɹΠϯελϯεม਺@cookiesͷॳظԽ

    <3BJMT>Πϯελϯεม਺@cookiesʹ৽͍͠$PPLJFͷ஋Λ௥Ճ

    <3BJMT>ϛυϧ΢ΣΞ͕ΞϓϦέʔγϣϯΛฦ͢λΠϛϯάͰ
    ɹɹɹΠϯελϯεม਺ͷ಺༰Λϔομʹॻ͖ࠐΉ

    DPPLJFT<VTFS@JE>VTFSJE͢Δͱʜ
    ‐͜͜·ͰಡΈ·ͨ͠

    View Slide

  50. ͓ർΕ༷Ͱͨ͠✨

    View Slide

  51. ᶄͳͥ044ΛಡΉͷʁ

    View Slide

  52. ͳͥ044ΛಡΉͷʁ
    จষͱಉ͘͡ɺಡΊΔΑ͏ʹͳΔ͜ͱͰ
    ɹ
    ɹ
    ॻ͚ΔΑ͏ʹͳΔ
    ΋ͬͱ೉͍͠΋ͷΛಡΊΔΑ͏ʹͳΔ
    ɹ
    ɹ
    ‎੒௕ʹͭͳ͕Δ

    View Slide

  53. ͳͥ044ΛಡΉͷʁ
    จষͱಉ͘͡ɺಡΊΔΑ͏ʹͳΔ͜ͱͰ
    ɹ
    ɹ
    ॻ͚ΔΑ͏ʹͳΔ
    ΋ͬͱ೉͍͠΋ͷΛಡΊΔΑ͏ʹͳΔ
    ɹ
    ɹ
    ‎੒௕ʹͭͳ͕Δ

    ͱɺ͍͏ͷ͸
    ஔ͍͓͍ͯͯ

    View Slide

  54. ͳͥ044ΛಡΉͷʁ
    ָ͍͔͠Βʂ

    View Slide

  55. 044ΛಡΉͷ͸ָ͍͠
    ೉ղͳຊΛಡΜͰ͍Δ࣌ͷΑ͏ͳײ֮
    Ṗ͕ղ͚ͨॠؒͷ৺஍Α͞
    ͜ͷੈքͷͲ͔͜ʹ͍Δ
    ɹͨ͘͞Μͷʮ୭͔ʯͷࢥߟΛḷΔཱྀ
    ͦ΋ͦ΋3VCZ͸ָ͍͠

    View Slide

  56. ָ͍͠͸੒௕ʹͭͳ͕Δʢ͖ͬͱʣ
    ॾઌഐํ͸օ͞Μ3VCZͷָ͠͞Λ
    ௥ٻ͞Ε͍ͯ·͢✨✨✨

    View Slide

  57. ָ͘͠3VCZΛ
    ΍͍͖ͬͯ·͠ΐ͏
    ը૾ग़యɿIUUQTUBOPTIJJSVCZHJUIVCJP

    View Slide

  58. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
    ɹ5IBOLT✨ ܟশུ

    ɹɹPLVSBNBTBGVNJ
    ɹɹVE[VSB
    ɹɹUTVLB
    ɹɹOBPUZ@L

    View Slide