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
はてなの開発20年史と DevOpsの歩み / DevOpsDays Tokyo 2025 Keynote
daiksy
6
2.2k
わたしがEMとして入社した「最初の100日」の過ごし方 / EMConfJp2025
daiksy
16
8.7k
はてなのチーム開発一巡り / Hatena Engineer Seminar 30
daiksy
0
780
ふりかえりカンファレンスLT/Get Wild
daiksy
0
1.9k
スクラムマスターの採用事情 / scrum fest fukuoka 2023
daiksy
0
2.8k
スクラムのスケールとチームトポロジー / Scaled Scrum and Team Topologies
daiksy
1
1.4k
Scrum@Scaleの理論と実装 / RSGT2022
daiksy
2
10k
リモートワークに最適なスクラムチームの人数についての仮説 / Kyoto Agile 2021
daiksy
0
270
スクラムを軸に据えた キャリア戦略 / Scrum Fest Osaka 2021
daiksy
2
7.1k
Other Decks in Technology
See All in Technology
MCPで変わる Amebaデザインシステム「Spindle」の開発
spindle
PRO
3
2.9k
実践!カスタムインストラクション&スラッシュコマンド
puku0x
0
150
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
370
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
320
シークレット管理だけじゃない!HashiCorp Vault でデータ暗号化をしよう / Beyond Secret Management! Let's Encrypt Data with HashiCorp Vault
nnstt1
3
220
生成AI時代のデータ基盤
shibuiwilliam
6
3.7k
生成AIでセキュリティ運用を効率化する話
sakaitakeshi
0
240
異業種出身エンジニアが気づいた、転向して十数年経っても変わらない自分の武器とは
macnekoayu
0
300
Kiroと学ぶコンテキストエンジニアリング
oikon48
6
9.2k
AI時代に非連続な成長を実現するエンジニアリング戦略
sansantech
PRO
3
1.1k
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
200
Nstockの一人目エンジニアが 3年間かけて向き合ってきた セキュリティのこととこれから〜あれから半年〜
yo41sawada
0
210
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.6k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Thoughts on Productivity
jonyablonski
70
4.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
For a Future-Friendly Web
brad_frost
180
9.9k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Building Adaptive Systems
keathley
43
2.7k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
4 Signs Your Business is Dying
shpigford
184
22k
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ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δཪ