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
14k
Webサービスにて200週連続で新機能をリリースする舞台裏 / builderscon tokyo 2018
KASUYA, Daisuke
September 05, 2018
Tweet
Share
More Decks by KASUYA, Daisuke
See All by KASUYA, Daisuke
エンジニアリングマネージャーの成長の道筋とキャリア / Developers Summit 2025 KANSAI
daiksy
7
5.6k
はてなの開発20年史と DevOpsの歩み / DevOpsDays Tokyo 2025 Keynote
daiksy
6
4k
わたしがEMとして入社した「最初の100日」の過ごし方 / EMConfJp2025
daiksy
22
14k
はてなのチーム開発一巡り / Hatena Engineer Seminar 30
daiksy
0
880
ふりかえりカンファレンスLT/Get Wild
daiksy
0
2k
スクラムマスターの採用事情 / scrum fest fukuoka 2023
daiksy
1
3k
スクラムのスケールとチームトポロジー / Scaled Scrum and Team Topologies
daiksy
1
1.5k
Scrum@Scaleの理論と実装 / RSGT2022
daiksy
2
11k
リモートワークに最適なスクラムチームの人数についての仮説 / Kyoto Agile 2021
daiksy
0
300
Other Decks in Technology
See All in Technology
VLAモデル構築のための AIロボット向け模倣学習キット
kmatsuiugo
0
250
Lambda Web AdapterでLambdaをWEBフレームワーク利用する
sahou909
0
170
SRE NEXT 2026 CfP レビュアーが語る聞きたくなるプロポーザルとは?
yutakawasaki0911
1
440
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
190
プラットフォームエンジニアリングはAI時代の開発者をどう救うのか
jacopen
7
3.8k
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
900
OSC仙台プレ勉強会 AlmaLinuxとは
koedoyoshida
0
190
Go標準パッケージのI/O処理をながめる
matumoto
0
230
進化するBits AI SREと私と組織
nulabinc
PRO
1
250
詳解 強化学習 / In-depth Guide to Reinforcement Learning
prinlab
0
290
コンテキスト・ハーネスエンジニアリングの現在
hirosatogamo
PRO
4
490
楽しく学ぼう!ネットワーク入門
shotashiratori
1
470
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
150
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Leo the Paperboy
mayatellez
4
1.5k
Evolving SEO for Evolving Search Engines
ryanjones
0
160
The browser strikes back
jonoalderson
0
810
Information Architects: The Missing Link in Design Systems
soysaucechin
0
830
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
390
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ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ