Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Web技術の基本 6回目 / Introduction to Web technologies...
Search
muttan
April 13, 2018
Technology
1
230
Web技術の基本 6回目 / Introduction to Web technologies 6th class
muttan
April 13, 2018
Tweet
Share
More Decks by muttan
See All by muttan
さわやか待ち時間LINE botを作った話 / Sawayaka LINE bot
bath_poo_
0
100
コンテナ開発入門 1回目/Introduction to Container Development 1
bath_poo_
0
140
ISUCONってなんだ / What is ISUCON
bath_poo_
0
320
Web技術の基本 8回目 / Introduction to Web technologies 8th class
bath_poo_
0
170
Web技術の基本 7回目 / Introduction to Web technologies 7th class
bath_poo_
0
140
Web技術の基本 5回目 / Introduction to Web technologies 5th class
bath_poo_
0
110
Web技術の基本 4回目 / Introduction to Web technologies 4th class
bath_poo_
0
200
Web技術の基本 3回目 / Introduction to Web technologies 3rd class
bath_poo_
0
230
Web技術の基本 2回目 / Introduction to Web technologies 2nd class
bath_poo_
0
240
Other Decks in Technology
See All in Technology
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
120
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
180
UI State設計とテスト方針
rmakiyama
2
640
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
0
150
生成AIのガバナンスの全体像と現実解
fnifni
1
190
TSKaigi 2024 の登壇から広がったコミュニティ活動について
tsukuha
0
160
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
540
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
5分でわかるDuckDB
chanyou0311
10
3.2k
権威ドキュメントで振り返る2024 #年忘れセキュリティ2024
hirotomotaguchi
2
760
MLOps の現場から
asei
7
650
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
Navigating Team Friction
lara
183
15k
GraphQLとの向き合い方2022年版
quramy
44
13k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
It's Worth the Effort
3n
183
28k
How GitHub (no longer) Works
holman
311
140k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Transcript
Webٕज़ͷجຊ 6ճ Keisuke KAMIYA
ࠓճͷςʔϚ
Chapter 5 WebΞϓϦέʔγϣϯͷجຊ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ ※͕͢͞ʹ͔ΔͰ͠ΐͬͯॴΧοτͯ͠·͢
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
WebΞϓϦέʔγϣϯͷ3ߏ • WebΞϓϦέʔγϣϯ ωοτϫʔΫΛհͯ͠Webϒϥβ্Ͱಈ࡞͢ΔΞϓ Ϧέʔγϣϯ • WebΞϓϦέʔγϣϯ, 3ߏͰӡ༻͞Ε͍ͯΔࣄ ͕ଟ͍ ‣
ϓϨθϯςʔγϣϯ(Webαʔό) ‣ ΞϓϦέʔγϣϯ(APαʔό) ‣ σʔλ(DBαʔό)
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ ΞϓϦέʔγϣϯ σʔλ ϓϨθϯςʔγϣϯ Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό)
Ϣʔβʔͷදࣔ Ϣʔβʔ͔Βͷૢ࡞ड 8FCαʔό͔Βͷ ໋ྩ࣮ߦ ը໘ͷੜ σʔλͷநग़ ߋ৽ ิؒ
WebΞϓϦέʔγϣϯͷ3ߏ • 3ΞʔΩςΫνϟͰߏ͢Δར 1ͭͷαʔόͰશͯΛ͏ΑΓ, ෛՙࢄ(εέʔϧΞ τ)͍͢͠ ‣ εέʔϧΞτ ಉ͡ػೳΛఏڙ͢ΔαʔόΛෳ༻ҙͯ͠, ϦΫΤ
ετΛదʹৼΓ͚ΔΑ͏ͳߏ
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ 8FCαʔό "1αʔό %#αʔό ͭͷαʔόʹશͯΛஔͨ͠߹ WebαʔόɿϦΫΤετʹൺྫͯ͠ෛՙ͕૿Ճ APαʔόɿॲཧ͕ෳࡶʹͳΔͱෛՙ͕૿Ճ DBαʔόɿσʔλྔ͕ଟ͍ͱෛՙ͕૿Ճ
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ 8FCαʔό "1αʔό %#αʔό ΞʔΩςΫνϟͷ߹ ͦΕͧΕͷαʔό͕ಠཱͯ͠ಈ࡞͍ͯ͠Δ →ͦΕͧΕΛϦΫΤετঢ়گʹԠͯ͡૿ݮՄೳʹ ྫ) ϦΫΤετ͕ଟ͘ͳͬͨΒWebαʔόΛεέʔϧͤ͞Δ
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ ΞʔΩςΫνϟͷ߹ Webαʔό APαʔό DBαʔό ϦΫΤετ
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ ΞʔΩςΫνϟͷ߹ Webαʔό APαʔό DBαʔό ϦΫΤετ Webαʔό͕མͪΔͱԠ Ͱ͖ͳ͘ͳΔ
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ ΞʔΩςΫνϟͷ߹ Webαʔό APαʔό DBαʔό ϦΫΤετ ϦΫΤετΛॲཧ͢ΔͨΊʹ WebαʔόΛ૿͢
WebΞϓϦέʔγϣϯͷ3ߏ • 3ΞʔΩςΫνϟͰ͋Ε, WebαʔόͱAPαʔόͱ DBαʔό͕ಠཱ͍ͯ͠ΔͨΊ, ͦΕͧΕͷͷௐʢε έʔϧΞτʣ͕Γ͍͢ ‣ 1ͭͷϚγϯʹશͯͷαʔόΛཱͯͯ͠·͏ͱ, Web
αʔόΛ૿ͨͯ͘͠, ୯ମͰ૿͢͜ͱ͕ෆՄೳ ‣ Ұൠʹ, DBαʔόͷεέʔϧΞτ͍͠ - աڈʹॻ͍ͨεϥΠυʹ৭ʑ͔͍ͯ͋ΔΑ
WebΞϓϦέʔγϣϯͷ3ߏ • ͦΕͧΕͷ͕ಠཱ͍ͯ͠ΔͷͰ, վमൣғΛ੍ݶ͢Δ ͜ͱ͕Մೳ WebγεςϜ ΞϓϦέʔγϣϯ σʔλ ϓϨθϯςʔγϣϯ Webϒϥβ
(ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό) ϨΠΞτΛมߋ͚ͨ͠Ε 8FCαʔόͷΈ͍͡Εྑ͍
WebΞϓϦέʔγϣϯͷ3ߏ • ΞϓϦέʔγϣϯͷنʹΑͬͯ, దͳΞʔΩςΫ νϟΛ࠾༻͢Δ͖ • େنͳαʔϏεͰ༗ޮ͕ͩ, ݸਓతͳখ͞ͳͷͰ 3ΞʔΩςΫνϟΛ࠾༻͢Δͷ͕ϕετͱݶΒͳ͍ ‣
αʔό͕3͋Δͱ͍͏͜ͱ, 3ͭͷཧίετ͕ ͔͔Δͱ͍͏͜ͱʹͳΔ WebΞϓϦέʔγϣϯͷ3ߏ ऴྃ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
MVCϞσϧ • MVCϞσϧ WebΞϓϦέʔγϣϯͷσβΠϯύλʔϯͷҰछ ‣ M(Model) σʔλʹؔ͢ΔॲཧΛߦ͏ ‣ V(View) Ϣʔβʔͷग़ྗॲཧ
‣ C(Controller) Ϣʔβʔ͔ΒͷϦΫΤετΛड͚ͯ, ModelView ॲཧΛৼΓ͚Δ
MVCϞσϧ $POUSPMMFS 7JFX .PEFM ॲཧ໋ྩ σ ʔ λ ͷ ද
ࣔ ໋ ྩ ྃ Ԡ දࣔσʔλ σ ʔ λ ͷ ॲ ཧ ໋ ྩ ྃ Ԡ σʔλཁٻ ը໘දࣔ σʔλॲཧ໋ྩͷྲྀΕ σʔλද໋ࣔྩͷྲྀΕ 7JFXͱ.PEFMʹࢦࣔ ग़ྗ දࣔ Λ୲ σʔλॲཧ
MVCϞσϧ • ͜ͷΑ͏ʹ͢Δͱ, MVCϞσϧͬͯ3ΞʔΩςΫνϟ ͱࠞಉ͢Δਓ͕͍Δ ‣ 3ΞʔΩςΫνϟͱMVCҟͳΔ֓೦ ‣ ߏͱ͍͏ͷ, ྡΓ߹ͬͨಉ࢜ͰͷΈΓऔΓ
Λ͢Δ - ϓϨθϯςʔγϣϯͱσʔλΓऔΓ͠ͳ ͍ ‣ MVCϞσϧͷ߹, ͯ͢ͷʹ͕ؔ͋Δ
MVCϞσϧ WebγεςϜ ΞϓϦέʔγϣϯ σʔλ ϓϨθϯςʔγϣϯ Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό)
Controller View Model ΞϓϦέʔγϣϯ
MVCϞσϧ • MVCϞσϧͷར ‣ 3ΞʔΩςΫνϟʔಉ༷ʹ, ։ൃվमͷൣғ͕໌ ֬ʹͳΔ - ֤ཁૉ͕ผΕ࣮ͯ͞Ε͍ͯΔͨΊ, ଞͷՕॴͷ
Өڹ͕গͳ͍ - Օॴͷಛఆ͕ൺֱత༰қ MVCϞσϧ ऴྃ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Webαʔό • Webαʔό WebΫϥΠΞϯτ͔ΒͷϦΫΤετΛड͚औΔαʔό Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό) ↑͜͜
Webαʔό • ϦΫΤετͷ༰ʹΑͬͯॲཧΛม͑Δ ‣ css, js͕ϦΫΤετ͞Εͨ߹ʢ੩తϑΝΠϧʣ Webαʔό͕ϑΝΠϧΛฦ͢ ‣ ಈతॲཧ͕ඞཁͳͷ APαʔόʹॲཧΛґཔ͢Δ
Webαʔό APαʔό ϦΫΤετ ಈతॲཧͷґཔ ಈతϖʔδͷ సૹ ίϯςϯπͷ సૹ ੩తϑΝΠϧ ͜͜Ͱฦ͢
Webαʔό • WebαʔόϦΫΤετΛड͚͚ͭΔ૭ޱ ‣ Webαʔό͕ࢮ͵ͱαʔϏε͕ఀࢭͯ͠͠·͏ • ͜ͷΑ͏ͳࣗମΛආ͚ΔͨΊ, ௨ৗWebαʔόΛෳ ༻ҙͯ͠ԽΛߦ͍ͬͯΔ ‣
1ͩͱ1ࢭ·ΔͱશͯऴΘΓ͕ͩ, Կ͔Քಇͯ͠ ͍ΕͳΜͱ͔αʔϏεΛܧଓͰ͖Δ
Webαʔό APαʔό αʔό͕ނোͯ͠ผͷαʔόΛ ͬͯαʔϏεܧଓ Webαʔό ΫϥΠΞϯτ ͨͩ͠, WebαʔόͦΕͧΕಉ͡ ίϯςϯπΛ͍࣋ͬͯΔඞཁ͕͋Δ ଓෆՄ
Webαʔό • ར༻ऀ͕ଟ͚Εଟ͍΄ͲϦΫΤετ૿Ճ ‣ ར༻ऀ͕ଟͯ͘Ϩεϙϯεͨ͘͘͠ͳ͍ • ݱঢ়Webαʔό͕ͲͷΑ͏ͳঢ়ଶͰ͋Δ͔Λਪଌͤͣ ʹܭଌ͢Δ͖ ‣ I/O͕ϘτϧωοΫͳͷ͔CPUͳͷ͔
- Don't guess! Measure! - "premature optimization is the root of all evil." (ૣ ͗͢Δ࠷దԽॾѱͷࠜݯ)
Webαʔό • WebαʔόΛεέʔϧΞτ͢Δࡍ, શͯͷWebαʔ όʹಉ͡ίϯςϯπΛஔ͘ඞཁ͕͋Δ • ผʹϑΝΠϧ༻ͷαʔόΛ༻ҙ͢Δํ๏͋Δ ‣ ίϯςϯπͷಉظෆཁʹͳΔ͕, αʔόؒͷ௨৴͕
ൃੜ͠Ϩεϙϯε͕Լ͢Δ ϑΝΠϧΛஔ͍ͨαʔό Φʔόʔϔου͕ൃੜ Webαʔό Webαʔό Webαʔό ऴྃ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
ΞϓϦέʔγϣϯαʔό • ΞϓϦέʔγϣϯαʔό(APαʔό) ࣮ࡍͷWebΞϓϦέʔγϣϯͷॲཧΛߦ͏ϓϩάϥϜ Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό) ↑͜͜
ΞϓϦέʔγϣϯαʔό • Webαʔό͔Βసૹ͞Ε͖ͯͨσʔλΛجʹ, σʔλ ϕʔεͷݕࡧՃΛߦ͍ԠΛฦ͢ ‣ 3ΞʔΩςΫνϟʹ͓͚ΔΞϓϦέʔγϣϯʹҐ ஔ͢Δαʔό ‣ ϓϨθϯςʔγϣϯͱσʔλͱͷհ
‣ CPUෛՙ͕ߴ͘ͳΓ͕ͪ
ΞϓϦέʔγϣϯαʔόʢηογϣϯཧػೳʣ • Ҏલʹͨ͠ηογϣϯͷཧΛߦ͍ͬͯΔ ‣ ؔ࿈ͷ͋Δ1࿈ͷॲཧͷ։͔࢝Βऴྃ·Ͱͷશظؒ ૹ৴ଆ ड৴ଆ ΛબͿ OK ങ͍͔͝ʹೖΕΔ
OK ങ͍͔͝ͷதΛ֬ೝ OK ܾࡁ OK ηογϣϯ
ʢ෮शʣηογϣϯ • ෳͷΫϥΠΞϯτ͔ΒΞΫηε͞ΕΔWebαʔό, ηο γϣϯΛͲͷΑ͏ʹཧ͢Δͷ͔ʁ ‣ CookieΛ༻͍ͯηογϣϯΛཧ͢Δ ‣ Cookie͕͑ͳ͍߹URLʹؚΊΔͱ͖͋Δ͕, ηΩϡ
ϦςΟͷ໘͔Βਪ͞Εͳ͍ํ๏Ͱ͋Δ • ηογϣϯཧʹ͓͍ͯ, WebϒϥβΛࣝผ͢ΔͨΊͷࣝผ ࢠ(id)ΛηογϣϯIDͱݺͿ ‣ ηογϣϯIDWebαʔόͰੜ͞Ε, CookieʹؚΊͯWeb ϒϥβʹૹ৴͞ΕΔ
ʢ෮शʣηογϣϯ 4*%BBBBBB 4*%CCCCCC webαʔό webϒϥβB webϒϥβA ηογϣϯ*% Ϣʔβʔ ϩάΠϯ ങ͍͔͝
BBBBBB TBUP 536& Ξλʔº γϟπº CCCCCC HVFTU '"-4& γϡʔζº දɿWebαʔό͕อଘ͍ͯ͠Δηογϣϯσʔλ
ʢ෮शʣηογϣϯ • ηογϣϯIDΛड͚औͬͯҎ߱, ϦΫΤετϔομʹ ηογϣϯIDΛؚΊͯૹ৴͢Δ͜ͱͰ, Webαʔόͱͷ ηογϣϯΛҡ࣋͢Δ͜ͱ͕ग़དྷΔ. • ʮങ͍͔͝ʹͳʹΛ͍Ε͔ͨʯͱݴͬͨใ, ηο
γϣϯIDͱඥ͍ͯʮηογϣϯσʔλʯͱͯ͠αʔό ʹอଘ͞ΕΔ.
ʢ෮शʣηογϣϯ 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ͷύϥϝʔλͱͯ͠ૹ৴
ΞϓϦέʔγϣϯαʔόʢηογϣϯཧػೳʣ • HTTPεςʔτϨεͳϓϩτίϧͳͷͰ, ηογϣϯͳ ͲΛΘͳ͍ͱεςʔτϑϧͳॲཧΛߦ͑ͳ͍ • APαʔό͕ηογϣϯIDΛൃߦ͠, ͦΕΛجʹΫϥΠΞ ϯτͱΓऔΓ͢Δ͜ͱͰ1ͭͷηογϣϯͱͯ͠ཧ
ΞϓϦέʔγϣϯαʔόʢτϥϯβΫγϣϯཧػೳʣ • τϥϯβΫγϣϯ ηογϣϯதͰߦΘΕΔؔ࿈ͨ͠Ұ࿈ͷ࡞ۀ ‣ ෳͷॲཧͷ1ͭ1ͭHTTPϦΫΤετͰΓཱͬͯ ͍ΔͨΊ, ͜ΕΒΛ1ͭͷτϥϯβΫγϣϯͱͯ͠·ͱ Ί͍ͯΔ
ΞϓϦέʔγϣϯαʔόʢτϥϯβΫγϣϯཧػೳʣ ᶃϩάΠϯ ᶄີࣨใͷ֬ೝ ᶅ٬ࣨΛ෦ݮΒ͢ ᶆۭࣨʹ༧ऀใΛՃ ᶇ༧ͷཱ ᶈϩάΞτ ᶆͷΈࣦഊͯ͠ଞͯ͢ਖ਼ৗʹऴྃͨ͠ͱ͠ ͯ ॓ധࢪઃͷ༧࡞ۀͱͯ͠ޭͨ͠ͱ
͍͑ͳ͍ 1τϥϯβΫγϣϯ 1τϥϯβΫγϣϯ 4τϥϯβΫγϣϯ ᶈͷΈͷࣦഊͰ͋Ε ϩάΞτॲཧࣦഊ͕ͩͦ ͷલͷ࡞ۀͰ͋Δ॓ധࢪઃͷ༧࡞ۀޭ͍ͯ͠Δ τϥϯβΫγϣϯͷྫ ΞϓϦέʔγϣϯαʔό ऴྃ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
σʔλϕʔεཧγεςϜ • σʔλϕʔεཧγεςϜ(DBMS) WebΞϓϦέʔγϣϯͷσʔλΛอଘ͢Δσʔλετ Ξ. ͱ͘ʹ, ؔσʔλϕʔεͰRDBMS(Relational DataBase Management System)͕༻͍ΒΕΔ
‣ ϑϦʔͷRDBMS͍͔ͭ͋͘Δ - MySQL - SQLite - PostgreSQL etc.. MySQLΛྫʹॲཧͷྲྀΕΛݟͯΈΔ
σʔλϕʔεཧγεςϜ • MySQLͷΈ 1. SQLจΛύʔε͢Δ σʔλΛऔಘ͢Δͷ͔, ૠೖ͢Δͷ͔ͳͲ 2. ΦϓςΟϚΠβʹ͔͚Δ ݁߹ͷॱংΛߟྀͯ͠࠷దԽ͢Δ
3. ετϨʔδΤϯδϯʹ͛ΔʢσʔλʹΞΫηεʣ ࣮ࡍͷσʔλ͕֨ೲ͞Ε͍ͯΔॴʹΞΫηε
σʔλϕʔεཧγεςϜ ίωΫγϣϯ εϨου ίωΫγϣϯ εϨου ίωΫγϣϯ εϨου ύʔαɾΦϓςΟϚΠβɾΞΫηεཧͳͲ ετϨʔδΤϯδϯ"1* .Z*4".
*OOP%# .Z42-ͳͲͷ ετϨʔδΤϯδϯ ετϨʔδϑΝΠϧ ΫϥΠΞϯτ͔ΒͷϦΫΤετ MySQL SELECT * FROM …
σʔλϕʔεཧγεςϜ • ετϨʔδΤϯδϯʹෳଘࡏ͢Δ ‣ InnoDB ݱࡏMySQLͷσϑΥϧτετϨʔδΤϯδϯ ‣ MyISAM ͔ͭͯMySQLͷσϑΥϧτͩͬͨ ‣
MEMORY ϝϞϦ্ʹσʔλΛετΞ͢ΔʢͷͰشൃੑʣ ‣ Blackhole ҰσʔλΛه͠ͳ͍ʢ͚Ͳϩά͢ʣ
σʔλϕʔεཧγεςϜ • ࡢͷΘ͔Βͳ͍ͳ͊ͬͯͣͬͱͭͿ͍ͯͨ
σʔλϕʔεཧγεςϜ • ͭͿ͍ͨΒฦ৴͕དྷͨ(Blackholeͷ͍ํ)
σʔλϕʔεཧγεςϜ • ϦΞϧλΠϜੑ͕ཉ͍࣌͠ͷߏ
σʔλϕʔεཧγεςϜ • ৭ʑ͋ΔͷͰڵຯ͋ͬͨΒௐͯΈͯ ‣ MyISAM ‣ InnoDB ‣ MEMORY ‣
Federated ‣ BLACKHOLE ‣ ARCHIVE ‣ MySQL Cluster(NDB)
σʔλϕʔεཧγεςϜ • ίϛϡχςΟΤϯδϯ ‣ Tritonn ‣ SPIDER ‣ Q4M ‣
PBXT ‣ Percona XtraDB ‣ KickFire ‣ InfiniDB
σʔλϕʔεཧγεςϜ • DBαʔό RDBMSΛࡌͨ͠αʔόʢσʔλετΞʣ ‣ σʔλϕʔεΞϓϦέʔγϣϯͷใΛอ͍࣋ͯ͠ ΔͨΊ, ৴པੑੑΛߟྀͨ͠ߏʹ͢Δඞཁ͕ ͋Δ -
I/Oෛՙ͕ߴΊʹͳΔߟྀ͠ͳ͍ͱ͍͚ͳ͍ ‣ DBαʔόͷεέʔϧΞτ͍͠…
σʔλϕʔεཧγεςϜʢԽʣ • อ࣋͢Δσʔλͷอશඇৗʹॏཁ ‣ ௨ৗDBαʔόԽߏΛऔΔ • ͔͠͠, DBαʔόͷԽߏ͍͠ ‣ ෳͰߏͨ͠߹,
ෳͰσʔλΛڞ༗͓ͯ͠ ͘ඞཁ͕͋Δ ‣ ͨͩ͠සൟʹσʔλͷߋ৽͕ى͜ΔͨΊ, ͲͷΑ͏ʹ ڞ༗Λ͢Δ͔͕ॏཁ
σʔλϕʔεཧγεςϜʢԽʣ • Խͷํ๏ෳ͋Δ ‣ ϛϥʔϦϯά ‣ ϨϓϦέʔγϣϯ ‣ γΣΞʔυσΟεΫ
σʔλϕʔεཧγεςϜʢԽʣ • ϛϥʔϦϯά ߋ৽໋ྩΛड͚ͨRDBMS͕ෳͷσʔλϕʔεʹରͯ͠ಉ࣌ʹಉ ͡ߋ৽Λߦ͏ • ϨϓϦέʔγϣϯ ߋ৽໋ྩΛड͚ͨRDBMS͕ෳͷσʔλϕʔεʹରͯ͠ಉ͡ߋ৽ Λߦ͏. λΠϛϯάಉ࣌ͱݶΒͳ͍
• γΣΞʔυσΟεΫ σʔλϕʔεΛڞ༻ͷετϨʔδʹ࣋ͪ, ෳͷDBαʔό͔ΒͦΕ Λߋ৽͢Δ
σʔλϕʔεཧγεςϜʢԽʣ webαʔό APαʔό ϓϦϯγύϧʢਖ਼ʣ ϛϥʔʢ෭ʣ ߋ৽໋ྩ ߋ৽໋ྩ ฏৗ࣌ϓϦϯγύϧʹ໋ྩΛૹΓ োൃੜ࣌ʹϛϥʔʹ໋ྩΛૹΔ
ϓϦϯγύϧ͕ߋ৽໋ྩΛड͚Δͱ ϛϥʔʹߋ৽໋ྩΛసૹ͢Δ ϛϥʔ%#.4ߋ৽໋ྩΛड͚ ϛϥʔ ͷσʔλϕʔεߋ৽Λߦͳ͏ ฏৗ࣌ͷॲཧΛߦͳ͏ػثɿਖ਼ܥ ো࣌ʹਖ਼ܥʹΘͬͯॲཧΛߦ͏ػثɿ෭ܥorػܥ ϛϥʔϦϯά
σʔλϕʔεཧγεςϜʢԽʣ webαʔό APαʔό Ϛελʢਖ਼ʣ εϨʔϒʢ෭ʣ ߋ৽໋ྩ ฏৗ࣌Ϛελʹ໋ྩΛૹΓ োൃ ੜ࣌ʹεϨʔϒʹ໋ྩΛૹΔ ߋ৽ͷ໋ྩϚελʹͷΈૹΒΕΔ
ߋ৽͢Δͱ εϨʔϒʹ ߋ৽ϩάϑΝΠϧ͕ૹΒΕΔ ߋ৽ϩάͷ༰Λجʹ εϨʔϒͷσʔ λϕʔεͷߋ৽ΛҙͷλΠϛϯάͰ ߦ͏ Master-Slaveߏͷ߹, ߋ৽ʹಉظ/ඇಉظ͕ଘࡏ͢Δ. ϨϓϦέʔγϣϯ
σʔλϕʔεཧγεςϜʢԽʣ webαʔό APαʔό ϚελʢBlackholeʣ εϨʔϒʢInnoDBʣ όΠφϦϩά ߋ৽໋ྩ ϚελͷετϨʔδΤϯδϯΛBlackhole͢Δ͜ͱͰ, INSERT͕ଟ͍Α͏ͳαʔϏεʹ࠷దԽ͢Δ͜ͱ ϨϓϦέʔγϣϯ
σʔλϕʔεཧγεςϜʢԽʣ webαʔό APαʔό DBMS ϛϥʔʢ෭ʣ ߋ৽໋ྩ ߋ৽໋ྩ ໋ྩͲͷ%#.4Ͱྑ͍ γΣΞʔυσΟεΫͷ%#.4ʹ ਖ਼෭ͷ֓೦ͳ͍
γΣΞʔυσΟεΫ DBMS σʔλετϨʔδ σʔλϕʔεԽ ͞Εͳ͍ͷͰରোੑ ͷڧ͍ΛબͿ DBMS ऴྃ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Ωϟογϡαʔό • ϦΫΤετ͕૿͑Δͱ, ίϯςϯπͷಡΈग़͠(I/O) ॲཧ͕ແࢹͰ͖ͳ͍Ϩϕϧʹͳͬͯ͘Δ ‣ ϨεϙϯελΠϜͷԼΛট͘ • ίϯςϯπΛΩϟογϡͤ͞Δ͜ͱͰ, සͷߴ͍ͷ
αΠζ͕େ͖͍ͷʹؔͯ͠ߴʹϨεϙϯεΛฦ͢ ͜ͱ͕ग़དྷΔ ‣ Ωϟογϡαʔόʔ͕ͦͷׂΛ୲͏
Ωϟογϡαʔό • Ωϟογϡ ϦΫΤετʹର͢ΔϨεϙϯεͷهԱ ‣ ίϯςϯπΩϟογϡ จॻը૾, ಈըͱ͍ͬͨίϯςϯπͷΩϟογϡ ‣ ΫΤϦΩϟογϡ
DBMSͷσʔλݕࡧཁٻʢΫΤϦʣͷ݁ՌͷΩϟο γϡ
Ωϟογϡαʔό ίϯςϯπ Ωϟογϡαʔό Webαʔό هԱͯ͠ͳ͍ϦΫΤετͦͷཁٻΛ 8FCαʔόʹసૹ͢Δ هԱ͍ͯ͠ΔϦΫΤετ͕དྷͨ߹ 8FC αʔόͷΘΓʹϨεϙϯεΛฦ͢ ϦΫΤετͱ8FCαʔόͷϨεϙϯεͷ
Έ߹ΘͤΛهԱ͓ͯ͘͠ ϒϥβ ίϯςϯπΩϟογϡαʔό
Ωϟογϡαʔό هԱ͍ͯ͠ͳ͍ΫΤϦͷ߹ͦͷ·· %#.4ʹసૹ "1αʔό͔Βͷσʔλݕࡧཁٻͱ%#.4 ͷϨεϙϯεͷΈ߹ΘͤΛΩϟογϡ ΫΤϦΩϟογϡαʔό Webαʔό APαʔό ΫΤϦ Ωϟογϡαʔόʔ
DBαʔό WebγεςϜ
ΩϟογϡαʔόʢΩϟογϡͷ༗ޮظݶʣ • ΩϟογϡΛಘΔͨΊʹඞཁͳٕज़ • ͔͠͠, ίϯςϯπ͕Ξοϓσʔτ͞Εͨ߹, Ωϟο γϡͷ༗ޮظݶ͕͍ͱ͍ͭ·ͰͷچϑΝΠϧ͕৴ ͞Εͯ͠·͏ ‣
༗ޮظݶΛదʹઃఆ͢Δ͜ͱͰ, ҰఆִؒͰΩϟο γϡ༰ΛΞοϓσʔτ͢Δඞཁ͕͋Δ ‣ ͦͷͨΊͷHTTP ETag
ΩϟογϡαʔόʢCDNʣ • ಥવͰ͕͢, ϓϩάϥϚ͕Δ͖ϨΠςϯγͰ͢ Ҿ༻ɿhttps://speakerdeck.com/fujiwara3/isucon-summer-school-1
ΩϟογϡαʔόʢCDNʣ • CDN(Contents Delivery Network) ੈք֤ʹஔ͞ΕͨΩϟογϡαʔόͷू߹ମ ‣ ຊ͔Β৴͢Δͷʹຊʹ͚ͩΩϟογϡαʔόΛ ஔ͍͍ͯͯ, ࠃ֎͔ΒͷΞΫηε͘ͳΔ
‣ ੈքதʹΩϟογϡαʔόΛࢄͯ͠ஔ͢Δ͜ͱ Ͱ, Ͳ͔͜ΒΞΫηεͯ͋͠Δఔߴʹ
ΩϟογϡαʔόʢCDNʣ • CDNͷ༗໊ͳαʔϏε ‣ CloudFront(Amazon) ‣ CloudFlare ‣ Akamai CloudFrontͷωοτϫʔΫʢҾ༻ɿhttps://aws.amazon.com/jp/cloudfront/details/ʣ
ΩϟογϡαʔόʢCDNʣ • ΞΫηε͢ΔͱࣗʹҰ൪͍ۙCDN͔Βμϯϩʔυ ͢Δ͜ͱͰߴʹͳΔ • ͜ͷลͷલεϥΠυʹॻ͍ͨ https://speakerdeck.com/bath_poo_/introduction-to- large-scale-web-service-15 CDN ऴྃ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Ajax • ಉظ௨৴ ΫϥΠΞϯτͱαʔό͕ަޓʹ௨৴Λߦ͍, ಉௐͯ͠௨ ৴Λߦ͏͜ͱ ‣ ಡΈࠐΈ͕ऴΘΔ·ͰଞͷॲཧΛߦ͑ͳ͍ʢͭ͜ ͱ͔͠Ͱ͖ͳ͍ʣ
Ajax • Ajax(Asynchronous JavaScript + XML) ΫϥΠΞϯτͷJavaScript͕Webαʔόͱ௨৴Λߦ ͍, σʔλΛऔಘͯ͠ඳը͢ΔඇಉظॲཧͷΠϯλ ϑΣʔε
‣ ͍͍ͪͪϖʔδΛϦϩʔυ͠ͳͯ͘, มߋ͍ͨ͠෦ ͚ͩΛAjaxΛͬͯ࠶ඳը͢Δ͜ͱ͕Ͱ͖Δ
Ajax ϦΫΤετ ߋ৽ʹඞཁͳσʔλͱϦΫΤετΛૹ৴ ϨεϙϯεͪͷؒଞͷՕॴͷ දࣔߋ৽Ϣʔβʔͷૢ࡞ड͕Մೳ HTMLશମͷ࡞ΑΓ ॲཧ͕গͳΊ Ϩεϙϯε HTMLશମΛฦ͢ΑΓ αΠζখ͞Ί
Ajax • Ajaxʹ༻͞Ε͍ͯΔٕज़ ‣ HTML WebϖʔδΛهड़͢ΔͨΊͷݴޠ ‣ JavaScript JavaScriptͷXMLHttpRequestΦϒδΣΫτΛ༻ ‣
DHTML ΫϥΠΞϯτεΫϦϓτͰϖʔδΛಈతʹมߋ͢ΔΣϒٕ ज़Λࢦ͢ந֓೦ ‣ DOM HTMLXMLΛѻ͏ͨΊͷAPI Ajax ऴྃ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Web API • WebAPI(Web Application Program Interface) WebΛ௨ͯ͡ϓϩάϥϜ͕αʔϏεΛར༻͢Δͨ ΊͷΠϯλʔϑΣʔε ར༻ঢ়گ
WebAPIͷURL σʔλΛૹ৴ ॲཧ݁Ռ WebAPIͷURL σʔλΛૹ৴ ॲཧ݁Ռ Webαʔό 8FC"1* APαʔό
Web API • Web APIͷྫ ‣ ҢͱܦΛૹ৴͢Δͱ, ରԠ͢Δॴͷఱؾ༧ใ͕ ฦ৴͞ΕΔఱؾ༧ใAPI(Weather Hacksͱ͔)
‣ ϩάΠϯใͱจষΛૹ৴͢Ε, จষΛϙετ͢Δ ͜ͱ͕ग़དྷΔ(Twitterͱ͔) ‣ σʔλΛૹΔͱੳͨ݁͠ՌΛฦͯ͘͠ΕΔ(Watson API)
Web API • Web APIͷΓऔΓʹ༷ʑͳํ๏͕ΘΕΔ ‣ XML-RPCʢϓϩτίϧʣ XMLͰූ߸Խͯ͠ॲཧͷ࣮ߦΛཁٻ͢Δ ‣ SOAPʢϓϩτίϧʣ
XML-RPCΛ֦ுͨ͠ߴػೳͳϓϩτίϧ ‣ RESTʢઃܭࢥʣ Web্ͷϦιʔεΛҰҙͳURLͰදͯ͠, ༻͢Δϝ ιουʹΑͬͯڍಈΛม͑ΔΞϨʢલʹͬͨʣ
Web API(XML-RPCͷྫ) <?xml version="1.0"?> <methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>40</i4></value> </param>
</params> </methodCall> XML-RPCϦΫΤετ XML-RPCϨεϙϯε <?xml version="1.0"?> <methodResponse> <params> <param> <value><string>South Dakota</string></value> </param> </params> </methodResponse>
Web API(SOAPͷྫ) SOAPϦΫΤετ SOAPϨεϙϯε <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <getProductDetails xmlns="http://warehouse.example.com/ws"> <productId>827635</productId>
</getProductDetails> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <getProductDetailsResponse xmlns="http://warehouse.example.com/ws"> <getProductDetailsResult> <productName>Toptimate 3-Piece Set</productName> <productId>827635</productId> <description>3-Piece luggage set. Black Polyester.</description> <price>100.50</price> <inStock>true</inStock> </getProductDetailsResult> </getProductDetailsResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Web API(RESTͷࢥ(෮श)) • RESTful(REpresentational State Transfer) 4ͭͷݪଇ͔ΒͳΔγϯϓϧͳઃܭͷ͜ͱ 1. εςʔτϨε ΓऔΓ1ճ͝ͱʹ݁.
ଞͷΓऔΓʹӨڹ͠ͳ͍. 2. ΞυϨεՄಡੑ ͯ͢ͷϦιʔε͕ҰҙͳURIͷߏจͰදݱՄೳ 3. ౷ҰΠϯλʔϑΣʔε HTTPϝιουͷར༻͕౷Ұ͞Ε͍ͯΔ 4. ଓੑ ΓऔΓ͞ΕΔใʹϦϯΫΛؚΊΔࣄ͕Ͱ͖Δ
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
CGI • CGI(Common Gateway Interface) ΫϥΠΞϯτ͔ΒͷཁٻʹԠͯ͡αʔόʔαΠυεΫϦ ϓτΛىಈ͢ΔͨΊͷΈ ‣ ϦΫΤετʹԠͯ͡༧Ί༻ҙ͞Ε͍ͯΔϓϩάϥϜΛ ࣮ߦ͠,
ͦͷ࣮ߦ݁ՌΛฦ͢
CGI 8FCαʔό ίϯςϯπ $(*ϓϩάϥϜ ಡΈࠐΈ ϓϩάϥϜͷىಈ ࣮ߦ݁Ռ ϦΫΤετ Ϩεϙϯε w
$(*ͷϦΫΤετ $(*ϓϩάϥϜͷಈ࡞݁Ռ w ͦΕҎ֎ 63-ʹରԠ͢Δίϯςϯπ Λฦ৴ DHJCJOϑΥϧμ֎ͷϑΝΠϧ ֦ுࢠ͕DHJͰͳ͍ϑΝΠϧ DHJCJOϑΥϧμʹ͋Δ֦ுࢠ ͕DHJͰ͋ΔϑΝΠϧΛ$(*ϓ ϩάϥϜͱΈͳ͢ %JSFDUPSZDHJCJO 0QUJPOT &YFD$(* "EE)BOEMFSDHJTDSJQUDHJ %JSFDUPSZ DHJCJOϑΥϧμʹ͋Δ֦ுࢠ ͕DHJͰ͋ΔϑΝΠϧ
CGI • ΫϥΠΞϯτ͕ΤϯυϙΠϯτ(CGIͷURL)ʹΞΫηε͢ Δ͜ͱͰରͷϓϩάϥϜ͕ىಈ͢Δ • ϓϩάϥϜʹσʔλΛ͢͜ͱ͕ग़དྷΔ ‣ ίϚϯυϥΠϯҾ͠ URLͷඌʹ?Λ͚ͯσʔλΛ+۠ΓͰՃ͢Δํ๏ ‣
ύε͠ URLͷޙΖʹʮ/ʯͰ۠ͬͯσʔλΛฒΔํ๏ ‣ GET, POSTϝιουΛ͏
CGI 8FCαʔό $(*ϓϩάϥϜ σʔλΛͯ͠ ϓϩάϥϜͷىಈ http://example.com/program.cgi? σʔλ1+σʔλ2 ίϚϯυϥΠϯҾ͠ 8FCαʔό $(*ϓϩάϥϜ
σʔλΛͯ͠ ϓϩάϥϜͷىಈ http://example.com/program.cgi/ σʔλ1/σʔλ2 ύε͠ ىಈ࣌ʹσʔλΛอ͍࣋ͯ͠Δ ىಈޙʹ1"5)@*/'0͔Βऔಘ
CGI 8FCαʔό $(*ϓϩάϥϜ σʔλΛͯ͠ ϓϩάϥϜͷىಈ http://example.com/program.cgi? σʔλ໊1=σʔλ1 GETϝιου 8FCαʔό $(*ϓϩάϥϜ
σʔλΛͯ͠ ϓϩάϥϜͷىಈ http://example.com/program.cgi/ POSTϝιου ىಈޙ ม26&3:@453*/( ͔ΒσʔλΛऔಘ ىಈޙผʹૹΒΕ͖ͯͨ σʔλΛಡΈࠐΉ TUEJO
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5.
σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
αʔόؒͷ࿈ܞ • CGIΛར༻ͤͣʹαʔόʔαΠυεΫϦϓτΛىಈ͢Δ ߹, ֤αʔόαʔόʹΫϥΠΞϯτʹͳΓ͏Δ ‣ Webαʔό͕APαʔόʹσʔλͷॲཧΛґཔ ‣ APαʔό͕αʔόʔαΠυεΫϦϓτΛ࣮ߦ Webαʔό
APαʔό DBαʔό αʔό ΫϥΠ Ξϯτ αʔό ΫϥΠ Ξϯτ αʔό αʔϏεཁٻ σʔλ ॲཧґཔ σʔλ ݕࡧɾߋ৽
αʔόؒͷ࿈ܞ • αʔόಉ࢜ͷ௨৴ʹ͓͍ͯ, ϦΫΤετΛૹ৴͢Δଆ ͕ΫϥΠΞϯτ, ϨεϙϯεΛฦ͢ଆ͕αʔό ‣ APαʔόDBαʔόʹରͯ͠༧Ίઃఆͨ͠ϙʔτΛ ࢦఆ͠௨৴ ‣
ಉ͡αʔόʔͰ͋Ε127.0.0.1(localhost)
αʔόؒͷ࿈ܞ ػث͕ҟͳΔ߹ 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ϙʔτʹଓ
αʔόؒͷ࿈ܞʢར༻͢Δϓϩτίϧʣ • WebαʔόͱAPαʔόͷ࿈ܞʹΘΕΔن֨ ‣ HTTP ‣ AJP(Apache Jserv Protocol) ApacheͱTomcat(JSPͷ࣮ߦίϯςφʣͷ࿈ܞʹΘ
Ε͍ͯΔ ‣ WebSocket ΫϥΠΞϯτͱαʔόؒͰ1ଓΛཱ֬ͨ͠ޙ, σʔ λͷΓऔΓΛιέοτ௨৴Ͱߦ͏ͷʢϦΞϧλΠ Ϝੑ͕ߴ͍ʣ
αʔόؒͷ࿈ܞʢར༻͢Δϓϩτίϧʣ • APαʔόͱDBαʔόͲ͏͢Δͷ͔ ‣ ODBC(Open DataBase Connectivity) DBMSຖͷҧ͍Λٵऩ͠, ڞ௨ͷίʔυͰσʔλϕʔ εʹΞΫηε͢ΔͨΊͷن֨
- ODBCυϥΠόΛ͏͜ͱͰ࣮ݱ 0%#$υϥΠό APαʔό DBαʔό ODBCυϥΠόΛར༻༷ͯ͠ʑͳ DBMSͷಠࣗن֨ʹରԠ ಠࣗϓϩτίϧͰ௨৴
ࢀߟαΠτ
ࢀߟαΠτ • 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)
ࢀߟαΠτ • MySQL ӡ༻+ཧ τϥϒϧγϡʔςΟϯάΨΠυ http://gihyo.jp/book/2010/978-4-7741-4294-4 • ήʔϜΤϯδχΞͷͨΊͷσʔλϕʔεઃܭ https://www.slideshare.net/sairoutine/ss-62485460