$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elasticsearch 勉強会 2019 「GameWithで検索システムが使われるまで」
Search
memory
PRO
February 20, 2019
Programming
1
12k
Elasticsearch 勉強会 2019 「GameWithで検索システムが使われるまで」
memory
PRO
February 20, 2019
Tweet
Share
More Decks by memory
See All by memory
AI 時代だからこそ学ぶべき PHP の基礎
m3m0r7
PRO
7
2k
JVM の仕組みを理解して PHP で実装してみよう
m3m0r7
PRO
1
340
コードゴルファー道
m3m0r7
PRO
0
470
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
270
事業観点から見る技術的負債の返済
m3m0r7
PRO
4
1.2k
PHP でアセンブリ言語のように書く技術
m3m0r7
PRO
1
240
PHP でアセンブリっぽく書く技術
m3m0r7
PRO
1
160
How to implement a RubyVM with PHP?
m3m0r7
PRO
3
2.9k
二郎系ラーメンのコールで学ぶ AST 解析
m3m0r7
PRO
8
3.1k
Other Decks in Programming
See All in Programming
無秩序からの脱却 / Emergence from chaos
nrslib
2
12k
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
140
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
780
チームをチームにするEM
hitode909
0
270
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
340
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
230
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
160
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
5
1.8k
開発に寄りそう自動テストの実現
goyoki
1
710
AIコーディングエージェント(Gemini)
kondai24
0
180
俺流レスポンシブコーディング 2025
tak_dcxi
13
8.3k
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
330
Featured
See All Featured
Bash Introduction
62gerente
615
210k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Facilitating Awesome Meetings
lara
57
6.7k
The Language of Interfaces
destraynor
162
25k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Music & Morning Musume
bryan
46
7k
Building an army of robots
kneath
306
46k
The Pragmatic Product Professional
lauravandoore
37
7.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Agile that works and the tools we love
rasmusluckow
331
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.8k
GitHub's CSS Performance
jonrohan
1032
470k
Transcript
GameWithͰݕࡧγεςϜ͕ΘΕΔ·Ͱ Elasticsearchษڧձ 2019/02/20 αʔϏε։ൃ෦ R&DνʔϜ ΊΓʔ(@m3m0r7)
Έͳ͞ΜɺHello Worldʂ
ͩΕʁ ΊΓʔ(@m3m0r7) Ͱ͢ɻ ը૾͏ͪͷϋϜελʔͷ Lily ͪΌΜͰ͢ɻ ౦ژͷຊʹ͋Δ גࣜձࣾ GameWith ͱ͍͏
ձࣾͰಇ͍ͯ·͢ɻ
ͱ͜ΖͰɺΈͳ͞Μ GameWith ͝ଘͰ͔͢ʁ
GameWith ʹ͍ͭͯ
GameWith ʹ͍ͭͯ ήʔϜ߈ུʮGameWithʯͰ͕͢ɺ ࣮ΣϒαΠτҎ֎ʹΞϓϦ͕͋Γ·͢
GameWith ʹ͍ͭͯ ήʔϜ߈ུʮGameWithʯͰ͕͢ɺ ࣮ΣϒαΠτҎ֎ʹΞϓϦ͕͋Γ·͢
ࠓ͜͜ͷݕࡧػೳʹ͍͓ͭͯ͠·͢
ॴ
ॴ
͜ͷืू͔ΒݕࡧγεςϜͷ։ൃ͕࢝·Δ
ݕࡧγεςϜͷ։ൃͰҙࣝͨ͜͠ͱ
θϩϕʔε͔Βͷ։ൃͰҙࣝͨ͜͠ͱ • ҙࣝͨ͜͠ͱ5 • ᶃ ୭Ͱ։ൃͰ͖ΔΑ͏ʹ͢ΔϝϯλϦςΟ • ᶄ ৽͍͜͠ͱʹઓ͢ΔϝϯλϦςΟ •
ᶅ ࠳͚ͳ͍ϝϯλϦςΟ • ᶆ ਏ͍ঢ়گΛָ͠ΉϝϯλϦςΟ • ᶇ ۀ͠ͳ͍ͧͱ͍͏ڧ͍ϝϯλϦςΟ
νʔϜߏ
νʔϜߏ • ݕࡧγεςϜࣗମͷνʔϜߏ4໊ମ੍ • αʔόʔαΠυΤϯδχΞ × 1 • GameWith ͷΣϒ໘ͷ։ൃվम݉
• ΠϯϑϥΤϯδχΞ × 1 • ଞͷΠϯϑϥ໘ͷλεΫ݉ • σΟϨΫλʔ × 1 • GameWith ͷΣϒ໘ͷσΟϨΫγϣϯ݉ • ίʔυϨϏϡϫʔ × 1 • ෦ • ଞʹiOS, AndroidΤϯδχΞ
༨ஊ
ϓϩδΣΫτ։࢝࣌ࢲͱ෦͚ͩ
ߟ͑ͳ͍͜ͱʹ͠Α͏
εέδϡʔϧ
9݄Ϛετ
None
ਖ਼ϦιʔεΓͳ͍
ͦΕͰΓ͖Δͧ
ٕज़બఆ
ٕज़બఆ • ։ൃڥDockerͰߏͨ͠ • DockerΛ͏͜ͱʹΑΓɺԿ͕ڥʹ͋Δͷ͔໌֬ʹΘ͔ΔΑ͏ʹͳͬͨ • GameWith Vagrant Λ͏෩ை͕͋ΓɺͲ͏͍ͬͨϛυϧΣΞ͕͋
Δ͔ɺͲ͏͍͏ߏʹͳ͍ͬͯΔͷ͔Ѳͮ͠Β͔ͬͨ • ։ൃڥͱϓϩμΫγϣϯڥͰඞཁͳڥͷࠩҟΛແ͔ͨͬͨ͘͠ • ϓϩμΫγϣϯڥʹ͋Δ͕ɺ։ൃڥʹͳ͍ɺͱ͍͏ঢ়ଶΛ࡞Γ ͨ͘ͳ͔ͬͨ • ࣾͰDockerΛϓϩμΫγϣϯʹར༻͢Δͷ͜ͷϓϩδΣΫτ͕ॳΊͯ • ৽͍͠ઓΛ͢Δ͜ͱ͍͍͜ͱɻ৽͍͜͠ͱʹઓΛͨ͠ͱ͍͏લྫ Λ࡞ΓपΓͷϝϯόʔɺࣗΒਐΜͰઓ͍ͯ͘͠෩ʹ͍͖͔ͯͨͬ͠ ͨ
ٕज़બఆ • Elasticsearch ͱ PHP + Laravel Λࠓճٕज़બఆͨ͠ • GameWith
AWS Λ༻͍ͯ͠Δ͕ɺAWS Elasticsearch ServiceΘͣAWS EC2 ͱ Docker ্ʹElasticsearchΛཱͯΔ͜ͱʹɻ • GameWith ήʔϜ߈ུใΛऔΓѻ͏ಛੑ͔Βݻ༗໊ࢺଟࣙ͘ॻͷ ͕ݒ೦͞Εͨɻ • ࣙॻ Sudachi Λ༻ • ৽ͨͳࢼΈΛ͔ͨͬͨ͠ • ϊϦɺදهਖ਼نԽͯ
ٕज़બఆ • Elasticsearch ͱ PHP + Laravel Λࠓճٕज़બఆͨ͠ • Elasticsearchຊମͱͷ௨৴PHPΛٕज़બఆͨ͠
• GameWithPHPΛϝΠϯݴޠͱͯ͠ѻ͍ͬͯΔձࣾ • ຊ৽ͨͳઓͱ͍͏ϚΠϯυͰ Go ʹ͠Α͏ͱࢥ͕ͬͨɺelasticެࣜ ͷϥΠϒϥϦ͕࣌ͳ͔ͬͨɻ • PHPͰ͋Εɺelasticެ͔ࣜΒϥΠϒϥϦ͕৴͞Ε͍ͯΔ • ͨͩɺࠓճͷݕࡧγεςϜͰ PHP ͷGuzzle ΛͬͯεΫϥονͰ ࡞ͬͨɻ
Πϯϑϥߏ
Πϯϑϥߏ ※μογϡϘʔυͱGameWithͷϥΠλʔ͕༻͢Δཧը໘ͷ͜ͱͰ͢
Πϯϑϥߏ • ͳͥ͜ͷߏʹ͠Α͏ͱͨ͠ͷ͔ • શจݕࡧΤϯδϯΞϓϦ͔ΒࢀরɺμογϡϘʔυ͔Βॻ͖ࠐΈ͕ߦ ΘΕΔɻ • ήʔϜͷ߈ུهࣄසൟʹߋ৽͞ΕΔͨΊɺߋ৽ใআใΛΩϡʔ Ͱॲཧ͔ͨͬͨ͠ͷͰɺAmazon SQSΛՃ͑ͨ
• ElasticsarchͷԽͷͨΊσʔλϊʔυ͕2Ҏ্ඞཁͩͬͨ • ࠓճͷϓϩμΫτͰͲΕ͚ͩͷΞΫηε͕͋Δ͔ఆͰ͔͠ग़ͤͳ͔ͬ ͕ͨ1ͩͱϊʔυ͕յΕͨࡍͷରॲ͕Ͱ͖ͳͦ͞͏Ͱ͋ΔͨΊ
Πϯϑϥߏ • ࣮ࡍͷߏ
ࣾʹݟ͕ͳ࣌͘ ͜ͷΠϯϑϥߏ͕ݶքͩͬͨ
ϖʔδωʔγϣϯ
ϖʔδωʔγϣϯ • ϖʔδωʔγϣϯΛͲ͏͠Α͏͔໎ͬͨ • ࠷ॳIDϕʔε͔ɺϕʔεͰͷϖʔδωʔγϣϯΛߟ͍͑ͯͨ • OFFSETϕʔεͰߟ͍͑ͯͳ͔ͬͨ • GameWith ͷಛੑ্ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞ΕΔ͜ͱ͕ݒ೦͞ΕΔ
• ಛʹήʔϜͷΠϕϯτ։࢝࣌ʹݕࡧγεςϜͷτϥϑΟοΫ͕૿େ͢Δ ͜ͱ͕ఆ͞Εͨ • ·ͨͦΕͱಉ࣌ʹΠϕϯτͷใΛϦΞϧλΠϜͰߋ৽͍ͯͨ͘͠Ίɺ OFFSETϕʔεͩͱ1݅ͱ2݅ʹಉ͡ใ͕ग़ݱ͢ΔՄೳੑ͕͋ͬͨͨ Ίɺࠓճର֎ͱͨ͠ɻ
໎ͬͨ݁Ռ
໎ͬͨ݁Ռ
None
͜Ε
ϖʔδωʔγϣϯ • ϖʔδωʔγϣϯ Elasticsearch ͷ Scroll Λ͏͜ͱʹ • ͜ͷػೳΛ͑ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞Εͯେৎͦ͏ •
ϢʔβʔମݧΛଛͳΘͣʹݕࡧ݁ՌΛදࣔͰ͖ͦ͏
ൃੜ
ൃੜ • ݕࡧ݁Ռ͕ݕࡧΛ͢Δͨͼʹҟͳͬͨ • ࠷ॳݪҼ͕Α͘Θ͔Βͳ͔ͬͨ • Α͘Α͘ௐΔͱ AWS ͷ Internal
Elastic Load Balancing Ͱෛՙࢄͤ͞ ͍ͯΔ͜ͱʹؾ͍ͮͨ • Elasticsearch ͷ Scroll ͕ฦ͕͢ҟͳΔͷͨΓલͩͬͨ AWS ͷ Sticky Session Λͬͯϖʔδωʔγϣϯ͢ΔΠϯελϯεΛಉ͡ ରʹ͢ΔΑ͏ʹͨ͠
ൃੜ ϔομ͔ΒAWS ELBΛऔಘ͢Δ ηογϣϯใͱͯ͠อ࣋͞Ε͍ͯΕ༻͢Δ
ݕࡧ݁Ռ͕ਖ਼ৗʹ
ٕज़બఆ
ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • ϓϩμΫγϣϯڥΛߏங • QA (Quality Assurance) Λ࣮ࢪ͢ΔͨΊʹϓϩμΫγϣϯڥͷߏஙΛ͢Δඞ ཁ͕͋ͬͨ •
iOS, AndroidΤϯδχΞɺσΟϨΫλʔ͔Β࣮ࡍͷσʔλΛݟͯ֬ೝΛ͠ ͍ͨཁʹ͑ΔͨΊ • ϓϩμΫγϣϯڥͷ Elasticsearch ʹهࣄΛೖ͍ͯ͘͠ • هࣄͷ͕݅ेສ݅͋Γ͕͔͔࣌ؒΔ͠ɺࣦഊ͢Δͱೖ͠͠ͳͷ Ͱਏ͔ͬͨ
ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • QA (Quality Assurance) ͷ࣮ࢪ • ΠϯςάϨʔγϣϯςετ ݉Ͷͯ iOS,
Android ΤϯδχΞɺαʔόʔαΠ υΤϯδχΞɺσΟϨΫλʔɺ෦ͷશһ͕ू݁ͯ͠ɺ࣮ࡍʹεϚϗΛ৮Δɻ ͜͜Ͱग़ͨόάػೳͷ࣮ʹ͍ͭͯͷϑΟʔυόοΫΛड͚ͯ ௐΛ͍ͯ͘͠
ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • ෛՙςετͷ࣮ࢪ • ΠϯϑϥΤϯδχΞʹґཔΛ͠ɺ Gatling Λ༻͍ͯෛՙςετͷ࣮ࢪΛߦͬ ͨɻ
ࠓޙͷ՝
ࠓޙͷ՝ • ੵΈͨ͠՝͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰͦΕΛվम͍ͯ͘͠ • R&DνʔϜ࠷ۙ৽ઃ͞ΕͨνʔϜͰ͢ɻ • ݕࡧγεςϜͷϝϯςφϯεํੑɺػցֶश etc Λѻ͏ઐͷνʔϜ Ͱ͢ɻ
• ҙ֎ͱݕࡧ͕ΘΕ͍ͯͨ • ҙ֎ͱΞϓϦଆͰݕࡧ͕ΘΕ͍ͯͨ • ߏͷݟ͠ɺAPIͷݟ͠ͳͲ • ࣙॻ • ࣙॻʹొ͢ΔϫʔυΛ୭͕ొ͢Δͷ͔ͱ͍͏՝͕͋Δ • ͜Ε͕Ұ൪ͭΒ͍ • ΠϯϑϥͷߏΛվળ͢Δʢେ୩͞ΜʹΑΔࢦఠ͕͋ͬͨʣ • ϚελʔϊʔυΛશ໘ʹग़͍ͯ͠ΔͷͰޙΖʹͳΔΑ͏ʹ͍࣋ͬͯ͘
ࠓޙͷ՝ • ੵΈͨ͠՝͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰͦΕΛվम͍ͯ͘͠ • ݕࡧਫ਼ͷ্ • Ϣʔβʔ͝ͱʹ͓͚ΔΛͬͯϢʔβʔʹରͯ͠దͳݕࡧ݁ՌΛฦ ͢ • ͨͱ͑ɺϢʔβʔ͕ొ͍ͯ͠ΔήʔϜͷ༏ઌΛߴΊΔͳͲ
• αδΣετػೳͷ࣮ • Α͘ݕࡧ͞ΕΔΩʔϫʔυͳͲΛαδΣετͰ͖ΔΑ͏ͳΈ • ଞϓϩδΣΫτͷల։ • ΞϓϦʹཹ·Β͍͚ͣ͛ͯΔΑ͏ʹ͢Δ • ͦͷͨΊɺιʔείʔυͷΛߦ͏ඞཁ͕͋ͬͨΓ͢ΔͷͰ͍ͬͯ͘ • etc…
༨ஊ
ϦϦʔεͨ͋͠ͱ
ϦϦʔεͨ͋͠ͱ ৼΓฦΔͱ։ൃظؒ 1.5 ϲ݄΄ͲͰ͜Ε͚ͩͷίϛοτΛͯ͠͠·ͬͨ
ϦϦʔεͨ͋͠ͱ ։ൃʹܞΘͬͨਓͰɺৼΓฦΓΛߦͬͨ
ϦϦʔεͨ͋͠ͱ χΫΞβϒͰম৯ͨ
ϦϦʔεͨ͋͠ͱ GameWith Tech Blog Ͱॻ͍ͯΈͨɻͯͿ͍ͬͺ͍͍ͭͯͯخ͍͠ https://tech.gamewith.co.jp/entry/2018/09/21/122154
ϦϦʔεͨ͋͠ͱ େ୩͞Μ͔ΒϦϓϥΠΛΒ͑ͨ
ͦΕͰɺ͍Ζ͍Ζʹ໘ͨ͠
໘ͨ͠ •ϦϦʔεͨ͋͠ͱʹ͍͔ͭ͘όά͕ग़͖ͯͨ •GameWith ຊମαΠτͷରԠ͕૿͑ͨ •໘ͷԠื͕ଟ͍࣌ظʹॏͳͬͯɺ໘ϥογϡ •MTG͕ଟ͘ͳͬͨ •ϦϦʔεऴΘͬͨ͋ͱʹΞαΠϯͨͯ͢͠ͷλεΫͷܹ ͕Γͳ͍ͱײ͡Δ
ͦΕͰͳΜͱ͔ϦϦʔεͰ͖ͨͷͰ ΊͰͨ͠ΊͰͨ͠
ൃදҎ্Ͱ͢
THANK YOU