$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
「メルカリ アッテ」を支える Google App Engine と Golang
Search
Tatsuya Tsuruoka
June 08, 2016
Programming
18
12k
「メルカリ アッテ」を支える Google App Engine と Golang
2016年6月8日の appengine ja night #33 の発表資料です。
Tatsuya Tsuruoka
June 08, 2016
Tweet
Share
More Decks by Tatsuya Tsuruoka
See All by Tatsuya Tsuruoka
GoとGAEによるWebアプリケーション開発(Go Con 2016 Spring)
ttsuruoka
12
8.3k
アッテ開発の技術 : Golang と Google App Engine
ttsuruoka
20
48k
メルカリの超高速開発を支えるPHP (PHPCon2014)
ttsuruoka
17
26k
メルカリ開発の歴史
ttsuruoka
2
2.1k
LT_有給とって温泉に行こう
ttsuruoka
0
250
Other Decks in Programming
See All in Programming
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
170
tparseでgo testの出力を見やすくする
utgwkk
2
280
Vibe codingでおすすめの言語と開発手法
uyuki234
0
110
Cell-Based Architecture
larchanjo
0
140
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
610
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
170
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
150
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.7k
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
890
Python札幌 LT資料
t3tra
7
1k
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
120
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
190
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
2
200
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
130
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Navigating Team Friction
lara
191
16k
Statistics for Hackers
jakevdp
799
230k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.7k
Building the Perfect Custom Keyboard
takai
1
660
BBQ
matthewcrist
89
9.9k
Test your architecture with Archunit
thirion
1
2.1k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Transcript
ʮϝϧΧϦΞοςʯΛࢧ͑Δ 2016/06/08 (PPHMF"QQ&OHJOFͱ(PMBOH
ࣗݾհ 2 Ԭ ୡ • ικ & ϝϧΧϦ • ۀ࣌ͷόοΫΤϯυͷΤϯδχΞϦϯάͱ
։ൃνʔϜͷϚωʔδϝϯτΛ୲ • νʔϜָ͕͘͠ࣄͰ͖ΔΛ࡞Δͷ͕͖
֓ཁ 3 1. ৽ن Web αʔϏεͷΠϯϑϥڥͱͯ͠ GAE/Go Λ࠾༻ͨ͠ͷͳ͔ͥ 2.
GAE/Go ʹΑΔ։ൃͱӡ༻ͲͷΑ͏ͳͷͳͷ͔ɻ ੜ࢈ੑɺεέʔϥϏϦςΟͱύϑΥʔϚϯεɺՄ༻ੑɺ αϙʔτମ੍ɺίετɺଞͷΠϯϑϥڥͱൺֱͯ͠ Ͳ͏͔ͩͬͨ
("&(P࠾༻ͷཧ༝
GAE/Go ࠾༻ͷཧ༝ 5 • ཧ༝1 : GAE ͷεέʔϥϒϧͳࢄγεςϜͷΈ • ཧ༝2
: GCP Γ্͕Γͷஹ͠ͱকདྷͷՄೳੑ • ཧ༝3 : νʔϜ։ൃʹ͍͍ͯΔ GolangɻGAE ʹΑΔਖ਼ࣜରԠ
GAE/Go ࠾༻ͷཧ༝1 : εέʔϥϒϧͳ GAE 6 • લఏɿ৽نࣄۀΞοςͷΠϯϑϥཁ݅ • άϩʔόϧ
• ෳϦʔδϣϯʢUSɺEUɺAPACʣͰαʔϏεΛల։͍ͨ͠ • ڞ௨ͷίʔυ & ͻͱͭͷσʔλϕʔε • େنΞϓϦέʔγϣϯ • DAUઍສਓنɻॠؒతͳΞΫηεສϦΫΤετ/ඵ • ϋΠεέʔϥϒϧ • ػೳվम࣌ͳͲʹαʔϏεແఀࢭʹ͍ͨ͠ • εέʔϧͷͨΊͷ४උ࡞ۀΛͳ͍ͨ͘͠
GAE/Go ࠾༻ͷཧ༝1 : εέʔϥϒϧͳ GAE 7 • Α͋͘ΔΞϓϩʔνͰɺ͏·͍͘͘ͷɿ • ҊA
: աڈʹܦݧͷ͋ΔߏطଘͷΠϯϑϥΛ͏ • ҊB : ৽نઃܭɻকདྷతʹඞཁʹԠͯ͡ઃܭΛੈަͤ͞Δ • → ϝϧΧϦͷͱ͖ҊBɻϦϦʔεޙ3ϲ݄ͰेສϢʔβͱ͍͏ఆΛ͠ ͯɺߴੑೳઐ༻αʔό1ͰߏஙɻߏΛੈަͤ͞Δ͜ͱͰεέʔϧ͞ ͍ͤͯͬͨ • ࠓճͷ৽نࣄۀͷΠϯϑϥཁ݅ϋʔυϧ͕ߴ͘ɺҊAɺҊB ͲͪΒͷΞϓ ϩʔν͏·͋ͯ͘·Βͳ͔ͬͨ
GAE/Go ࠾༻ͷཧ༝1 : εέʔϥϒϧͳ GAE 8 • ผͷΞϓϩʔνɺPaaS ʹ͍ͭͯߟ͑ͯΈΔ •
GAE Ҏ֎ͷ PaaS ʁ • AWS ্ʹߏஙͯ͠ఏڙ͞Ε͍ͯΔ PaaS AWSʢIaaSʣͷ੍Λड͚ͯ ͠·͏ • PaaS ΛӡӦ͍ͯ͠Δاۀͷن͕খ͍͞߹ɺͦ͜ʹΠϯϑϥΛ༬͚Δͱ ϦεΫΛίϯτϩʔϧͮ͠Β͍ • Microsoft Azure Force.com ɺࠓճͷ։ൃཁ݅ʹ߹Θͳ͍
GAE/Go ࠾༻ͷཧ༝1 : εέʔϥϒϧͳ GAE 9 • GAE → ཁ݅ΛຬͨͤΔ
• άϩʔόϧ • US ͔Βੈք͚ʹଟ͘ͷαʔϏε͕ల։͞Ε͍ͯΔ • Google ͱΠϯϑϥΛڞ༻͍ͯ͠Δ GAE વάϩʔόϧରԠ • େنΞϓϦέʔγϣϯ • Snapchat ͷΑ͏ͳDAU1ԯਓنͷࣄྫ • ϋΠεέʔϥϒϧ • ࢄγεςϜΛ࡞ΔͨΊͷΈ͕͍ͬͯΔ • খ͞ͳن͔Βେ͖ͳن·Ͱઢܗʹεέʔϧ
GAE/Go ࠾༻ͷཧ༝2 : GCP Γ্͕Γͷஹ͠ 10 • ཧ༝2 : GCP
Γ্͕Γͷஹ͠ͱকདྷͷՄೳੑ • 20159݄ࠒɺ৽نࣄۀͷٕज़બఆΛ࢝͠Ίͨͱ͖ʹɺ͢Ͱʹ GCP(GKE) Λ ͬͯ։ൃΛ͍ͯͨ͠ΤϯδχΞ͔ΒʮGCP ͕ඇৗʹྑ͔ͬͨʯͱ͍͏Λ ฉ͍ͨ • ͦΕ·Ͱ BigQuery GCE ͘Β͍͔͠৮͍ͬͯͳ͔ͬͨͷͰɺใऩूΛ։ ࢝ɻGoogle ͷ୲ऀΛհͯ͠Β͍ɺ͙͢ʹ࠷৽ͷ GCP ใΛڭ͑ͯ Β͏ • → AWS ͷιϦϡʔγϣϯΞʔΩςΫτͷΑ͏ͳͤΔٕज़୲ऀ͕͍ Δ͜ͱʹ·ͣڻ͍ͨ
GAE/Go ࠾༻ͷཧ༝2 : GCP Γ্͕Γͷஹ͠ 11 • ࠓͰͦ͜ීٴ͍ͯ͠Δ AWS ౦ژϦʔδϣϯ͕ͳ͍͜Ζٕज़୲ऀ͍ͳ
ͯ͘ɺΦϯϥΠϯυΩϡϝϯτΛཔΔ͔͠ͳ͔ͬͨ • ۙ·Ͱ GCP ͦ͏͍͏ঢ়ଶʹͳ͍ͬͯΔͱࢥ͍ͬͯͨ → ͤΔ୲ऀ͕͍ͯɺGCP ʹؔ͢Δٙʹਝˍత֬ʹճΛΒ ͑Δঢ়ଶ • ͞ΒʹΦϯϥΠϯ্ͰɺGoogle ʹΑΔ GCP ͷใΞοϓσʔτසߴ ·͍ͬͯΔ • → Google ͕ GCP ʹରͯ͠ଟ͘ͷϦιʔεΛׂ͍͍ͯΔ͜ͱ͕Θ͔ͬͨɻ αʔϏεΛͷͤΔΠϯϑϥͱͯ͠ेʹ҆શͱஅ
GAE/Go ࠾༻ͷཧ༝3 : Golang αϙʔτ 12 • ࠷ॳʹ Golang ʹ͍ͭͯݕ౼͢ΔΑ͏ʹͳ͖͔͚ͬͨͬɿ
࠾༻ձ৯ʹ͔͏λΫγʔͷத… ࢁాʮ࣍Ͳ͏͍͏ݴޠͰ࡞Δʁʯ ʮϝϧΧϦͱಉ͡ PHP Ͱ͢Ͷʯ ࢁాʮGo ͬͯͲ͏͔ͳʁʯ ʮྑ͍ݴޠͰ͢ͶɻͨͩࠓճPHPͰ࣮֬ʹ࡞Ζ͏ͱࢥ͍·͢ʯ ʢͦͷޙ Golang ʹ͍͍ͭͯΖ͍ΖใΛूΊΔʣ
GAE/Go ࠾༻ͷཧ༝3 : Golang αϙʔτ 13 • Golang ͱ Web
αʔϏε։ൃͷ૬ੑ • CLI ͳͲγεςϜϓϩάϥϛϯάಘҙͳྖҬͱͯ͘͠ΒΕ͍ͯΔ • → ϝϧΧϦࣾͰଟͷ࣮͋Δ Go ϓϩμΫτ͕͋Γɺੜ࢈ੑͷߴ ͞ೝ͍ࣝͯͨ͠ • ࣮ࡍʹ৮ΔͱɺWeb αʔϏε։ൃʹ͓͍ͯඇৗʹڧྗͳ͜ͱ͕Θ͔ͬͯ ͖ͨ • ݴޠࣗମͷಛɿ੩తܕ͚ɺγϯϓϧͳߏจɺgo fmt/doc ͳͲ • ύοέʔδ/ϥΠϒϥϦͷےͷྑ͞ɿnet/http x/net/context • GAE Golang ͷਖ਼ࣜରԠ͕ൃද͞Ε͍ͯͨʢ20157݄ʣ
GAE/Go ࠾༻ͷཧ༝3 : Golang αϙʔτ 14 • ཧ༝1 : GAE
ͷεέʔϥϒϧͳࢄγεςϜͷΈ • ཧ༝2 : GCP Γ্͕Γͷஹ͠ͱকདྷͷՄೳੑ • ཧ༝3 : νʔϜ։ൃʹ͍͍ͯΔ GolangɻGAE ʹΑΔਖ਼ࣜରԠ → ͜ΕΒͷཧ༝Ͱικࣾ GAE/Go ʹܾఆɻ ϝϧΧϦʹର͢Δικͷٕज़తͳҐஔ͚͕ͮϋοΩϦͯ͠ɺ ޙʹͲ͏ͳ͍ͬͯΔ͔૾Ͱ͖ͨͷͰ໎͍ͳܾ͘ఆͰ͖ͨ
("&(P࠾༻ͷ݁Ռ
GAE/Go ࠾༻ͷ݁Ռ 16 • ݁Ռ1 : ੜ࢈ੑ • ݁Ռ2 :
εέʔϥϏϦςΟͱύϑΥʔϚϯε • ݁Ռ3 : Մ༻ੑ • ݁Ռ4 : αϙʔτମ੍ • ݁Ռ5 : ίετ
GAE/Go ࠾༻ͷ݁Ռ1 : ੜ࢈ੑ 17 • ͲΕ͚ͩૉΒ͍͠ͱݴΘΕΔΠϯϑϥ։ൃݴޠͰ͋ͬͯɺ ͔ͦ͜ΒϓϩμΫτ͕ϦϦʔε͞Εͳ͚Εɺҙຯ͕ͳ͍ • ࠓճɺGAE/Go
Λࣗ৴Λ࣋ͬͯબͨ͠ͷͷɺ͜ͷٕज़͕ੈؒ ҰൠͰීٴ͍ͯ͘͠ͷͳͷ͔Α͘ݟۃΊΔඞཁ͕͋ͬͨ • →ʮΞοςʯͷόοΫΤϯυͷ։ൃશһ͕ GAE Golang ະܦݧ͔Β࢝·͍ͬͯΔɻࣾͷৄ͍͠ਓʹ(ҙਤతʹ)૬ஊͤ ͣʹ։ൃ
GAE/Go ࠾༻ͷ݁Ռ1 : ੜ࢈ੑ 18 • ࣮ࡍʹͲ͏͔ͩͬͨɿ • ։ൃணख͔Β2ϲ݄ʹݶఆެ։όʔδϣϯΛϦϦʔεɻ5ϲ݄ ʹਖ਼ࣜ൛ϦϦʔε
• ະܦݧ͔Β࢝·ͬͯԿΒ͔ͷΠϯϑϥͱ։ൃݴޠΛѻ͑ΔΤ ϯδχΞͰ͋Εɺ͙͢ʹϓϩμΫτͷ։ൃʹՃΘΕΔ • → ೖࣾͯ͠1िؒҎʹຊ൪ڥͰಈ͘ίʔυΛॻ͍ͯߩݙɻ 1ϲ݄ʹपғͷίʔυͱḮ৭ͳ͍Ϩϕϧ • ݁Ռ1: ੜ࢈ੑ → ˕ྑ͍
GAE/Go ࠾༻ͷ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε 19 • ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε •
GAE ͷΞϓϦɺਖ਼͘͠ઃܭ࣮ͯͨ࣌͠͠Ͱෛՙରࡦ͕ྃ ͍ͯ͠Δ → ྫɿϝοηʔδػೳɻDatastore ʹهͯ͠औಘ͢Δ͚ͩɻ Ϣʔβ͕ͲΕ͚ͩ૿͑ͯϝοηʔδྲྀ௨݅ಡΈऔΓճ͕૿ ͑ͯԿ͠ͳͯ͘ OK
GAE/Go ࠾༻ͷ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε 20 • ΞοςͰ࣮ࡍʹ͋ͬͨෛՙɿ • ϝϧΧϦͷΞϓϦ্ͷόφʔ͔ΒΞοςͷ༠ಋ •
→ ҰॠͰ App Store ϥϯΩϯά্Ґ • ेສʙඦສ݅ͷ Push ௨ͷҰ੪৴ • → ॠؒతʹΞΫηε͕ेഒʹ • ͜ΕΒͷෛՙ GAE/Go ্ͰαʔϏε͕ಈ͍͍ͯΔ࣌ͰࣗಈͰ εέʔϧͯ͠ରԠͰ͖Δ
GAE/Go ࠾༻ͷ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε 21 • ϓϩϏδϣχϯάΥʔϜΞοϓෆཁ • ϓϩϞʔγϣϯνʔϜͱΤϯδχΞ͕ࣄલʹෛՙʹ͍ͭͯଧͪ ߹ΘͤΔඞཁͳ͠
• 1Ϣʔβͷͱ͖ʹਖ਼͘͠ಈ͍͍ͯΕɺԿઍສϢʔβʹͳͬͯ ͳ͠ ※ಛఆͷΩʔʹର͢Δߋ৽ॲཧ͕େྔൃੜ͢Δͱ͖ͳͲɺྫ֎͋Γ
GAE/Go ࠾༻ͷ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε 22 • ͜ͷεέʔϥϏϦςΟ Golang ͷύϑΥʔϚϯεʹΑ࣮ͬͯݱ͞ Ε͍ͯΔ
• GAE ͷΠϯελϯε • Golang ͷ߹ɺेms Ͱىಈ͢Δ • ΞΫηε͕͋Ε૿͑ͯɺͳ͚ΕݮΔ → ΞΫηε͕͋Δͱ͖ʹॠ࣌ʹىಈ͢ΔͷͰΥʔϜΞοϓෆཁ • ݁Ռ2: εέʔϥϏϦςΟͱύϑΥʔϚϯε → ˕ྑ͍
GAE/Go ࠾༻ͷ݁Ռ3 : Մ༻ੑ 23 • ݁Ռ3 : Մ༻ੑ •
Ξος 100% Քಇத → ·ͩӡ༻ظ͕͍ؒͨΊਖ਼֬ͳධՁͰ͖ͳ͍ • ϝϧΧϦͷաڈͷΠϯϑϥϐʔΫλΠϜʹͳΔͱμϯ͢Δ͜ͱ ͕Α͋ͬͨ͘ͷͰɺࣾͷඪઃఆʹՔಇΛೖΕ͍ͯͨ • Ξος100%αʔϏεఏڙͰ͖Δ͜ͱ͕લఏͳͷͰඪઃఆ͠ ͍ͯͳ͍
GAE/Go ࠾༻ͷ݁Ռ3 : Մ༻ੑ 24 • ϝϯςφϯεܭըఀࢭʁ →ΞοςͰϝϯςφϯεܭըఀࢭ༧ఆ͍ͯ͠ͳ͍ɻྫ͑ DB ʹΧϥϜΛՃ͢ΔͨΊʹαʔϏεΛࢭΊͨΓ͠ͳ͍
• GAE + Datastore Ͱ͋Ε؆୯ʹආ͚ΒΕΔ • ͍ͭͰ͑ΔαʔϏεʹ͢ΔͨΊʹɺଟେͳ࿑ྗΛ͍ͬͯΔΘ ͚Ͱͳ͍͕େࣄ • GAE Datastore ͷಛੑʹ߹Θͤͯ࡞Εɺͦ͏ͳΔ • ݁Ռ3: Մ༻ੑ → ˕ྑ͍
GAE/Go ࠾༻ͷ݁Ռ4 : αϙʔτମ੍ 25 • ݁Ռ4 : αϙʔτମ੍ •
ࣄલʹใΛूΊͯαϙʔτମ੍ʹ͍ͭͯΑ͘Θ͔Βͳ͔ͬͨ ͷͰɺݸਓతʹҰ൪ݒ೦ͩͬͨ • Google ͞ΜͱͷϛʔςΟϯάΛ܁Γฦͨ͠ΓɺGCP ͷ༗ঈαϙʔ τʢGoldϓϥϯʣʹೖΔ͜ͱͰɺॆ࣮ͨ͠ମ੍͕ݟ͖͑ͯͨ
GAE/Go ࠾༻ͷ݁Ռ4 : αϙʔτମ੍ 26 • ϝϧΧϦͷͷརɿಉ͡Ϗϧʹ Google ͞Μ͕͍ΔͷͰɺࠔͬͨͱ ͖ʹ͙͢ʹͯ͠ใަͰ͖Δ
→ Ӧۀ୲ऀٕज़୲ऀ͕ͨ͘͞Μ͍ΔͷͰɺଞͷϏϧͷօ͞ ·΄΅ಉ༷ͷαϙʔτड͚ΒΕΔ(ͣ) • GCP ͷ༗ঈαϙʔτɺߴͳٕज़తͳ࣭ʹରͯ͠1࣍ճ ʹདྷͨΓɺͯ͘2Ҏʹ͕ղܾ͢Δ • ଞͷબࢶɿτοϓήʔτ͞ΜͷΑ͏ͳ GCP ύʔτφʔاۀ • ݁Ռ4: αϙʔτମ੍ → ˕ྑ͍
GAE/Go ࠾༻ͷ݁Ռ5 : ίετ 27 • ݁Ռ5 : ίετ •
աڈʹར༻ྉ͕ۚߴֹͩͬͨΛฉ͍ͨΓ͢Δ • աڈҰ୴Εͯɺ͍·͏ͱͲ͏͍͏ֹۚʹͳΔͷ͔ΛΔ • ݱࡏۃΊͯίετʹͳ͍ͬͯΔ
GAE/Go ࠾༻ͷ݁Ռ5 : ίετ 28 • Ξοςͷ GCP ڥɺ5݄ͷར༻ྉۚʢ҆ʣ ։ൃڥ
* αʔόαΠυΤϯδχΞਓ = 0ԁʢ1ԁະຬʣ QA ڥ = 1,100ԁ ຊ൪ڥɺDAU100ສࢉ͢Δͱ200ສԁ • අ༻ͷ༁ ɾDatastore Read Ops 46%ɺSimple Searches 28%ɺ Frontend Instances 17%ɺOut Bandwidth 4%ɺͦͷଞ 4%
GAE/Go ࠾༻ͷ݁Ռ5 : ίετ 29 • ΠϯϑϥઐͷΤϯδχΞ͕͍ͳͯ͘ӡ༻Ͱ͖ΔͨΊɺΠϯϑ ϥΛҡ࣋͢Δਓ݅අ͔͔͍ͬͯͳ͍ • ΦϯϓϨϛεΛؚΊͨଞͷͲͷΑ͏ͳΠϯϑϥڥͰɺ
GCP ΑΓ҆ՁʹαʔϏεΛ࡞Δ͜ͱͰ͖ͳ͍ • ͯ͢ैྔ՝ۚɻϢʔβ͕૿͑Εඅ༻ਖ਼ൺྫ͢ΔɻϦβʔϒ υΠϯελϯεͷΑ͏ͳɺܭըੑ͕ඞཁͳͷͳ͘ɺৗʹ҆Ձ ͳঢ়ଶ • ݁Ռ5: ίετ → ˕ྑ͍
݁ 30 • GAE/Go Λ࠾༻ͨ݁͠ՌɺͲ͏͔ͩͬͨ → ੜ࢈ੑɺεέʔϥϏϦςΟͱύϑΥʔϚϯεɺՄ༻ੑɺ αϙʔτମ੍ɺίετɺތுͰͳͯ͘͢ຬ • ࠓޙͷҊ݅Ͱ
GAE/Go Λ͍͍͔ͨ → Yes!