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
rubyhiroba
Search
Ryoichi SEKIGUCHI
September 21, 2014
Technology
6
1.2k
rubyhiroba
Ryoichi SEKIGUCHI
September 21, 2014
Tweet
Share
More Decks by Ryoichi SEKIGUCHI
See All by Ryoichi SEKIGUCHI
Ruby makes everything
ryopeko
0
63
正しく失敗しながら進むプロダクト開発/railsdm2018
ryopeko
10
5.5k
CircleCI を使って自動(ほぼ)でセキュリティアップデート / circleci meetup
ryopeko
4
420
Kaizen Platform でやっている Kaizen Week というイベントについて / kaize week tokyurubykaigi 10
ryopeko
2
970
mysql casual talks vol7
ryopeko
0
2.2k
devsumi2014-dena-bootcamp2014
ryopeko
39
63k
jtrk02
ryopeko
0
5.3k
DeNA Bootcamp 2013
ryopeko
15
7.2k
自分の道具を知る
ryopeko
10
2k
Other Decks in Technology
See All in Technology
プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping
ohbarye
5
390
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
260
生産性向上チームの紹介
cybozuinsideout
PRO
1
870
【NW X Security JAWS#3】L3-4:AWS環境のIPv6移行に向けて知っておきたいこと
shotashiratori
0
380
エンジニアのキャリアをちょっと楽しくする3本の軸/Three Pillars to Make an Engineer's Career More Enjoyable
kwappa
0
2.7k
どうするコスト最適化のトレードオフ
tetsuyaooooo
1
530
Building Dashboards as a Hobby
egmc
0
240
require(ESM)とECMAScript仕様
uhyo
3
780
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
0
330
Gitlab本から学んだこと - そーだいなるプレイバック / gitlab-book
soudai
4
440
Vertex AI を中心に 生成AIのアップデートを共有します
kaz1437
0
310
On Your Data を超えていく!
hirotomotaguchi
2
690
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
92
4.8k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Docker and Python
trallard
34
2.7k
Visualization
eitanlees
136
14k
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.5k
Building a Scalable Design System with Sketch
lauravandoore
456
32k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
78
43k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
227
16k
How to Ace a Technical Interview
jacobian
272
22k
Documentation Writing (for coders)
carmenintech
60
3.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
Agile that works and the tools we love
rasmusluckow
325
20k
Transcript
Rails ʹ͓͚Δ ֎෦γεςϜͱͷεϜʔζͳ ౷߹։ൃ ؔޱ྄Ұ ! ryopeko " ryopeko 3VCZ)JSPCBੜ׆ൃදձ
ؔޱ ྄Ұ # ryopeko " ryopeko • ύʔϑΣΫτRuby ڞஶऀ •
σϒαϛ2014εϐʔΧʔ • ϕετεϐʔΧʔ 2Ґड • ࠷ۙਓ͔ؒͨͪΒෳDBͱݺ Ε͍ͯΔ
IUUQBENJOTCBS
֎෦γεςϜΛͬͨ ৽ΞϓϦέʔγϣϯ։ൃ
IUUQEJBSZTIVDSFBNOFUCMPHSVCZLBJHJMJHIUOJOHUBMLTIUNM lΈΜͳͬͱಠࣗݚڀͷՌΛൃද͢Δͱ͍͍ͱࢥ͏
֎෦γεςϜͱͷܨ͗͜Έ $ API % RPC DB ࢀর
ࠓճDBΛڞ༗͢Δ߹ͷ ख๏ʹ͍ͭͯͷ͓
' "QQ
' "QQ ' "QQ
' "QQ ' "QQ ' "QQ
' "QQ ' "QQ ' "QQ
DBڞ༗ͨ͠߹ʹ ʹͳͬͯ͘Δ͜ͱ
ෳਓͰ։ൃ͍ͯ͠Δ߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT
ෳਓͰ։ൃ͍ͯ͠Δ߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT TFMFDU
ෳਓͰ։ൃ͍ͯ͠Δ߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT TFMFDU TFMFDU
ෳਓͰ։ൃ͍ͯ͠Δ߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT TFMFDU EFMFUF TFMFDU
ෳਓͰ։ൃ͍ͯ͠Δ߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT TFMFDU EFMFUF TFMFDU
Unit Test Ͱಉ༷
Unit Test ࣌ͷڞ༗DBͷࠔΓࣄ • ςετ༻ͷDB͕ڞ༗͞ΕͯΔͱ݁ՌʹӨڹ • ςετ༻ͷDB͕ଘࡏ͠ͳ͍߹DBͷϦΫ ΤετΛϞοΫ͢Δඞཁ • ςετσʔλΛ༻ҙ͢Δͷ͕͘͠ͳΔ
ڞ༗DBͷεΩʔϚมߋʹ ै͢Δͷ͕େม
͜͜·ͰͰ σϝϦοτΛ·ͱΊΔͱ…
DBڞ༗ͨ͠߹ͷσϝϦοτ • ෳਓͰͷ։ൃ࣌ʹσʔλෆ߹ͱͳΔ • Unit Test ࣌ʹڞ༗DBͷऔΓѻ͍͕ࡶʹͳΔ • ڞ༗DBͷεΩʔϚมߋʹै͢Δͷ͕େม
ΓखݩʹDB͕͋ͬͯ΄͍͠… (Rails ͬͯखݩʹDB࡞Γ·͢͠…)
Ͱखݩʹ ࣋ͬͯΈ·͠ΐ͏
DBڞ༗ͨ͠߹ͷσϝϦοτ • ෳਓͰͷ։ൃ࣌ʹσʔλෆ߹ͱͳΔ • Unit Test ࣌ʹڞ༗DBͷऔΓѻ͍͕ࡶʹͳΔ • ڞ༗DBͷεΩʔϚมߋʹै͢Δͷ͕େม ্ͭղܾͦ͠͏ʜ
खݩʹ࣋ͭ߹ͷ σϝϦοτʹ͍ͭͯߟ͑ͯΈΔ
खݩʹDBΛ࣋ͬͨ߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ରʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯ
ࢮ͵ • ݩͷDBεΩʔϚΛΔज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
σʔλͷ४උ͕େม
σʔλͷ४උ͕େม • db:seed తͳΈͰҰׅͰ༻ҙ͢Δ • ֎෦͔Βࢀর͢ΔͷΈͷDBͷ߹ɺσʔλύ λʔϯΛཏͰ͖Δͱ͍͏ϝϦοτ • େมͳͷύλʔϯͷϝϯς •
(Ͳ͏ͤςετͰඞཁͩ͠)
खݩʹDBΛ࣋ͬͨ߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ରʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯࢮ
͵ • ݩͷDBεΩʔϚΛΔज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
Slave ʹߋ৽ܥΫΤϦ
Slave ʹߋ৽ܥΫΤϦ • # eagletmt/switch_point Λ͏͜ͱͰղܾ • Slave ʹߋ৽ܥΫΤϦΛଧͱ͏ͱ͢Δͱྫ֎ •
ෳDBΛऔΓѻ͏͜ͱʹͳΔͷͰ switch_point ͱͯ༗ޮ • ࣗͣͱ M/S Λҙࣝ͢ΔΑ͏ͳએݴతهड़ʹͳΔ
IUUQTHJUIVCDPNFBHMFUNUTXJUDI@QPJOUCMPCNBTUFSTQFDNPEFMTSC TXJUDI@QPJOUͷઃఆྫ Ұ෦ൈਮ
IUUQTHJUIVCDPNFBHMFUNUTXJUDI@QPJOUCMPCNBTUFSTQFDNPEFMTSC TXJUDI@QPJOUͷઃఆྫ Ұ෦ൈਮ
खݩʹDBΛ࣋ͬͨ߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ରʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯࢮ
͵ • ݩͷDBεΩʔϚΛΔज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
ݩͷDBͷεΩʔϚΛΔज़
ݩͷDBͷεΩʔϚΛΔज़ • ۀͰ͍ͬͯΔεΩʔϚશͯ git Ͱཧ͞Ε͍ͯΔ • ͜͜ΛݟΕৗʹ࠷৽͕͋Δͱ͍͏ঢ়ଶ • ͜ͷϦϙδτϦͷεΩʔϚใΛ༻͢ΔΑ͏ʹσϓ ϩΠϓϩηεʹΈࠐ·Ε͍ͯΔ
• ฐࣾͷࣄྫʹؔΘΒͣɺmigration ֎ͷεΩʔϚͲ͜ ͔͠ΒʹҰݩཧ͞Ε͍ͯΔ͖
खݩʹDBΛ࣋ͬͨ߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ରʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯࢮ
͵ • ݩͷDBεΩʔϚΛΔज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
ݩͷDBͷεΩʔϚΛ खݩͰ؆୯ʹ࠶ݱ͢Δज़
ݩͷDBͷεΩʔϚΛ؆୯ʹ࠶ݱ͢Δज़ • Ұݩཧ͞Ε͍ͯΔεΩʔϚΛDBʹద༻ ͢Δͷ໘ • ໘ͳঢ়ଶͩͱεΩʔϚ͕ߋ৽͞Εͳ͘ͳΔ • Rails ʹ db:migrate
ͱ͍͏Έ͕͋Δͷ Ͱɺͦͷఔʹద༻ίετΛԼ͍͛ͨ
લఏ:εΩʔϚ͕ϦϙδτϦ ཧ͞Ε͍ͯΔ
͜ͷΛ ղܾ͢ΔΈΛ࡞ͬͯΈͨ
' # (JU)VC"1*$BMM 42- &YFDVUF ( 42-
db_supplier # SZPQFLPEC@TVQQMJFS
db_supplier (settings) DPOpHEBUBCBTFZNM
db_supplier (settings) DPOpHFOWJSPONFOUTEFWFMPQNFOUSC
DEMO
None
None
db_supplier Ͱ࣮ݱ͞Εͨ͜ͱ • ؆୯ʹҰݩཧ͞ΕͨεΩʔϚΛద༻͢Δ͜ ͱ͕Ͱ͖ͨ • ςετ࣌ʹ migration, fixture ͕͑ΔΑ͏ʹ
ͳͬͨ • ֎෦ͷDBͷײ৺ࣄΛݮΒͤͨ
db_supplier Ͱ࣮ݱ͍ͤͨ͜͞ͱ • εΩʔϚʹߋ৽ʹඋ͑ͯͲͷ࣌ͷͷ͕ద ༻͞Ε͍ͯΔ͔Θ͔ΔΑ͏ʹ͢Δ • db:seed ૬ͷͷΈࠐΊΔΑ͏ʹ • etc…
खݩʹDBΛ࣋ͬͨ߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ରʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯࢮ
͵ • ݩͷDBεΩʔϚΛΔज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
·ͱΊ
·ͱΊ • ֎෦ͷDBΛͦͷ··ར༻͢Δͱ։ൃ࣌ʹڝ߹ ͯ͠͠·͏ • खݩʹDBΛ࣋ͭʹͯ͠ద༻͕໘ • εΩʔϚͷཧͱద༻͕ඞཁ • gem
࡞ͬͯղܾͨ͠
࠷ޙʹ…
ͱ͍͑… • DBڞ༗ີ݁߹ʹͳΔ • ϞσϧͷϩδοΫ͕ॏෳͯ͠ଘࡏ͢ΔՄೳੑ • ҙਤ͍ͯ͠ͳ͍ͱ͜ΖͰDBΛ৮ΒΕ͍ͯΔՄ ೳੑ • API
͕༻ҙͰ͖ΔͳΒ API Λબ͖͢