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
アッテ開発の技術 : Golang と Google App Engine
Search
Tatsuya Tsuruoka
April 20, 2016
Programming
48k
20
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アッテ開発の技術 : Golang と Google App Engine
2016年4月18日開催のアッテフェスでの発表です。
Tatsuya Tsuruoka
April 20, 2016
More Decks by Tatsuya Tsuruoka
See All by Tatsuya Tsuruoka
「メルカリ アッテ」を支える Google App Engine と Golang
ttsuruoka
18
12k
GoとGAEによるWebアプリケーション開発(Go Con 2016 Spring)
ttsuruoka
12
8.3k
メルカリの超高速開発を支えるPHP (PHPCon2014)
ttsuruoka
17
26k
メルカリ開発の歴史
ttsuruoka
2
2.2k
LT_有給とって温泉に行こう
ttsuruoka
0
270
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
630
Contextとはなにか
chiroruxx
1
390
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.6k
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
200
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
290
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
190
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
280
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
150
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
110
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
200
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
0
260
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
The Invisible Side of Design
smashingmag
301
52k
So, you think you're a good person
axbom
PRO
2
2.1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Marketing to machines
jonoalderson
1
5.5k
The Spectacular Lies of Maps
axbom
PRO
1
850
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Mobile First: as difficult as doing things right
swwweet
225
10k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
ラッコキーワード サービス紹介資料
rakko
1
3.8M
Transcript
։ൃͷٕज़ 2016/04/18 (PMBOHͱ(PPHMF"QQ&OHJOF
ࣗݾհ 2 Ԭ ୡ • ικɺαʔόαΠυΤϯδχΞ݉ Ϛωʔδϟʔ • ϝϧΧϦɺۀ͔࣌ΒόοΫΤϯυͷ ΤϯδχΞϦϯάΛ୲
• ։ൃऀָ͕͘͠ࣄͰ͖ΔΛ࡞Δͷ ͕͖
ࠓճ͓͍͑ͨ͜͠ͱ 3 1. Go ͱ GAE ඇৗʹ༗ྗͳ Web ΞϓϦ։ൃखஈ 2.
PaaS ͷ͕࣌ຊ֨తʹ࢝·͖ͬͯͨ
INDEX Why Goʁ Why GAEʁ ࢄγεςϜͷͨΊͷ Datastore Web ΞϓϦέʔγϣϯͷΞʔΩςΫνϟ
Why Go? Why GAE? 5 • Ξοςͷ։ൃΛ GAE/Go ʹܾΊͨཧ༝ ΞϓϦέʔγϣϯͷཁ݅
ϝϧΧϦͰͳ͘ικ (PPHMFͷಈ͖ ϓϩμΫτ։ൃϑΥʔΧε
ΞϓϦέʔγϣϯͷཁ݅ 6 • ػೳతͳଆ໘ JSON APIɺ੩తίϯςϯπ৴ʢHTML/CSS/JSʣɺಈతίϯςϯπੜɺ σʔλϕʔε(ӬଓԽɺΫΤϦ)ɺΩϡʔॲཧɺ ݕࡧ(ΩʔɺશจݕࡧɺҐஔɺ༧ଌม)ɺ ը૾Ξοϓϩʔυͱ৴ɺϝʔϧૹ৴ɺPush ௨ɺσʔλੳ
ΞϓϦέʔγϣϯͷཁ݅ 7 • ඇػೳతͳଆ໘ • άϩʔόϧ • ෳϦʔδϣϯ(USɺEUɺAPAC)ͰαʔϏεΛల։͍ͨ͠ ͦͷͱ͖σʔλϕʔεάϩʔόϧʹͻͱ͚ͭͩ •
େنΞϓϦέʔγϣϯ • DAU ઍສਓنΛѻ͑ΔΞʔΩςΫνϟΛߟ͍͑ͨ • ࢀߟɿݱࡏͷϝϧΧϦ͕ถ3500ສμϯϩʔυɻ ϐʔΫ࣌ຖ120ສϦΫΤετɻѻ͏σʔλྔԯ୯Ґ • ϋΠεέʔϥϒϧ • ্ཱͪ͛ظ͔ؒΒ࠷ޙ·ͰҰ؏ͨ͠ΞʔΩςΫνϟʹ͍ͨ͠
ϝϧΧϦͰͳ͘ικ 8 • େͳٕज़બఆ͕Ͱ͖ͨେ͖ͳཧ༝ͷͻͱͭ • ϝϧΧϦͷࢠձࣾͱ্ཱ͕ͯͪͬͨ͠ܦҢ͕͋Γɺ ಉٕ͡ज़Λ͋͑ͯબͳ͍ͱ͍͏બࢶߟ͑ͯΈΔ • ϝϧΧϦͷLAMPελοΫͰͳ͍ͱͨ͠ΒɺͲΜͳબࢶʹͳΔʁ
ϝϧΧϦͰͳ͘ικ 9 • ϓϩμΫτͷϦϦʔε͢ ͯʹ༏ઌ͞ΕΔ • ݶΒΕͨϦιʔε ʢਓɺ͓ۚɺ࣌ؒʣ • ͍·ूΊΒΕΔՄೳੑͷߴ
͍ΤϯδχΞʁ • → อकతʹˍݎ࿚ʹ • ϝϧΧϦ͚ͩͰੜΈग़ͤ ͳ͍৽͍͠ՁΛग़͍ͨ͠ • ५ͳϦιʔε • 3ޙʹΤϯδχΞʹͱͬ ͯັྗతͳॴͰ͋ΔͨΊ ʹʁ • → ଟ༷ੑͱٕज़ͷ։ ϝϧΧϦॳظ ικ
Google ͷಈ͖ 10 • ΞοςͷΠϯϑϥΛߟ͑Δͱ͖ʹɺϝϧΧϦͱಉ͡ΦϯϓϨϛεAWSҎ֎ ͷબࢶௐࠪ • Google Cloud Platform
Ͱྑ͍ՌΛग़ͤͨͱ͍͏ใΛಘͨɻ͙͢ʹ Google ͷ୲ऀΛհͯ͠Β͍ɺGCP/GAE ͷ࠾༻ՄೳੑΛ1ϲ݄΄Ͳݕূ • Google ʹΑΔ͖Ίࡉ͔ͳαϙʔτମ੍ • 5͘Β͍લͱ༷ࢠ͕ҧ͏ • AWS ͕ຊϦʔδϣϯΛग़͖ͯͨ͠ͱ͖ͷΑ͏ͳงғؾ͕͋ͬͨ • Google Cloud Platform ʹରͯ͠ඇৗʹଟ͘ͷϦιʔεΛԼ͍ͯ͠Δ
ϓϩμΫτ։ൃϑΥʔΧε 11 • ΤϯδχΞͷଟ͕͘ ։ൃݴޠΠϯϑϥಛ༗ͷʹ࣌ؒΛ͏ͷͰͳ͘ɺ ϓϩμΫτͷ։ൃʹूதͰ͖Δڥ͕ཧɺͱ͍͏؍
ϓϩμΫτ։ൃϑΥʔΧε - Golang 12 • Go ͷੜ࢈ੑύϑΥʔϚϯεʁ • ϝϧΧϦͰ GaurunʢPush
৴ϛυϧΣΞʣͳͲͷ࣮͕͋Γɺ Go ͷϙςϯγϟϧͷߴ͞ײ͍ͯͨ͡ • ݕূϙΠϯτɿϛυϧΣΞ͚ͩͰͳ͘ Web Ͱߴ͍ੜ࢈ੑΛग़ͤΔ͔ • LL ͱҧ͏ੜ࢈ੑͷग़͠ํ͕Ͱ͖Δ • ॳॻࣺͯͷૣ͞ LL ʹྼΓ͕ͪɻ͍ͰݟΕੜ࢈ੑߴ͘ײ͡ ͨɻݫ֨ͳܕγεςϜ͕͋ΔͷͰେͳมߋ҆৺ͯ͠Ͱ͖Δ • νʔϜ։ൃͷ͢͠͞ • go fmtɺgo doc
ϓϩμΫτ։ൃϑΥʔΧε - GAE 13 • 1ͭͷ GCP ϓϩδΣΫτʹ 1ͭͷ App
Engine • App Engine ͷதʹΞϓϦέʔγϣϯ ͕Քಇ͢ΔΠϯελϯε͕͋Δ • ݕࡧػೳΩϡʔఏڙ͞ΕΔ • σʔλϕʔε Datastore • σʔλੳ BigQuery • ଞʹଟͷػೳ͕͋Γɺ App Engine ͱ࿈ܞͰ͖Δ プロジェクト App Engine App Engine Datastore Instances Search BigQuery Task Queue - GCE - Logs etc. - Networks
ϓϩμΫτ։ൃϑΥʔΧε - GAE 14 • Ϟδϡʔϧͱόʔδϣϯ • ΞϓϦέʔγϣϯΛෳͷڥʹσϓϩΠͰ͖Δ = όʔδϣϯͱݺΕΔ
• όʔδϣϯʹରͯ͠τϥϑΟοΫͷৼΓ͚ΛઃఆͰ͖Δ • ཧతͳ Blue / Green σϓϩΠ ग़యɿIUUQTDMPVEHPPHMFDPNTPMVUJPOTNJDSPTFSWJDFTPOBQQFOHJOF
ཧతͳ Blue/Green σϓϩΠ 15
ϓϩμΫτ։ൃϑΥʔΧε - GAE 16 • ΠϯελϯεͷΦʔτεέʔϧ • App Engine ʹΞϓϦέʔγϣϯΛσϓϩΠ͢Δ͚ͩͰΦʔτεέʔϧ͢Δ
• ΞΫηε͕ͳ͚ΕΠϯελϯε্ཱ͕ͪΒͣɺ ΞΫηε͕͋ͬͨͱ͖ʹ্ཱ͕ͪΔ • Πϯελϯε VM Ͱͳܰ͘ྔίϯςφ • Go ͷΠϯελϯεͳΒىಈ200msҎԼ • طଘΞϓϦ͔Βͷྲྀ͜͠ΈେنͳࠂϓϩϞʔγϣϯͰɺ Կ͠ͳͯ͘ॠ࣌ʹΠϯελϯε͕૿͑ͯॲཧ͞ΕΔ
GAE ͷΦʔτεέʔϧ 17
౷߹͞Ε͍ͯΔϦΞϧλΠϜͷϩάػೳ 18
౷߹͞Ε͍ͯΔϦΞϧλΠϜͷϩάػೳ - τϨʔε 19
ࢄγεςϜͷͨΊͷ%BUBTUPSF
ӬଓԽσʔλΛͲ͏ͬͯεέʔϧͤ͞Δ͔ 21 • Ҋ1) RDB ʹΑΔ౷తͳ Master/Slave Ϟσϧ • ࣮ेͰཱ֬͞Εͨख๏
• ͱ͍͑ DB Λθϩ͔Β্ཱͪ͛ͯεέʔϧ͍ͤͯ͘͞ͷେม • େنͳσʔλʹͳΔ΄Ͳ RDB ຊདྷͷ࣋ͪຯੜ͔ͤͳ͘ͳΔ • ҟͳΔ DB ςʔϒϧͱͷτϥϯβΫγϣϯ͕Ͱ͖ͳ͍ɻJOIN ͕ݶఆత • Ϣʔβͷ্ݶ͕Θ͔͍ͬͯΔ߹͜ΕͰ OK • → GCP Ͱ Cloud SQL ͕ఏڙ͞Ε͍ͯΔ
ӬଓԽσʔλΛͲ͏ͬͯεέʔϧͤ͞Δ͔ 22 • Ҋ2) εέʔϥϏϦςΟΛॏࢹͨ͠ NoSQL Ϟσϧ • NoSQL σʔλϕʔε
"Datastore" • τϨʔυΦϑɿ • ࣮༻తͳ ACID ͖͋ΒΊΔ • ۃΊͯߴ͍εέʔϥϏϦςΟ
RDB ͱ NoSQL ͲͪΒΛબͿ͖͔ʁ 23 • ؒҧ͍ͳ͘ɺGAE ͷσʔλϕʔεʹ Datastore ΛબͿ͖
• Gmail YouTube ͷΑ͏ͳαʔϏεͷσʔλ RDB Ͱͳ͘ BigTable ʹอଘ͞Ε͍ͯΔ • NoSQL ͷ࣮ Google ͕࣮ূࡁΈ • ΞοςͪΖΜ RDB ΛΘͣ Datastore Λར༻ • ͍͜ͱ׳Ε͠ΜͰ͖ͨ RDB Ͱͳ͘ɺNoSQL ΛબͿܾஅ͍͠ • ͔͠͠άϩʔόϧϨϕϧͷେنαʔϏεΛ࡞ΔͨΊʹ NoSQL ΛબͿܾஅΛ͠Α͏
Datastore ͷಛ 24 • ΦϒδΣΫτߏΛ࣋ͭεΩʔϚϨεͳ Key-Value Store ʹ ୯७ͳΫΤϦʹΑΔݕࡧΛՃ͑ͨͷ •
BigTable ͷ্ʹߏங͞Ε͍ͯΔ • BigTable ୯७ͳ KVSʢΩʔΛݩʹͨ͠ߦ୯Ґͷ CRUD + Ωʔͷൣғݕࡧʣ
Datastore ͷಛ 25 • Pros • ۃΊͯߴ͍εέʔϥϏϦςΟ • ӬଓԽͰ͖ΔσʔλʢΤϯςΟςΟʣͷʹ੍ݶͳ͍ •
ӬଓԽσʔλ͕ͲΕ͚ͩ૿͑ͯऔಘͱՃͷྼԽ͠ͳ͍ • 1݅Ͱ10ԯ݅Ͱಉ͡ • ಉҰΤϯςΟςΟͰͳ͚Ε੍ݶͳ͠ͷฒྻॻ͖ࠐΈ • ۃΊͯߴ͍Մ༻ੑ • μϯλΠϜͳ͠ • Cons • BigTable ΑΓߴػೳͱ͍͑ϓϦϛςΟϒ • ݶఆ͞Εͨ݅Ͱ͔͠ ACID τϥϯβΫγϣϯ͕αϙʔτ͞Εͳ͍ • JOIN ͕ͳ͍ɺू͕ؔͳ͍ɺetc.
Datastore Λ͏ͱ͖ʹߟ͑Δ͜ͱ 26 • RDB ͷύλʔϯΛͦͷ··ͯΊΔ͜ͱͰ͖ͳ͍ • ྫ1) τϥϯβΫγϣϯͳ͠ͰෳͷΛҰ؏ੑΛ࣋ͨͤͯߋ৽ •
→ Ұ࣌తʹҰ؏ੑ͕ͳ͘ͳΔ͜ͱΛڐ༰͢Δ • ྫ2) ΦʔτΠϯΫϦϝϯτʢ୯ௐ૿Ճ͢Δͷ࠾൪ʣ • → Datastore ͷػೳ͚ͩͰεέʔϧ͢Δ࠾൪࣮Ͱ͖ͳ͍ • ࢄγεςϜͰͷΦʔτΠϯΫϦϝϯτͷߟ͑ํ͕ඞཁ
8FCΞϓϦέʔγϣϯͷΞʔΩςΫνϟ
Web ΞϓϦέʔγϣϯͷΞʔΩςΫνϟ 28 • Go Ͱ Web ΞϓϦΛ࡞Δ͜ͱͰ͖Δʁ → Ͱ͖Δ
• ͲΜͳϑϨʔϜϫʔΫΛ͏ʁ → net/http? • ੜ࢈ੑʁ → ʁʁʁ Α͘ฉ͔ΕΔ͜ͱ
ΞοςͷΞʔΩςΫνϟ 29 • ΞϓϦέʔγϣϯෳݸͷϞδϡʔϧͰߏ͞ΕΔ • APIɺWebɺCS toolɺetc. • Ϟδϡʔϧͦͷ··σϓϩΠ୯Ґ •
୯ҰͷϦϙδτϦ(monorepo)Ͱɺଟ͘ͷίʔυڞ௨ • API JSON RPC 2.0 • Web ͱ CS tool HTML Λಈతੜ͢Δ • ΞϓϦέʔγϣϯɺυϝΠϯɺUIɺΠϯϑϥͷ4ʹ͔Ε͍ͯͯɺ ֤Ϟδϡʔϧ UI ͷҧ͍ͱͯ͠දݱ͍ͯ͠Δ
ΞοςͷΞϓϦέʔγϣϯͷઃܭํ 30 • GAE ͷґଘ • GAE ͷػೳΛϑϧʹ׆༻͢Δ͜ͱͰεέʔϥϏϦςΟՄ༻ੑͷԸܙΛड ͚͍ͯΔ •
વɺڧྗʹϩοΫΠϯ͞ΕΔ͜ͱʹͳΔ • ͔͞͞ͳ߅ɿυϝΠϯʢϏδωεϩδοΫʣͱΠϯϑϥΛ͚ ͯɺυϝΠϯΛ GAE ʹґଘ͠ͳ͍Α͏ʹ͍ͯ͠Δ • Datastore Λར༻͢Δ Repository Λ AWS ͷ DynamoDB Λར༻͢Δ Repository ʹࠩ͠ସ͑Α͏ͱࢥ͑Ͱ͖Δ
ΞοςͷΞϓϦέʔγϣϯͷઃܭํ 31 • Go ͷߟ͑ํʹै͏ • ίʔυͷॻ͖ํͷΑ͏ͳࡉ͔͍͜ͱ • ύοέʔδΛͲ͏ཧ͢Δ͔ •
ॏްͳϑϨʔϜϫʔΫΛಋೖ͠ͳ͍ • x/net/context ͱ net/http ύοέʔδ • 1ͭͷϦϙδτϦʹͯ͢ΛೖΕΔʢmonorepoʣ • APIɺWebɺCStool ͷΑ͏ͳڥք͕ҟͳΓͦ͏ͳϓϩδΣΫτΛɺ୯Ұϓ ϩδΣΫτͱͯ͠ѻ͏ • ڞ௨෦Λѻ͍͘͢ͳͬͯɺґଘؔཧ؆୯ʹͳΔ • ԣஅతͳίʔυͷվमΛ͘͢͠ͳΔ
·ͱΊ 32 1. Go ͱ GAE ඇৗʹ༗ྗͳ Web ΞϓϦ։ൃखஈ 2.
PaaS ͷ͕࣌ຊ֨తʹ࢝·͖ͬͯͨ → ͥͻ GAE/Go Λମݧͯ͠Έ͍ͯͩ͘͞