Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
20
48k
アッテ開発の技術 : Golang と Google App Engine
2016年4月18日開催のアッテフェスでの発表です。
Tatsuya Tsuruoka
April 20, 2016
Tweet
Share
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.1k
LT_有給とって温泉に行こう
ttsuruoka
0
250
Other Decks in Programming
See All in Programming
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
5
2k
React Native New Architecture 移行実践報告
taminif
1
150
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.5k
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
20k
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
8
5.5k
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
720
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
110
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
170
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
210
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
230
Integrating WordPress and Symfony
alexandresalome
0
150
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
698
190k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Speed Design
sergeychernyshev
33
1.4k
The Pragmatic Product Professional
lauravandoore
37
7.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
4 Signs Your Business is Dying
shpigford
186
22k
Visualization
eitanlees
150
16k
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 Λମݧͯ͠Έ͍ͯͩ͘͞