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

Web技術の基本 6回目 / Introduction to Web technologies 6th class

muttan
April 13, 2018

Web技術の基本 6回目 / Introduction to Web technologies 6th class

muttan

April 13, 2018
Tweet

More Decks by muttan

Other Decks in Technology

Transcript

  1. Webٕज़ͷجຊ 6ճ໨
    Keisuke KAMIYA

    View Slide

  2. ࠓճͷςʔϚ

    View Slide

  3. Chapter 5
    WebΞϓϦέʔγϣϯͷجຊ

    View Slide

  4. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ
    ※͕͢͞ʹ෼͔ΔͰ͠ΐͬͯॴ͸Χοτͯ͠·͢

    View Slide

  5. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  6. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    • WebΞϓϦέʔγϣϯ

    ωοτϫʔΫΛհͯ͠Webϒϥ΢β্Ͱಈ࡞͢ΔΞϓ
    Ϧέʔγϣϯ
    • WebΞϓϦέʔγϣϯ͸, 3૚ߏ଄Ͱӡ༻͞Ε͍ͯΔࣄ
    ͕ଟ͍
    ‣ ϓϨθϯςʔγϣϯ૚(Webαʔό)
    ‣ ΞϓϦέʔγϣϯ૚(APαʔό)
    ‣ σʔλ૚(DBαʔό)

    View Slide

  7. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    WebγεςϜ
    ΞϓϦέʔγϣϯ૚ σʔλ૚
    ϓϨθϯςʔγϣϯ૚
    Webϒϥ΢β
    (ΫϥΠΞϯτεΫϦϓτ)
    (Webαʔό) (APαʔό) (DBαʔό)
    Ϣʔβʔ΁ͷදࣔ
    Ϣʔβʔ͔Βͷૢ࡞ड෇
    8FCαʔό͔Βͷ
    ໋ྩ࣮ߦ ը໘ͷੜ੒
    σʔλͷநग़΍
    ߋ৽ ิؒ

    View Slide

  8. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    • 3૚ΞʔΩςΫνϟͰߏ੒͢Δར఺

    1ͭͷαʔόͰશͯΛ࿫͏ΑΓ΋, ෛՙ෼ࢄ(εέʔϧΞ
    ΢τ)͠΍͍͢
    ‣ εέʔϧΞ΢τ

    ಉ͡ػೳΛఏڙ͢ΔαʔόΛෳ਺୆༻ҙͯ͠, ϦΫΤ
    ετΛద౰ʹৼΓ෼͚ΔΑ͏ͳߏ੒

    View Slide

  9. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    WebγεςϜ
    8FCαʔό "1αʔό %#αʔό
    ͭͷαʔό಺ʹશͯΛ഑ஔͨ͠৔߹
    WebαʔόɿϦΫΤετ਺ʹൺྫͯ͠ෛՙ͕૿Ճ
    APαʔόɿॲཧ͕ෳࡶʹͳΔͱෛՙ͕૿Ճ
    DBαʔόɿσʔλྔ͕ଟ͍ͱෛՙ͕૿Ճ

    View Slide

  10. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    WebγεςϜ
    8FCαʔό "1αʔό %#αʔό
    ૚ΞʔΩςΫνϟͷ৔߹
    ͦΕͧΕͷαʔό͕ಠཱͯ͠ಈ࡞͍ͯ͠Δ
    →ͦΕͧΕΛϦΫΤετঢ়گʹԠͯ͡૿ݮՄೳʹ
    ྫ) ϦΫΤετ͕ଟ͘ͳͬͨΒWebαʔόΛεέʔϧͤ͞Δ

    View Slide

  11. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    WebγεςϜ
    ૚ΞʔΩςΫνϟͷ৔߹
    Webαʔό APαʔό DBαʔό
    ϦΫΤετ

    View Slide

  12. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    WebγεςϜ
    ૚ΞʔΩςΫνϟͷ৔߹
    Webαʔό APαʔό DBαʔό
    ϦΫΤετ
    Webαʔό͕མͪΔͱԠ౴
    Ͱ͖ͳ͘ͳΔ

    View Slide

  13. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    WebγεςϜ
    ૚ΞʔΩςΫνϟͷ৔߹
    Webαʔό APαʔό DBαʔό
    ϦΫΤετ
    ϦΫΤετΛॲཧ͢ΔͨΊʹ
    WebαʔόΛ૿΍͢

    View Slide

  14. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    • 3૚ΞʔΩςΫνϟͰ͋Ε͹, WebαʔόͱAPαʔόͱ
    DBαʔό͕ಠཱ͍ͯ͠ΔͨΊ, ͦΕͧΕͷ਺ͷௐ੔ʢε
    έʔϧΞ΢τʣ͕΍Γ΍͍͢
    ‣ 1ͭͷϚγϯʹશͯͷαʔόΛཱͯͯ͠·͏ͱ, Web
    αʔόΛ૿΍ͨͯ͘͠΋, ୯ମͰ૿΍͢͜ͱ͕ෆՄೳ
    ‣ Ұൠʹ, DBαʔόͷεέʔϧΞ΢τ͸೉͍͠
    - աڈʹॻ͍ͨεϥΠυʹ৭ʑ͔͍ͯ͋ΔΑ

    View Slide

  15. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    • ͦΕͧΕͷ૚͕ಠཱ͍ͯ͠ΔͷͰ, վमൣғΛ੍ݶ͢Δ
    ͜ͱ͕Մೳ
    WebγεςϜ
    ΞϓϦέʔγϣϯ૚ σʔλ૚
    ϓϨθϯςʔγϣϯ૚
    Webϒϥ΢β
    (ΫϥΠΞϯτεΫϦϓτ)
    (Webαʔό) (APαʔό) (DBαʔό)
    ϨΠΞ΢τΛมߋ͚ͨ͠Ε͹
    8FCαʔόͷΈ͍͡Ε͹ྑ͍

    View Slide

  16. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    • ΞϓϦέʔγϣϯͷن໛ʹΑͬͯ, ద੾ͳΞʔΩςΫ
    νϟΛ࠾༻͢Δ΂͖
    • େن໛ͳαʔϏεͰ͸༗ޮ͕ͩ, ݸਓతͳখ͞ͳ΋ͷͰ
    3૚ΞʔΩςΫνϟΛ࠾༻͢Δͷ͕ϕετͱ͸ݶΒͳ͍
    ‣ αʔό͕3୆͋Δͱ͍͏͜ͱ͸, 3ͭ෼ͷ؅ཧίετ͕
    ͔͔Δͱ͍͏͜ͱʹͳΔ
    WebΞϓϦέʔγϣϯͷ3૚ߏ଄ ऴྃ

    View Slide

  17. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  18. MVCϞσϧ
    • MVCϞσϧ

    WebΞϓϦέʔγϣϯͷσβΠϯύλʔϯͷҰछ
    ‣ M(Model)

    σʔλʹؔ͢ΔॲཧΛߦ͏
    ‣ V(View)

    Ϣʔβʔ΁ͷग़ྗॲཧ
    ‣ C(Controller)

    Ϣʔβʔ͔ΒͷϦΫΤετΛड͚ͯ, Model΍View΁
    ॲཧΛৼΓ෼͚Δ

    View Slide

  19. MVCϞσϧ
    $POUSPMMFS
    7JFX .PEFM
    ॲཧ໋ྩ
    σ
    ʔ
    λ
    ͷ




    ׬

    Ԡ

    දࣔσʔλ
    σ
    ʔ
    λ
    ͷ




    ׬

    Ԡ

    σʔλཁٻ
    ը໘දࣔ
    σʔλॲཧ໋ྩͷྲྀΕ
    σʔλද໋ࣔྩͷྲྀΕ
    7JFXͱ.PEFMʹࢦࣔ
    ग़ྗ දࣔ
    Λ୲౰ σʔλॲཧ

    View Slide

  20. MVCϞσϧ
    • ͜ͷΑ͏ʹ͢Δͱ, MVCϞσϧͬͯ3૚ΞʔΩςΫνϟ
    ͱࠞಉ͢Δਓ͕͍Δ
    ‣ 3૚ΞʔΩςΫνϟͱMVC͸ҟͳΔ֓೦
    ‣ ૚ߏ଄ͱ͍͏ͷ͸, ྡΓ߹ͬͨ૚ಉ࢜ͰͷΈ΍ΓऔΓ
    Λ͢Δ
    - ϓϨθϯςʔγϣϯ૚ͱσʔλ૚͸΍ΓऔΓ͠ͳ
    ͍
    ‣ MVCϞσϧͷ৔߹, ͢΂ͯͷ૚ʹؔ܎͕͋Δ

    View Slide

  21. MVCϞσϧ
    WebγεςϜ
    ΞϓϦέʔγϣϯ૚ σʔλ૚
    ϓϨθϯςʔγϣϯ૚
    Webϒϥ΢β
    (ΫϥΠΞϯτεΫϦϓτ)
    (Webαʔό) (APαʔό) (DBαʔό)
    Controller
    View
    Model
    ΞϓϦέʔγϣϯ

    View Slide

  22. MVCϞσϧ
    • MVCϞσϧͷར఺
    ‣ 3૚ΞʔΩςΫνϟʔಉ༷ʹ, ։ൃ΍վमͷൣғ͕໌
    ֬ʹͳΔ
    - ֤ཁૉ͕ผΕ࣮ͯ૷͞Ε͍ͯΔͨΊ, ଞͷՕॴ΁ͷ
    Өڹ͕গͳ͍
    - ໰୊Օॴͷಛఆ͕ൺֱత༰қ
    MVCϞσϧ ऴྃ

    View Slide

  23. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  24. Webαʔό
    • Webαʔό

    WebΫϥΠΞϯτ͔ΒͷϦΫΤετΛड͚औΔαʔό
    Webϒϥ΢β
    (ΫϥΠΞϯτεΫϦϓτ)
    (Webαʔό) (APαʔό) (DBαʔό)
    ↑͜͜

    View Slide

  25. Webαʔό
    • ϦΫΤετͷ಺༰ʹΑͬͯॲཧΛม͑Δ
    ‣ css, js͕ϦΫΤετ͞Εͨ৔߹ʢ੩తϑΝΠϧʣ

    Webαʔό͕ϑΝΠϧΛฦ͢
    ‣ ಈతॲཧ͕ඞཁͳ΋ͷ

    APαʔόʹॲཧΛґཔ͢Δ
    Webαʔό APαʔό
    ϦΫΤετ ಈతॲཧͷґཔ
    ಈతϖʔδͷ
    సૹ
    ίϯςϯπͷ
    సૹ
    ੩తϑΝΠϧ͸
    ͜͜Ͱฦ͢

    View Slide

  26. Webαʔό
    • Webαʔό͸ϦΫΤετΛड͚͚ͭΔ૭ޱ
    ‣ Webαʔό͕ࢮ͵ͱαʔϏε͕ఀࢭͯ͠͠·͏
    • ͜ͷΑ͏ͳࣗମΛආ͚ΔͨΊ, ௨ৗ͸WebαʔόΛෳ਺
    ୆༻ҙͯ͠৑௕ԽΛߦ͍ͬͯΔ
    ‣ 1୆ͩͱ1୆ࢭ·ΔͱશͯऴΘΓ͕ͩ, Կ୆͔Քಇͯ͠
    ͍Ε͹ͳΜͱ͔αʔϏεΛܧଓͰ͖Δ

    View Slide

  27. Webαʔό
    APαʔό
    αʔό͕ނোͯ͠΋ผͷαʔόΛ
    ࢖ͬͯαʔϏεܧଓ
    Webαʔό
    ΫϥΠΞϯτ
    ͨͩ͠, Webαʔό͸ͦΕͧΕಉ͡
    ίϯςϯπΛ͍࣋ͬͯΔඞཁ͕͋Δ
    ઀ଓෆՄ

    View Slide

  28. Webαʔό
    • ར༻ऀ͕ଟ͚Ε͹ଟ͍΄ͲϦΫΤετ͸૿Ճ
    ‣ ར༻ऀ͕ଟͯ͘΋Ϩεϙϯε͸஗ͨ͘͘͠ͳ͍
    • ݱঢ়Webαʔό͕ͲͷΑ͏ͳঢ়ଶͰ͋Δ͔Λਪଌͤͣ
    ʹܭଌ͢Δ΂͖
    ‣ I/O͕ϘτϧωοΫͳͷ͔CPUͳͷ͔
    - Don't guess! Measure!
    - "premature optimization is the root of all evil." (ૣ
    ͗͢Δ࠷దԽ͸ॾѱͷࠜݯ)

    View Slide

  29. Webαʔό
    • WebαʔόΛεέʔϧΞ΢τ͢Δࡍ͸, શͯͷWebαʔ
    όʹಉ͡ίϯςϯπΛஔ͘ඞཁ͕͋Δ
    • ผʹϑΝΠϧ༻ͷαʔόΛ༻ҙ͢Δํ๏΋͋Δ
    ‣ ίϯςϯπͷಉظ͸ෆཁʹͳΔ͕, αʔόؒͷ௨৴͕
    ൃੜ͠Ϩεϙϯε͕௿Լ͢Δ
    ϑΝΠϧΛஔ͍ͨαʔό
    Φʔόʔϔου͕ൃੜ
    Webαʔό
    Webαʔό
    Webαʔό ऴྃ

    View Slide

  30. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  31. ΞϓϦέʔγϣϯαʔό
    • ΞϓϦέʔγϣϯαʔό(APαʔό)

    ࣮ࡍͷWebΞϓϦέʔγϣϯͷॲཧΛߦ͏ϓϩάϥϜ
    Webϒϥ΢β
    (ΫϥΠΞϯτεΫϦϓτ)
    (Webαʔό) (APαʔό) (DBαʔό)
    ↑͜͜

    View Slide

  32. ΞϓϦέʔγϣϯαʔό
    • Webαʔό͔Βసૹ͞Ε͖ͯͨσʔλΛجʹ, σʔλ
    ϕʔε಺ͷݕࡧ΍Ճ޻Λߦ͍Ԡ౴Λฦ͢
    ‣ 3૚ΞʔΩςΫνϟʹ͓͚ΔΞϓϦέʔγϣϯ૚ʹҐ
    ஔ͢Δαʔό
    ‣ ϓϨθϯςʔγϣϯ૚ͱσʔλ૚ͱͷ஥հ໾
    ‣ CPUෛՙ͕ߴ͘ͳΓ͕ͪ

    View Slide

  33. ΞϓϦέʔγϣϯαʔόʢηογϣϯ؅ཧػೳʣ
    • Ҏલʹ΋࿩ͨ͠ηογϣϯͷ؅ཧΛߦ͍ͬͯΔ
    ‣ ؔ࿈ͷ͋Δ1࿈ͷॲཧͷ։͔࢝Βऴྃ·Ͱͷશظؒ
    ૹ৴ଆ ड৴ଆ
    ঎඼ΛબͿ
    OK
    ങ͍෺͔͝ʹೖΕΔ
    OK
    ങ͍෺͔͝ͷத਎Λ֬ೝ
    OK
    ܾࡁ
    OK
    ηογϣϯ

    View Slide

  34. ʢ෮शʣηογϣϯ
    • ෳ਺ͷΫϥΠΞϯτ͔ΒΞΫηε͞ΕΔWebαʔό͸, ηο
    γϣϯΛͲͷΑ͏ʹ؅ཧ͢Δͷ͔ʁ
    ‣ CookieΛ༻͍ͯηογϣϯΛ؅ཧ͢Δ
    ‣ Cookie͕࢖͑ͳ͍৔߹͸URLʹؚΊΔͱ͖΋͋Δ͕, ηΩϡ
    ϦςΟͷ໘͔Βਪ঑͞Εͳ͍ํ๏Ͱ͋Δ
    • ηογϣϯ؅ཧʹ͓͍ͯ, Webϒϥ΢βΛࣝผ͢ΔͨΊͷࣝผ
    ࢠ(id)ΛηογϣϯIDͱݺͿ
    ‣ ηογϣϯID͸WebαʔόͰੜ੒͞Ε, CookieʹؚΊͯWeb
    ϒϥ΢βʹૹ৴͞ΕΔ

    View Slide

  35. ʢ෮शʣηογϣϯ
    4*%BBBBBB
    4*%CCCCCC
    webαʔό
    webϒϥ΢βB
    webϒϥ΢βA
    ηογϣϯ*% Ϣʔβʔ ϩάΠϯ ങ͍෺͔͝
    BBBBBB TBUP 536&
    Ξ΢λʔº
    γϟπº
    CCCCCC HVFTU '"-4& γϡʔζº
    දɿWebαʔό͕อଘ͍ͯ͠Δηογϣϯσʔλ

    View Slide

  36. ʢ෮शʣηογϣϯ
    • ηογϣϯIDΛड͚औͬͯҎ߱͸, ϦΫΤετϔομʹ
    ηογϣϯIDΛؚΊͯૹ৴͢Δ͜ͱͰ, Webαʔόͱͷ
    ηογϣϯΛҡ࣋͢Δ͜ͱ͕ग़དྷΔ.
    • ʮങ͍෺͔͝ʹͳʹΛ͍Ε͔ͨʯͱݴͬͨ৘ใ͸, ηο
    γϣϯIDͱඥ෇͍ͯʮηογϣϯσʔλʯͱͯ͠αʔό
    ʹอଘ͞ΕΔ.

    View Slide

  37. ʢ෮शʣηογϣϯ
    webαʔό
    webϒϥ΢βA
    Set-Cookie:SID=aaaaaa
    Cookie:SID=aaaaaa
    CookieʹؚΊͯ౉͢
    ϦϯΫͷURLʹؚΊΔ
    webαʔό
    webϒϥ΢βA
    http://example.com/cart?SID=aaaaaa
    ͱ͍͏ϦϯΫ෇͖ͷWebϖʔδΛૹ৴
    ϦϯΫ͕ΫϦοΫ͞ΕΔͱ, ηογϣϯID෇͖
    ͰWebαʔό΁ϦΫΤετ͕ૹ৴͞ΕΔ
    http://example.com/cart?SID=aaaaaa
    ηογϣϯIDΛURLͷύϥϝʔλͱͯ͠ૹ৴

    View Slide

  38. ΞϓϦέʔγϣϯαʔόʢηογϣϯ؅ཧػೳʣ
    • HTTP͸εςʔτϨεͳϓϩτίϧͳͷͰ, ηογϣϯͳ
    ͲΛ࢖Θͳ͍ͱεςʔτϑϧͳॲཧΛߦ͑ͳ͍
    • APαʔό͕ηογϣϯIDΛൃߦ͠, ͦΕΛجʹΫϥΠΞ
    ϯτͱ΍ΓऔΓ͢Δ͜ͱͰ1ͭͷηογϣϯͱͯ͠؅ཧ

    View Slide

  39. ΞϓϦέʔγϣϯαʔόʢτϥϯβΫγϣϯ؅ཧػೳʣ
    • τϥϯβΫγϣϯ

    ηογϣϯதͰߦΘΕΔؔ࿈ͨ͠Ұ࿈ͷ࡞ۀ
    ‣ ෳ਺ͷॲཧͷ1ͭ1ͭ͸HTTPϦΫΤετͰ੒Γཱͬͯ
    ͍ΔͨΊ, ͜ΕΒΛ1ͭͷτϥϯβΫγϣϯͱͯ͠·ͱ
    Ί͍ͯΔ

    View Slide

  40. ΞϓϦέʔγϣϯαʔόʢτϥϯβΫγϣϯ؅ཧػೳʣ
    ᶃϩάΠϯ
    ᶄີࣨ৘ใͷ֬ೝ
    ᶅ٬ࣨΛ෦԰ݮΒ͢
    ᶆۭࣨʹ༧໿ऀ৘ใΛ௥Ճ
    ᶇ༧໿ͷ੒ཱ
    ᶈϩάΞ΢τ
    ᶆͷΈࣦഊͯ͠ଞ͸͢΂ͯਖ਼ৗʹऴྃͨ͠ͱ͠
    ͯ΋ ॓ധࢪઃͷ༧໿࡞ۀͱͯ͠੒ޭͨ͠ͱ͸
    ͍͑ͳ͍
    1τϥϯβΫγϣϯ
    1τϥϯβΫγϣϯ
    4τϥϯβΫγϣϯ
    ᶈͷΈͷࣦഊͰ͋Ε͹ ϩάΞ΢τॲཧ͸ࣦഊ͕ͩͦ
    ͷલͷ࡞ۀͰ͋Δ॓ധࢪઃͷ༧໿࡞ۀ͸੒ޭ͍ͯ͠Δ
    τϥϯβΫγϣϯͷྫ
    ΞϓϦέʔγϣϯαʔό ऴྃ

    View Slide

  41. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  42. σʔλϕʔε؅ཧγεςϜ
    • σʔλϕʔε؅ཧγεςϜ(DBMS)

    WebΞϓϦέʔγϣϯͷσʔλΛอଘ͢Δσʔλετ
    Ξ. ͱ͘ʹ, ؔ܎σʔλϕʔεͰ͸RDBMS(Relational
    DataBase Management System)͕༻͍ΒΕΔ
    ‣ ϑϦʔͷRDBMS͸͍͔ͭ͋͘Δ
    - MySQL
    - SQLite
    - PostgreSQL etc..
    MySQLΛྫʹॲཧͷྲྀΕΛݟͯΈΔ

    View Slide

  43. σʔλϕʔε؅ཧγεςϜ
    • MySQLͷ࢓૊Έ
    1. SQLจΛύʔε͢Δ

    σʔλΛऔಘ͢Δͷ͔, ૠೖ͢Δͷ͔ͳͲ
    2. ΦϓςΟϚΠβʹ͔͚Δ

    ݁߹ͷॱং౳Λߟྀͯ͠࠷దԽ͢Δ
    3. ετϨʔδΤϯδϯʹ౤͛ΔʢσʔλʹΞΫηεʣ

    ࣮ࡍͷσʔλ͕֨ೲ͞Ε͍ͯΔ৔ॴʹΞΫηε

    View Slide

  44. σʔλϕʔε؅ཧγεςϜ
    ίωΫγϣϯ
    εϨου
    ίωΫγϣϯ
    εϨου
    ίωΫγϣϯ
    εϨου
    ύʔαɾΦϓςΟϚΠβɾΞΫηε؅ཧͳͲ
    ετϨʔδΤϯδϯ"1*
    .Z*4". *OOP%# .Z42-ͳͲͷ
    ετϨʔδΤϯδϯ
    ετϨʔδϑΝΠϧ
    ΫϥΠΞϯτ͔ΒͷϦΫΤετ
    MySQL SELECT * FROM …

    View Slide

  45. σʔλϕʔε؅ཧγεςϜ
    • ετϨʔδΤϯδϯʹ΋ෳ਺ଘࡏ͢Δ
    ‣ InnoDB

    ݱࡏMySQLͷσϑΥϧτετϨʔδΤϯδϯ
    ‣ MyISAM

    ͔ͭͯMySQLͷσϑΥϧτͩͬͨ
    ‣ MEMORY

    ϝϞϦ্ʹσʔλΛετΞ͢ΔʢͷͰشൃੑʣ
    ‣ Blackhole

    Ұ੾σʔλΛه࿥͠ͳ͍ʢ͚Ͳϩά͸࢒͢ʣ

    View Slide

  46. σʔλϕʔε؅ཧγεςϜ
    • ࡢ೔ͷ໷Θ͔Βͳ͍ͳ͊ͬͯͣͬͱͭͿ΍͍ͯͨ

    View Slide

  47. σʔλϕʔε؅ཧγεςϜ
    • ͭͿ΍͍ͨΒฦ৴͕དྷͨ(Blackholeͷ࢖͍ํ)

    View Slide

  48. σʔλϕʔε؅ཧγεςϜ
    • ϦΞϧλΠϜੑ͕ཉ͍࣌͠ͷߏ੒

    View Slide

  49. σʔλϕʔε؅ཧγεςϜ
    • ৭ʑ͋ΔͷͰڵຯ͋ͬͨΒௐ΂ͯΈͯ
    ‣ MyISAM
    ‣ InnoDB
    ‣ MEMORY
    ‣ Federated
    ‣ BLACKHOLE
    ‣ ARCHIVE
    ‣ MySQL Cluster(NDB)

    View Slide

  50. σʔλϕʔε؅ཧγεςϜ
    • ίϛϡχςΟΤϯδϯ
    ‣ Tritonn
    ‣ SPIDER
    ‣ Q4M
    ‣ PBXT
    ‣ Percona XtraDB
    ‣ KickFire
    ‣ InfiniDB

    View Slide

  51. σʔλϕʔε؅ཧγεςϜ
    • DBαʔό

    RDBMSΛ౥ࡌͨ͠αʔόʢσʔλετΞʣ
    ‣ σʔλϕʔε͸ΞϓϦέʔγϣϯͷ৘ใΛอ͍࣋ͯ͠
    ΔͨΊ, ৴པੑ΍৑௕ੑΛߟྀͨ͠ߏ੒ʹ͢Δඞཁ͕
    ͋Δ
    - I/Oෛՙ͕ߴΊʹͳΔ఺΋ߟྀ͠ͳ͍ͱ͍͚ͳ͍
    ‣ DBαʔόͷεέʔϧΞ΢τ͸೉͍͠…

    View Slide

  52. σʔλϕʔε؅ཧγεςϜʢ৑௕Խʣ
    • อ࣋͢Δσʔλͷอશ͸ඇৗʹॏཁ
    ‣ ௨ৗDBαʔό͸৑௕Խߏ੒ΛऔΔ
    • ͔͠͠, DBαʔόͷ৑௕Խߏ੒͸೉͍͠
    ‣ ෳ਺୆Ͱߏ੒ͨ͠৔߹, ෳ਺୆ͰσʔλΛڞ༗͓ͯ͠
    ͘ඞཁ͕͋Δ
    ‣ ͨͩ͠සൟʹσʔλͷߋ৽͕ى͜ΔͨΊ, ͲͷΑ͏ʹ
    ڞ༗Λ͢Δ͔͕ॏཁ

    View Slide

  53. σʔλϕʔε؅ཧγεςϜʢ৑௕Խʣ
    • ৑௕Խͷํ๏͸ෳ਺͋Δ
    ‣ ϛϥʔϦϯά
    ‣ ϨϓϦέʔγϣϯ
    ‣ γΣΞʔυσΟεΫ

    View Slide

  54. σʔλϕʔε؅ཧγεςϜʢ৑௕Խʣ
    • ϛϥʔϦϯά

    ߋ৽໋ྩΛड͚ͨRDBMS͕ෳ਺ͷσʔλϕʔεʹରͯ͠ಉ࣌ʹಉ
    ͡ߋ৽Λߦ͏
    • ϨϓϦέʔγϣϯ

    ߋ৽໋ྩΛड͚ͨRDBMS͕ෳ਺ͷσʔλϕʔεʹରͯ͠ಉ͡ߋ৽
    Λߦ͏. λΠϛϯά͸ಉ࣌ͱ͸ݶΒͳ͍
    • γΣΞʔυσΟεΫ

    σʔλϕʔεΛڞ༻ͷετϨʔδʹ࣋ͪ, ෳ਺ͷDBαʔό͔ΒͦΕ
    Λߋ৽͢Δ

    View Slide

  55. σʔλϕʔε؅ཧγεςϜʢ৑௕Խʣ
    webαʔό APαʔό ϓϦϯγύϧʢਖ਼ʣ
    ϛϥʔʢ෭ʣ
    ߋ৽໋ྩ
    ߋ৽໋ྩ
    ฏৗ࣌͸ϓϦϯγύϧʹ໋ྩΛૹΓ
    ো֐ൃੜ࣌ʹ͸ϛϥʔʹ໋ྩΛૹΔ
    ϓϦϯγύϧ͕ߋ৽໋ྩΛड͚Δͱ
    ϛϥʔʹ΋ߋ৽໋ྩΛసૹ͢Δ
    ϛϥʔ%#.4͸ߋ৽໋ྩΛड͚ ϛϥʔ
    ͷσʔλϕʔεߋ৽Λߦͳ͏
    ฏৗ࣌ͷॲཧΛߦͳ͏ػثɿਖ਼ܥ
    ো֐࣌ʹਖ਼ܥʹ୅ΘͬͯॲཧΛߦ͏ػثɿ෭ܥor଴ػܥ
    ϛϥʔϦϯά

    View Slide

  56. σʔλϕʔε؅ཧγεςϜʢ৑௕Խʣ
    webαʔό APαʔό Ϛελʢਖ਼ʣ
    εϨʔϒʢ෭ʣ
    ߋ৽໋ྩ
    ฏৗ࣌͸Ϛελʹ໋ྩΛૹΓ ো֐ൃ
    ੜ࣌ʹ͸εϨʔϒʹ໋ྩΛૹΔ
    ߋ৽ͷ໋ྩ͸ϚελʹͷΈૹΒΕΔ
    ߋ৽͢Δͱ εϨʔϒʹ

    ߋ৽ϩάϑΝΠϧ͕ૹΒΕΔ
    ߋ৽ϩάͷ಺༰Λجʹ εϨʔϒͷσʔ
    λϕʔεͷߋ৽Λ೚ҙͷλΠϛϯάͰ
    ߦ͏
    Master-Slaveߏ੒ͷ৔߹, ߋ৽ʹಉظ/ඇಉظ͕ଘࡏ͢Δ.
    ϨϓϦέʔγϣϯ

    View Slide

  57. σʔλϕʔε؅ཧγεςϜʢ৑௕Խʣ
    webαʔό APαʔό ϚελʢBlackholeʣ
    εϨʔϒʢInnoDBʣ
    όΠφϦϩά
    ߋ৽໋ྩ
    ϚελͷετϨʔδΤϯδϯΛBlackhole͢Δ͜ͱͰ,
    INSERT͕ଟ͍Α͏ͳαʔϏεʹ࠷దԽ͢Δ͜ͱ΋
    ϨϓϦέʔγϣϯ

    View Slide

  58. σʔλϕʔε؅ཧγεςϜʢ৑௕Խʣ
    webαʔό APαʔό DBMS
    ϛϥʔʢ෭ʣ
    ߋ৽໋ྩ
    ߋ৽໋ྩ
    ໋ྩ͸Ͳͷ%#.4Ͱ΋ྑ͍
    γΣΞʔυσΟεΫͷ%#.4ʹ͸
    ਖ਼෭ͷ֓೦͸ͳ͍
    γΣΞʔυσΟεΫ
    DBMS
    σʔλετϨʔδ
    σʔλϕʔε͸৑௕Խ
    ͞Εͳ͍ͷͰରো֐ੑ
    ͷڧ͍෺ΛબͿ
    DBMS ऴྃ

    View Slide

  59. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  60. Ωϟογϡαʔό
    • ϦΫΤετ਺͕૿͑Δͱ, ίϯςϯπͷಡΈग़͠(I/O)΍
    ॲཧ͕ແࢹͰ͖ͳ͍Ϩϕϧʹͳͬͯ͘Δ
    ‣ ϨεϙϯελΠϜͷ௿ԼΛট͘
    • ίϯςϯπΛΩϟογϡͤ͞Δ͜ͱͰ, ස౓ͷߴ͍΋ͷ
    ΍αΠζ͕େ͖͍΋ͷʹؔͯ͠ߴ଎ʹϨεϙϯεΛฦ͢
    ͜ͱ͕ग़དྷΔ
    ‣ Ωϟογϡαʔόʔ͕ͦͷ໾ׂΛ୲͏

    View Slide

  61. Ωϟογϡαʔό
    • Ωϟογϡ

    ϦΫΤετʹର͢ΔϨεϙϯεͷهԱ
    ‣ ίϯςϯπΩϟογϡ

    จॻ΍ը૾, ಈըͱ͍ͬͨίϯςϯπͷΩϟογϡ
    ‣ ΫΤϦΩϟογϡ

    DBMSͷσʔλݕࡧཁٻʢΫΤϦʣͷ݁ՌͷΩϟο
    γϡ

    View Slide

  62. Ωϟογϡαʔό
    ίϯςϯπ
    Ωϟογϡαʔό
    Webαʔό
    هԱͯ͠ͳ͍ϦΫΤετ͸ͦͷཁٻΛ
    8FCαʔόʹసૹ͢Δ
    هԱ͍ͯ͠ΔϦΫΤετ͕དྷͨ৔߹ 8FC
    αʔόͷ୅ΘΓʹϨεϙϯεΛฦ͢
    ϦΫΤετͱ8FCαʔόͷϨεϙϯεͷ
    ૊Έ߹ΘͤΛهԱ͓ͯ͘͠
    ϒϥ΢β
    ίϯςϯπΩϟογϡαʔό

    View Slide

  63. Ωϟογϡαʔό
    هԱ͍ͯ͠ͳ͍ΫΤϦͷ৔߹͸ͦͷ··
    %#.4ʹసૹ
    "1αʔό͔Βͷσʔλݕࡧཁٻͱ%#.4
    ͷϨεϙϯεͷ૊Έ߹ΘͤΛΩϟογϡ
    ΫΤϦΩϟογϡαʔό
    Webαʔό APαʔό
    ΫΤϦ
    Ωϟογϡαʔόʔ
    DBαʔό
    WebγεςϜ

    View Slide

  64. ΩϟογϡαʔόʢΩϟογϡͷ༗ޮظݶʣ
    • Ωϟογϡ͸଎౓ΛಘΔͨΊʹඞཁͳٕज़
    • ͔͠͠, ίϯςϯπ͕Ξοϓσʔτ͞Εͨ৔߹, Ωϟο
    γϡͷ༗ޮظݶ͕௕͍ͱ͍ͭ·ͰͷچϑΝΠϧ͕഑৴
    ͞Εͯ͠·͏
    ‣ ༗ޮظݶΛద੾ʹઃఆ͢Δ͜ͱͰ, ҰఆִؒͰΩϟο
    γϡ಺༰ΛΞοϓσʔτ͢Δඞཁ͕͋Δ
    ‣ ͦͷͨΊͷHTTP ETag

    View Slide

  65. ΩϟογϡαʔόʢCDNʣ
    • ಥવͰ͕͢, ϓϩάϥϚ͕஌Δ΂͖ϨΠςϯγͰ͢
    Ҿ༻ɿhttps://speakerdeck.com/fujiwara3/isucon-summer-school-1

    View Slide

  66. ΩϟογϡαʔόʢCDNʣ
    • CDN(Contents Delivery Network)

    ੈք֤஍ʹ഑ஔ͞ΕͨΩϟογϡαʔόͷू߹ମ
    ‣ ೔ຊ͔Β഑৴͢Δͷʹ೔ຊʹ͚ͩΩϟογϡαʔόΛ
    ஔ͍͍ͯͯ͸, ࠃ֎͔ΒͷΞΫηε͸஗͘ͳΔ
    ‣ ੈքதʹΩϟογϡαʔόΛ෼ࢄͯ͠഑ஔ͢Δ͜ͱ
    Ͱ, Ͳ͔͜ΒΞΫηεͯ͠΋͋Δఔ౓ߴ଎ʹ

    View Slide

  67. ΩϟογϡαʔόʢCDNʣ
    • CDNͷ༗໊ͳαʔϏε
    ‣ CloudFront(Amazon)
    ‣ CloudFlare
    ‣ Akamai
    CloudFrontͷωοτϫʔΫʢҾ༻ɿhttps://aws.amazon.com/jp/cloudfront/details/ʣ

    View Slide

  68. ΩϟογϡαʔόʢCDNʣ
    • ΞΫηε͢Δͱࣗ෼ʹҰ൪͍ۙCDN͔Βμ΢ϯϩʔυ
    ͢Δ͜ͱͰߴ଎ʹͳΔ
    • ͜ͷลͷ࿩͸લεϥΠυʹॻ͍ͨ

    https://speakerdeck.com/bath_poo_/introduction-to-
    large-scale-web-service-15
    CDN ऴྃ

    View Slide

  69. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  70. Ajax
    • ಉظ௨৴

    ΫϥΠΞϯτͱαʔό͕ަޓʹ௨৴Λߦ͍, ಉௐͯ͠௨
    ৴Λߦ͏͜ͱ
    ‣ ಡΈࠐΈ͕ऴΘΔ·ͰଞͷॲཧΛߦ͑ͳ͍ʢ଴ͭ͜
    ͱ͔͠Ͱ͖ͳ͍ʣ

    View Slide

  71. Ajax
    • Ajax(Asynchronous JavaScript + XML)

    ΫϥΠΞϯτͷJavaScript͕௚઀Webαʔόͱ௨৴Λߦ
    ͍, σʔλΛऔಘͯ͠ඳը͢ΔඇಉظॲཧͷΠϯλ
    ϑΣʔε
    ‣ ͍͍ͪͪϖʔδΛϦϩʔυ͠ͳͯ͘΋, มߋ͍ͨ͠෦
    ෼͚ͩΛAjaxΛ࢖ͬͯ࠶ඳը͢Δ͜ͱ͕Ͱ͖Δ

    View Slide

  72. Ajax
    ϦΫΤετ
    ߋ৽ʹඞཁͳσʔλͱϦΫΤετΛૹ৴
    Ϩεϙϯε଴ͪͷؒ͸ଞͷՕॴͷ
    දࣔߋ৽΍Ϣʔβʔͷૢ࡞ड෇͕Մೳ
    HTMLશମͷ࡞੒ΑΓ
    ॲཧ͕গͳΊ
    Ϩεϙϯε
    HTMLશମΛฦ͢ΑΓ
    αΠζ͸খ͞Ί

    View Slide

  73. Ajax
    • Ajaxʹ࢖༻͞Ε͍ͯΔٕज़
    ‣ HTML

    WebϖʔδΛهड़͢ΔͨΊͷݴޠ
    ‣ JavaScript

    JavaScriptͷXMLHttpRequestΦϒδΣΫτΛ࢖༻
    ‣ DHTML

    ΫϥΠΞϯτεΫϦϓτͰϖʔδΛಈతʹมߋ͢Δ΢Σϒٕ
    ज़Λࢦ͢ந৅֓೦
    ‣ DOM

    HTML΍XMLΛѻ͏ͨΊͷAPI
    Ajax ऴྃ

    View Slide

  74. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  75. Web API
    • WebAPI(Web Application Program Interface)

    WebΛ௨ͯ͡ϓϩάϥϜ͕௚઀αʔϏεΛར༻͢Δͨ
    ΊͷΠϯλʔϑΣʔε
    ར༻ঢ়گ WebAPIͷURL΁
    σʔλΛૹ৴
    ॲཧ݁Ռ
    WebAPIͷURL΁
    σʔλΛૹ৴
    ॲཧ݁Ռ
    Webαʔό
    8FC"1*
    APαʔό

    View Slide

  76. Web API
    • Web APIͷྫ
    ‣ Ң౓ͱܦ౓Λૹ৴͢Δͱ, ରԠ͢Δ৔ॴͷఱؾ༧ใ͕
    ฦ৴͞ΕΔఱؾ༧ใAPI(Weather Hacksͱ͔)
    ‣ ϩάΠϯ৘ใͱจষΛૹ৴͢Ε͹, จষΛϙετ͢Δ
    ͜ͱ͕ग़དྷΔ(Twitterͱ͔)
    ‣ σʔλΛૹΔͱ෼ੳͨ݁͠ՌΛฦͯ͘͠ΕΔ(Watson
    API)

    View Slide

  77. Web API
    • Web APIͷ΍ΓऔΓʹ͸༷ʑͳํ๏͕࢖ΘΕΔ
    ‣ XML-RPCʢϓϩτίϧʣ

    XMLͰූ߸Խͯ͠ॲཧͷ࣮ߦΛཁٻ͢Δ
    ‣ SOAPʢϓϩτίϧʣ

    XML-RPCΛ֦ுͨ͠ߴػೳͳϓϩτίϧ
    ‣ RESTʢઃܭࢥ૝ʣ

    Web্ͷϦιʔεΛҰҙͳURLͰදͯ͠, ࢖༻͢Δϝ
    ιουʹΑͬͯڍಈΛม͑ΔΞϨʢલʹ΍ͬͨʣ

    View Slide

  78. Web API(XML-RPCͷྫ)


    examples.getStateName


    40



    XML-RPCϦΫΤετ
    XML-RPCϨεϙϯε




    South Dakota



    View Slide

  79. Web API(SOAPͷྫ)
    SOAPϦΫΤετ
    SOAPϨεϙϯε



    827635







    Toptimate 3-Piece Set
    827635
    3-Piece luggage set. Black Polyester.
    100.50
    true




    View Slide

  80. Web API(RESTͷࢥ૝(෮श))
    • RESTful(REpresentational State Transfer)

    4ͭͷݪଇ͔ΒͳΔγϯϓϧͳઃܭͷ͜ͱ
    1. εςʔτϨε

    ΍ΓऔΓ͸1ճ͝ͱʹ׬݁. ଞͷ΍ΓऔΓʹӨڹ͠ͳ͍.
    2. ΞυϨεՄಡੑ

    ͢΂ͯͷϦιʔε͕ҰҙͳURIͷߏจͰදݱՄೳ
    3. ౷ҰΠϯλʔϑΣʔε

    HTTPϝιουͷར༻͕౷Ұ͞Ε͍ͯΔ
    4. ઀ଓੑ

    ΍ΓऔΓ͞ΕΔ৘ใʹϦϯΫΛؚΊΔࣄ͕Ͱ͖Δ

    View Slide

  81. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  82. CGI
    • CGI(Common Gateway Interface)

    ΫϥΠΞϯτ͔ΒͷཁٻʹԠͯ͡αʔόʔαΠυεΫϦ
    ϓτΛىಈ͢ΔͨΊͷ࢓૊Έ
    ‣ ϦΫΤετʹԠͯ͡༧Ί༻ҙ͞Ε͍ͯΔϓϩάϥϜΛ
    ࣮ߦ͠, ͦͷ࣮ߦ݁ՌΛฦ͢

    View Slide

  83. CGI
    8FCαʔό
    ίϯςϯπ
    $(*ϓϩάϥϜ
    ಡΈࠐΈ
    ϓϩάϥϜͷىಈ
    ࣮ߦ݁Ռ
    ϦΫΤετ
    Ϩεϙϯε
    w $(*΁ͷϦΫΤετ

    $(*ϓϩάϥϜͷಈ࡞݁Ռ
    w ͦΕҎ֎

    63-ʹରԠ͢Δίϯςϯπ
    Λฦ৴
    DHJCJOϑΥϧμ֎ͷϑΝΠϧ΍
    ֦ுࢠ͕DHJͰͳ͍ϑΝΠϧ
    DHJCJOϑΥϧμʹ͋Δ֦ுࢠ
    ͕DHJͰ͋ΔϑΝΠϧΛ$(*ϓ
    ϩάϥϜͱΈͳ͢
    %JSFDUPSZDHJCJO
    0QUJPOT&YFD$(*

    "EE)BOEMFSDHJTDSJQUDHJ
    %JSFDUPSZ
    DHJCJOϑΥϧμ಺ʹ͋Δ֦ுࢠ
    ͕DHJͰ͋ΔϑΝΠϧ

    View Slide

  84. CGI
    • ΫϥΠΞϯτ͕ΤϯυϙΠϯτ(CGIͷURL)ʹΞΫηε͢
    Δ͜ͱͰର৅ͷϓϩάϥϜ͕ىಈ͢Δ
    • ϓϩάϥϜʹσʔλΛ౉͢͜ͱ͕ग़དྷΔ
    ‣ ίϚϯυϥΠϯҾ਺౉͠

    URLͷ຤ඌʹ?Λ෇͚ͯσʔλΛ+۠੾ΓͰ෇Ճ͢Δํ๏
    ‣ ύε౉͠

    URLͷޙΖʹʮ/ʯͰ۠੾ͬͯσʔλΛฒ΂Δํ๏
    ‣ GET, POSTϝιουΛ࢖͏

    View Slide

  85. CGI
    8FCαʔό $(*ϓϩάϥϜ
    σʔλΛ౉ͯ͠
    ϓϩάϥϜͷىಈ
    http://example.com/program.cgi?
    σʔλ1+σʔλ2
    ίϚϯυϥΠϯҾ਺౉͠
    8FCαʔό $(*ϓϩάϥϜ
    σʔλΛ౉ͯ͠
    ϓϩάϥϜͷىಈ
    http://example.com/program.cgi/
    σʔλ1/σʔλ2
    ύε౉͠
    ىಈ࣌ʹσʔλΛอ͍࣋ͯ͠Δ
    ىಈޙʹ1"5)@*/'0͔Βऔಘ

    View Slide

  86. CGI
    8FCαʔό $(*ϓϩάϥϜ
    σʔλΛ౉ͯ͠
    ϓϩάϥϜͷىಈ
    http://example.com/program.cgi?
    σʔλ໊1=σʔλ1
    GETϝιου
    8FCαʔό $(*ϓϩάϥϜ
    σʔλΛ౉ͯ͠
    ϓϩάϥϜͷىಈ
    http://example.com/program.cgi/
    POSTϝιου
    ىಈޙ ม਺26&3:@453*/(

    ͔ΒσʔλΛऔಘ
    ىಈޙผʹૹΒΕ͖ͯͨ

    σʔλΛಡΈࠐΉ TUEJO

    View Slide

  87. ໨࣍
    1. WebΞϓϦέʔγϣϯͷ3૚ߏ଄
    2. MVCϞσϧ
    3. Webαʔό
    4. ΞϓϦέʔγϣϯαʔό
    5. σʔλϕʔε؅ཧγεςϜ
    6. Ωϟογϡαʔό
    7. Ajax
    8. Web API
    9. CGI
    10.αʔόؒͷ࿈ܞ

    View Slide

  88. αʔόؒͷ࿈ܞ
    • CGIΛར༻ͤͣʹαʔόʔαΠυεΫϦϓτΛىಈ͢Δ৔
    ߹͸, ֤αʔό͸αʔόʹ΋ΫϥΠΞϯτʹ΋ͳΓ͏Δ
    ‣ Webαʔό͕APαʔόʹσʔλͷॲཧΛґཔ
    ‣ APαʔό͕αʔόʔαΠυεΫϦϓτΛ࣮ߦ
    Webαʔό APαʔό DBαʔό
    αʔό
    ΫϥΠ
    Ξϯτ
    αʔό
    ΫϥΠ
    Ξϯτ
    αʔό
    αʔϏεཁٻ
    σʔλ
    ॲཧґཔ
    σʔλ
    ݕࡧɾߋ৽

    View Slide

  89. αʔόؒͷ࿈ܞ
    • αʔόಉ࢜ͷ௨৴ʹ͓͍ͯ΋, ϦΫΤετΛૹ৴͢Δଆ
    ͕ΫϥΠΞϯτ, ϨεϙϯεΛฦ͢ଆ͕αʔό
    ‣ APαʔό΍DBαʔόʹରͯ͠༧Ίઃఆͨ͠ϙʔτΛ
    ࢦఆ͠௨৴
    ‣ ಉ͡αʔόʔ಺Ͱ͋Ε͹127.0.0.1(localhost)

    View Slide

  90. αʔόؒͷ࿈ܞ
    ػث͕ҟͳΔ৔߹
    Webαʔό
    ip-addr : 127.18.1.100
    172.18.1.150ͷ8009ϙʔτʹ઀ଓ
    APαʔό
    ip-addr : 127.18.1.150
    port : 8009
    ػث͕ҟͳΔ৔߹
    Webαʔό
    127.18.1.100ͷ8009ϙʔτʹ઀ଓ
    APαʔό
    port : 8009
    ip-addr : 127.18.1.100
    localhostͷ8009ϙʔτʹ઀ଓ

    View Slide

  91. αʔόؒͷ࿈ܞʢར༻͢Δϓϩτίϧʣ
    • WebαʔόͱAPαʔόͷ࿈ܞʹ࢖ΘΕΔن֨
    ‣ HTTP
    ‣ AJP(Apache Jserv Protocol)

    ApacheͱTomcat(JSPͷ࣮ߦίϯςφʣͷ࿈ܞʹ࢖Θ
    Ε͍ͯΔ
    ‣ WebSocket

    ΫϥΠΞϯτͱαʔόؒͰ1౓઀ଓΛཱ֬ͨ͠ޙ, σʔ
    λͷ΍ΓऔΓΛιέοτ௨৴Ͱߦ͏΋ͷʢϦΞϧλΠ
    Ϝੑ͕ߴ͍ʣ

    View Slide

  92. αʔόؒͷ࿈ܞʢར༻͢Δϓϩτίϧʣ
    • APαʔόͱDBαʔό͸Ͳ͏͢Δͷ͔
    ‣ ODBC(Open DataBase Connectivity)

    DBMSຖͷҧ͍Λٵऩ͠, ڞ௨ͷίʔυͰσʔλϕʔ
    εʹΞΫηε͢ΔͨΊͷن֨
    - ODBCυϥΠόΛ࢖͏͜ͱͰ࣮ݱ
    0%#$υϥΠό
    APαʔό DBαʔό
    ODBCυϥΠόΛར༻༷ͯ͠ʑͳ

    DBMSͷಠࣗن֨ʹରԠ
    ಠࣗϓϩτίϧͰ௨৴

    View Slide

  93. ࢀߟαΠτ౳

    View Slide

  94. ࢀߟαΠτ
    • MySQLೖ໳ɹϨϓϦέʔγϣϯฤ

    https://qiita.com/Tocyuki/items/c224cef57493f536a94
    • Ajax Introduction

    https://www.w3schools.com/js/js_ajax_intro.asp
    • Ajaxͷ঺հʢݹΊʣ

    https://www.ibm.com/developerworks/jp/web/library/wa-
    ajaxintro1.html
    • XML-RPC

    https://ja.wikipedia.org/wiki/XML-RPC
    • SOAP

    https://ja.wikipedia.org/wiki/
    SOAP_(%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%
    83%AB)

    View Slide

  95. ࢀߟαΠτ
    • MySQL ӡ༻+؅ཧ τϥϒϧγϡʔςΟϯάΨΠυ

    http://gihyo.jp/book/2010/978-4-7741-4294-4
    • ήʔϜΤϯδχΞͷͨΊͷσʔλϕʔεઃܭ

    https://www.slideshare.net/sairoutine/ss-62485460

    View Slide