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サービスにて200週連続で新機能をリリースする舞台裏 / builderscon tok...
Search
KASUYA, Daisuke
September 05, 2018
Technology
8
13k
Webサービスにて200週連続で新機能をリリースする舞台裏 / builderscon tokyo 2018
KASUYA, Daisuke
September 05, 2018
Tweet
Share
More Decks by KASUYA, Daisuke
See All by KASUYA, Daisuke
はてなのチーム開発一巡り / Hatena Engineer Seminar 30
daiksy
0
570
ふりかえりカンファレンスLT/Get Wild
daiksy
0
1.8k
スクラムマスターの採用事情 / scrum fest fukuoka 2023
daiksy
0
2.5k
スクラムのスケールとチームトポロジー / Scaled Scrum and Team Topologies
daiksy
1
1.2k
Scrum@Scaleの理論と実装 / RSGT2022
daiksy
2
9.8k
リモートワークに最適なスクラムチームの人数についての仮説 / Kyoto Agile 2021
daiksy
0
240
スクラムを軸に据えた キャリア戦略 / Scrum Fest Osaka 2021
daiksy
2
6.8k
インフラ障害対応演習LT版 / evacuation drill of systems
daiksy
1
730
この半年で変わったものと変わらないもの - SaaS開発の現場より / Developers Summit 2020 Summer
daiksy
0
5.1k
Other Decks in Technology
See All in Technology
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.3k
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
220
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
230
社内で最大の技術的負債のリファクタリングに取り組んだお話し
kidooonn
1
550
アジャイルでの品質の進化 Agile in Motion vol.1/20241118 Hiroyuki Sato
shift_evolve
0
150
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
150
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
Making your applications cross-environment - OSCG 2024 NA
salaboy
0
190
Taming you application's environments
salaboy
0
190
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
110
Lexical Analysis
shigashiyama
1
150
Featured
See All Featured
Facilitating Awesome Meetings
lara
50
6.1k
A Philosophy of Restraint
colly
203
16k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
4 Signs Your Business is Dying
shpigford
180
21k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Site-Speed That Sticks
csswizardry
0
25
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Automating Front-end Workflow
addyosmani
1366
200k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
KATA
mclloyd
29
14k
Transcript
WebαʔϏεʹͯ200ि࿈ଓͰ ৽ػೳΛϦϦʔε͢Δཪ 2018-09-07 builderscon tokyo 2018 גࣜձࣾͯͳ | പ୩ େี
(@daiksy)
Who are you? പ୩ େี(@daiksy) ▸ גࣜձࣾͯͳ. ▸ Mackerel σΟϨΫλʔ
▸ ScalaMatsuri, ScalaؔSummit ▸ ૉਓDJ
Who are you? ஶॻ
͓खݩͷQRίʔυ͔Βɺ ͥͻϑΟʔυόοΫΛ͓ئ͍͠·͢
https://mackerel.io WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
https://mackerel.io WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
https://mackerel.io WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
https://mackerel.io WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
Mackerel ▸ 201311݄ʹ࠷ॳͷίϛοτ ▸ 20145݄8 βϦϦʔε ▸ 20149݄17 ਖ਼ࣜϦϦʔε ▸
201411݄1 daiksyೖࣾ ▸ 20166݄10 100ि࿈ଓϦϦʔε ▸ 20187݄2 200ि࿈ଓϦϦʔε WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
࿈ଓϦϦʔε
࿈ଓϦϦʔε ▸ ϢʔβʔʹͱͬͯՁͷ͋ΔػೳΛຖिඞͣϦϦʔε͢Δ ▸ όάϑΟοΫεϝϯςφϯεϦϦʔεʮ࿈ଓϦϦʔεʯ ͷఆٛʹؚ·ͳ͍ ▸ ຖि݄༵ʢੲຖि༵ۚʣʹ৽ػೳͷ͓ΒͤΛϒϩά ͰपˍϝʔϦϯάϦετ৴ ▸
ͨͩ࢝͠/ΰʔϧσϯΟʔΫ/͓ຍظؒআ͘ʢզʑ ϗϫΠτاۀͳͷͰ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
࿈ଓϦϦʔε WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
ͳΜͷͨΊʹ࿈ଓϦϦʔε Λ͍ͬͯͨͷ͔
▸ MackerelͱͯϛχϚϜͳঢ়ଶ͔Βελʔτͨ͠ ▸ Slack௨ -> ਖ਼ࣜϦϦʔεͷ2िؒޙ ▸ αʔϏεϝτϦοΫͷࢹ -> ਖ਼ࣜϦϦʔεͷ3ϲ݄ޙ
▸ ࠓͰͨΓલͷػೳͷ΄ͱΜͲະ࣮ͷঢ়ଶͰελʔ τ ͳͥʁ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ॳػೳ։ൃͷεϐʔυײ͕ސ٬ʹରͯ͠ଋͰ͖Δগ ͳ͍ՁͷͻͱͭͰ͋Γɺ༏Ґੑͩͬͨ ▸ ॳ࿈ଓϦϦʔεΛҙ͍ࣝͯ͠ͳ͔͕ͬͨɺ͋Δ࣌͑ͨ Β50ि࿈ଓϦϦʔεલͩͬͨ ▸ ຖि࿈ଓϦϦʔεΛΞϐʔϧͨ͠ͱ͜Ζɺސ٬֫ಘͷେ͖ͳ ثͱͳͬͨ ▸
·ͣ100िɺ࣍150िͱগͣͭ͠ඪΛ৳ͨ͠ ͳͥʁ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
Ͳ͏ͬͯ ࿈ଓϦϦʔεΛҡ͔࣋ͨ͠
Mackerel ͷγεςϜߏ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
Mackerel ͷϚΠΫϩαʔϏείϯϙʔωϯτ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
Mackerel ͷϦϦʔεࠂରൣғ ▸ mackerelຊମ ▸ WebγεςϜ ▸ ֎ܗࢹ, AWS, AzureͳͲͷΫϩʔϥ
▸ ҟৗݕίϯϙʔωϯτ ▸ ͯͳࣾʹͯ։ൃ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ OSS ▸ mackerel-agent ▸ mackerel-agent-plugins ▸ go-check-plugins ▸ mkr
(CLIπʔϧ) ▸ ͯͳࣾͰͷ։ൃ + ϢʔβʔʹΑΔίϯτϦϏϡʔτ ▸ OSSͷΈͷϦϦʔε200࿈ଓϦϦʔεதʹ30ճ΄Ͳ Mackerel ͷϦϦʔεࠂରൣғ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ϓϩμΫτΦʔφʔ ▸ σΟϨΫλʔ ← ΅͘͜͜ ▸ ΤϯδχΞ ▸ σβΠφ
▸ CRE ▸ ༁ ։ൃνʔϜͷମ੍ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ΤϯδχΞ ▸ 5 ~ 8໊ (1໊͕ςοΫϦʔυʣ ▸ σβΠφ ▸
1ʙ2໊ ։ൃνʔϜͷମ੍ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ఆظϦϦʔεि2ճ ▸ Րɾ ▸ ϦϦʔε͕ॕલͷ߹ௐ ։ൃνʔϜͷମ੍ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
։ൃνʔϜͷମ੍ stagingڥ PullRequest࡞ & ϨϏϡʔ ࣗಈςετOK -> stagingڥʹࣗಈө ຖिՐɾʹͦͷ࣌ͷstagingڥͱͷ͕ࠩຊ൪ө͞ΕΔ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ि࣍൪ (ϩʔςʔγϣϯ) ▸ ϦϦʔε୲ (Ր) ▸ ϦϦʔε୲ () ▸
αϙʔτ୲ ▸ OSS ։ൃνʔϜͷମ੍ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ि࣍൪ (ϩʔςʔγϣϯ) ▸ ϦϦʔε୲ ▸ ϦϦʔε࡞ۀͷओ୲ ▸ αϙʔτ୲ ▸
Ϣʔβʔ͔Βͷ͓͍߹Θͤͷٕज़ௐࠪΛ୲ ▸ OSS ▸ Ϣʔβʔ͔Βͷmackerel-agentͳͲͷPull Request, IssueΛݟΔ୲ ։ൃνʔϜͷମ੍ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
։ൃνʔϜͷମ੍ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ stagingڥͰͷಈ࡞֬ೝ ▸ ֤छϝτϦοΫɾΤϥʔϩάͳͲͷ؍ ▸ ຊ൪ڥʹσϓϩΠ ▸ ຊ൪ڥͰͷಈ࡞֬ೝ ▸ ֤छϝτϦοΫͷ؍ɾΤϥʔϩάͳͲͷ؍
▸ ҟৗ͕͋ΕϩʔϧόοΫ͢Δ ▸ શମͷॴཁ࣌ؒ2࣌ؒ΄Ͳ ϦϦʔεखॱ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ 2िؒεϓϦϯτͷεΫϥϜܗࣜ(มଇత) ▸ εϓϦϯτܭը ▸ ։ൃ ▸ ՐɾʹఆظϦϦʔε ▸ ݄༵ʹࠂ
▸ 2िؒͷ࠷ޙͷ༵ۚʹৼΓฦΓ ։ൃͷϦζϜ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ϓϩμΫτΦʔφ͕࡞͢ΔதɾظͷϩʔυϚοϓ ▸ 3ͷظϩʔυϚοϓ ▸ ࢛ظ͝ͱͷதظϩʔυϚοϓ ▸ CREʹΑΔϢʔβʔώΞϦϯάɻαϙʔτʹدͤΒΕΔཁ ▸ ΤϯδχΞ͔ΒϘτϜΞοϓͰఏҊ͞ΕΔվળʢΞϓϦέʔ
γϣϯϑϨʔϜϫʔΫϛυϧΣΞͷόʔδϣϯΞοϓͳ Ͳʣ ܭը ʢ։ൃͷΠϯϓοτʣ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ظλεΫ ▸ ։ൃʹ͍ظؒΛཁ͢Δ։ൃλεΫ (ϲ݄~1) ▸ ࠷ۙͩͱҟৗݕػೳ, ίϯςφରԠͳͲ͕͜Εʹ֘ ▸ ओ୲ΤϯδχΞΛΞαΠϯ͠ɺϓϩδΣΫτԽ
▸ ظλεΫࡉ͔͍୯ҐͰϓϧϦΫΤετ͕࡞ΒΕͯɺຖिϚʔδ & ϦϦʔ ε͞Ε͍ͯ·͢ ▸ ظλεΫ ▸ 1εϓϦϯτ()Ͱ։ൃ͕ऴΘΔλεΫ ܭը ʢ։ൃλεΫͷྨʣ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ݄: ΞαΠϯ͞Ε͍ͯΔظλεΫΛਐΊΔ ▸ Ր: ޕલ: ϦϦʔε൪, ޕޙ: ظλεΫΛਐΊΔ ▸
ਫ: ޕલ: ৽ϝϯόʔͱϖΞϓϩ, ޕޙ: ظλεΫΛਐΊΔ ▸ : དྷिࠂ༧ఆͷظλεΫΛਐΊΔ ▸ ۚ: ޕલ: 1࣌ؒ΄ͲͰऴΘΓͦ͏ͳόάमਖ਼ΛΔ, ޕޙ: ։ ൃݴޠͷόʔδϣϯΞοϓʹνϟϨϯδͯ͠ΈΔ ͱ͋ΔΤϯδχΞͷ1िؒͷ༷ࢠ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ όοΫϩάʹରͯ͠ΤϯδχΞͷ100%ՔಇΛٻΊͳ͍ ▸ ͍͍ͩͨ20~30%͘Β͍༨ྗ͕ΔΑ͏ʹܭը͢Δ ▸ ٕज़తෛ࠴ͷฦࡁͳͲɺΤϯδχΞ͕ࣗओతʹऔΓΊ Δ׆ಈͷ༨Λ͓ͯ͘͠ ▸ ༨ྗͰ͜ͳͨ͠খ͞ͳλεΫ͕ɺຖिࠂͷ༗༻ͳωλʹͳ Δͱ͖͋Δ
։ൃܭըͷϙΠϯτ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ϚΠΫϩϚωδϝϯτઈରͩΊ ▸ ΨνΨνʹܭըͯ͠͠·͏ͱɺ͔͑ͬͯಈ͖͕औΕͳ͘ͳ Δ ▸ ࣗͨ͠νʔϜΛ࡞ΔͨΊʹԿΑΓ༨ྗ͕ඞཁ ։ൃܭըͷϙΠϯτ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ͘։ൃ͍ͯ͠Δͱɺҟಈɾୀ৬ͳͲͰϝϯόʔ͚ͬ͜͏ ೖΕସΘΔ ▸ ि୯ҐͰϦϦʔεΛܧଓ͍ͯ͠ΔͱɺϝϯόʔೖΕସ͑ʹΑ Δҡ࣋తͳઓྗͷԼ͚ͬ͜͏ӨڹΛड͚Δ ▸ ޮΑ͘։ൃ͢ΔͨΊʹɺϝϯόʔͷಘखɾෆಘखΛѲ͠ ͓ͯ͘ͷॏཁ ϝϯόʔͷೖΕସΘΓ
WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
εΩϧϚοϓ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ νʔϜ͕ҡ͖࣋͢εΩϧͷՄࢹԽ ▸ ҟಈୀ৬ʹΑͬͯಛఆͷεΩϧ͕ΒͣʹࣦΘΕΔͱ͍͏ ͜ͱ͕ͳ͍ ▸ νʔϜͷεΩϧόϥϯεΛѲ͢Δ͜ͱͰɺޮతͳ։ൃΛ ܭը͢Δ͜ͱ͕Ͱ͖Δ εΩϧϚοϓ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ຖिࠂΛνʔϜͷ࠷ॏཁίϛοτϝϯτͱҐஔ͚ͮɺνʔϜશһ͕ͦ ΕΛࢦͯ͠ຖࣄΛ͢Δ ▸ ͍͟ͱ͍͏ͱ͖ʹඋ͑ͯɺ1, 2͘Β͍Ͱ࣮Ͱ͖ͦ͏ͳ༏ઌ͕ͦ Ε΄Ͳߴ͘ͳ͍λεΫΛ͍͔ͭ͘ετοΫ͓ͯ͘͠ ▸ ίϛϡχςΟͷखॿ͚ΊͪΌͪ͘Ό͋Γ͕͍ͨͰ͢… (OSSͷίϯτ
ϦϏϡʔτ) ▸ ͚ͩ͜͜ͷɺ࣮ऴΘ͍ͬͯΔ͚Ͳདྷिͷωλ͕ͳ͍͔Β·ͩϦϦʔ ε͠ͳ͍Ͱ͓͜͏ɺͱ͍͏͜ͱͯ͠·ͨ͠ʢ࡞Γஔ͖ͱݺΜͰ͍ͨ ຖिϦϦʔεΛܧଓ͢Δίπ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
200िΛ۠Γʹ ࿈ଓϦϦʔεΛΊ·͢
▸ ϓϩμΫτͱͯ͠ɺओཁͳػೳ͕ग़ἧͬͨ ▸ ॳϓϩμΫτΦʔφʔͷߏͨ͠ػೳΛ͋Β͔࣮ͨ͠ ऴ͑ͨ ▸ εϐʔυײେ͕ͩɺࠊΛਾ͑ͨػೳ։ൃͷํ͕ސ٬ʹͱͬ ͯେ͖ͳՁʹͳΔϑΣʔζʹདྷͨͱஅ ▸ ελʔτΞοϓظͷऴྃ
ͳͥຖिϦϦʔεΛࢭΊͨͷʁ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
▸ ճΓͷվળ͕Γ͘͢ͳͬͨ ▸ Playframework, Scala, sbtͷόʔδϣϯ͕Ұؾʹ৽͘͠ ͳͬͨ ▸ νʔϜʹ·ͩຖिϦϦʔεͷهԱ͕͍ͬͯΔͷͰɺεϐʔ υײΛҡ࣋ͭͭ͠ࠊΛਾ͑ͨ։ൃ͕Ͱ͖Δ
▸ 1८ͯ͠ʮຖिϦϦʔεΛΒͳ͍ͷ͕ͨΓલʯʹͳͬͨ ͱ͖ʹͲ͏ͳΔ͔ͳʁ ຖिϦϦʔεΛऴ͑ͯΈͯ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ