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
安全なリリースに向けた技術的アプローチ
Search
ShoheiMitani
July 18, 2019
Programming
1
470
安全なリリースに向けた技術的アプローチ
大規模な新機能のリリース時に利用した段階的リリースの実装パターンの紹介をします。
ShoheiMitani
July 18, 2019
Tweet
Share
More Decks by ShoheiMitani
See All by ShoheiMitani
自己実現のためのキャリア選択 / Choosing a Career Path for Self-Realization
shoheimitani
1
180
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
3
1.3k
法律に準拠した本人確認システムを0から作った話 〜家計簿プリカB/43でのeKYC開発実例〜
shoheimitani
2
1.1k
初めましてが多いチームの形成期にEMが取り組んだ事
shoheimitani
1
200
ユーザーフレンドリーな取引明細のアーキテクチャ 〜VISAカードの複雑性に向き合う実践例〜
shoheimitani
5
3k
孤独のCTOグルメという やや奇抜な企画をやった目的と効果
shoheimitani
3
1.5k
VISAカードの裏側と “手が掛かる” 決済システムの育て方
shoheimitani
43
22k
32個のPRでリリースした依存度の高いコアなモデルの安全な弄り方
shoheimitani
8
7.6k
本番環境のRailsでYJITをONにしてみた結果
shoheimitani
0
200
Other Decks in Programming
See All in Programming
Ruby on Railroad: The Power of Visualizing CFG
ydah
0
230
Empowering Developers with HTML-Aware ERB Tooling @ RubyKaigi 2025, Matsuyama, Ehime
marcoroth
2
800
ASP.NETアプリケーションのモダナイゼーションについて
tomokusaba
0
130
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
300
Make Parsers Compatible Using Automata Learning
makenowjust
2
5.7k
[NG India] Event-Based State Management with NgRx SignalStore
markostanimirovic
1
170
Qiita Bash
mercury_dev0517
2
210
AI時代の開発者評価について
ayumuu
0
200
Dissecting and Reconstructing Ruby Syntactic Structures
ydah
2
1.2k
Youtube Lofier - Chrome拡張開発
ninikoko
0
2.5k
The Evolution of the CRuby Build System
kateinoigakukun
0
730
Vibe Coding の話をしよう
schroneko
12
3.1k
Featured
See All Featured
A better future with KSS
kneath
239
17k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
GraphQLとの向き合い方2022年版
quramy
46
14k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Making Projects Easy
brettharned
116
6.1k
Unsuck your backbone
ammeep
670
57k
How GitHub (no longer) Works
holman
314
140k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.2k
Building Applications with DynamoDB
mza
94
6.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
9
760
Transcript
Re:valua t ion https://fril.jp/ L ead & Delight User F
irst Ownership Fail Smart ҆શͳϦϦʔεʹ͚ٕͨज़తΞϓϩʔν
None
3BLVNB4FSWJDF%FWFMPQNFOU(SPVQ 3BLVUFO JOD ࡾ୩ণฏ !TIPIFJ !4IPIFJ.JUBOJ
"HFOEB w ҆શͳϦϦʔεͬͯʁʁ w ࠷ۙϦϦʔεͨ͠ػೳͷ w ةݥͳϦϦʔεΛ͙ͨΊʹ w
'FBUVSF5PHHMFT w 'FBUVSF5PHHMFT͕ղܾͯ͘͠ΕΔ͜ͱ w 'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ w 'FBUVSF5PHHMFTͷσϝϦοτ w ·ͱΊ
҆શͳϦϦʔεͬͯʁʁ
҆શͳϦϦʔεͬͯʁʁ ඦߦdઍߦͷมߋΛҰʹNBTUFSʹNFSHF
҆શͳϦϦʔεͬͯʁʁ ಈ࡞֬ೝςετΛਓͷΤϯδχΞ͔ͯ͠͠ͳ͍
҆શͳϦϦʔεͬͯʁʁ ϦϦʔεޙʹ୭ࢹ͠ͳ͍
҆શͳϦϦʔεͬͯʁʁ
࠷ۙϦϦʔεͨ͠ػೳͷ w ܾࡁʹ৽͍͠ࢧ͍ΦϓγϣϯΛՃ w ෆਖ਼ରࡦͷपลػೳՃ w ։ൃظؒɺؒ w
࠷ऴతʹे໊΄ͲͷΤϯδχΞ͕։ൃʹࢀՃ w dճఔϦϦʔε w ʹेສԁͷ͓͕ۚྲྀ௨͢ΔαʔϏε
࠷ۙϦϦʔεͨ͠ػೳͷ
w ػೳΛࡉ͔͍୯ҐͰϦϦʔε͠ w ϦϦʔεޙͷࢹΛଵΒͣ w ͕ൃੜͨ͠Β͙ʹ3PMMCBDL ةݥͳϦϦʔεΛ͙ͨΊʹ
Feature Toggles
'FBUVSF5PHHMFT 'FBUVSF5PHHMJOHJTBTFUPGQBUUFSOTXIJDIDBO IFMQBUFBNUPEFMJWFSOFXGVODUJPOBMJUZUPVTFST SBQJEMZCVUTBGFMZ IUUQTNBSUJOGPXMFSDPNBSUJDMFTGFBUVSFUPHHMFTIUNM0QT5PHHMFT
؆୯ʹݴ͏ͱʜ ৽چͷػೳΛ'MBHͷ0/0''ͰΓସ͑ΕΔΑ͏ʹ͢Δ ࣮ύλʔϯͷҰͭ 'FBUVSF5PHHMFT if Fril::FeatureToggles.v2_variation('sample_key', current_user, false)
# new_function else # existing_function end
ϥΫϚͷ'MBHͷछྨ w Ϣʔβʔ*%ͷඌܻϕʔεͰஈ֊ެ։ d w ϥϯμϜͳ֬Ͱͷެ։ w
ࢦఆͨ͠Ϣʔβʔ*%ϝʔϧΞυϨεͰͷެ։ ্هΛཧը໘͔Βࢦఆ͠ɺҙͷൣғͰػೳͷެ։Մೳ 'FBUVSF5PHHMFT
'FBUVSF5PHHMFT6TFDBTF <% if Fril::FeatureToggles.v2_variation(‘sample_key’, @current_user, false) %> <div
class="setting-box"> <p class=“new_function__text">৽ػೳΛ͝ར༻͍͚ͨͩ·͢ɻ</p> <p class="small-text"> <%= link_to '࣍ਐΉ', hoge_path, class: 'btn btn-primary btn-confirmation' %> </p> </div> <% end %> def pay_something amount_check use_balance use_point use_coupon if Fril::FeatureToggles.v2_variation(‘sample_key’, buyer, false) purchase end ྫ ը໘ʹ৽͍͠จݴɾϘοΫεΛՃ ྫ طଘͷॲཧʹ৽͍͠ॲཧΛՃ
w ։ൃதͷػೳΛNBTUFSʹNFSHFͰ͖Δ w ϦϦʔε࣌ʹେྔͷࠩΛNFSHF͢Δඞཁ͕ͳ͘ͳΔ w ଞͷνʔϜͷΤϯδχΞ͕ػೳΛΓɺཧղ͢Δ͜ͱ͕Մೳ w %&745(Ͱৗʹಈ࡞֬ೝ͕Մೳ
w ຊ൪ڥͰطଘػೳ͕ಈ࡞͢Δ͜ͱ͕୲อ w ։ൃڥͰ৽نػೳ͕ಈ࡞͢Δ͜ͱ͕୲อ w ෆ۩߹ΛૣظʹൃݟՄೳ w ஈ֊తެ։ʹΑͬͯ෦ͷϢʔβʔʹ͔͠Өڹ͕ग़ͳ͍ w ཧը໘͔ΒػೳΛ0''ʹͰ͖Δ w ಈ࡞͕୲อ͞Ε͍ͯΔػೳʹ͙ʹ͢͜ͱ͕Մೳ 'FBUVSF5PHHMFT͕ղܾͯ͘͠ΕΔ͜ͱ
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ଞΤϯδχΞ͕࣮࣌ʹҙࣝͰ͖Δ w %&745(ڥͰৗʹ0/ঢ়ଶʹ͓ͯ͘͠ w ଞҊ݅Ͱؔ࿈ػೳʹมߋ͕͋ͬͨ߹ʹɺίʔυϕʔ εͰӨڹൣғΛ֬ೝͰ͖Δ w
ผͷCSBODIͰ։ൃ͍ͯ͠Δͱؾ͚ͮͳ͍
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ػೳͷॏཁʹԠͯ͡LFZͷׂԽͱϦϦʔεॱংΛܾఆ ϦϦʔε͍ͨ͠ػೳ ػೳ$ ʢۄػೳͷՃʣ ػೳ" ʢόοΫάϥϯυʣ ػೳ#
ʢσβΠϯมߋʣ LFZͷ͚ํͰׂͷڥքΛܾΊΒΕΔͷͰɺҊ݅ͷঢ়گʹԠׂͨ͡ൣғͷมߋ͕༰қ
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ػೳͷॏཁʹԠͯ͡LFZͷׂԽͱϦϦʔεॱংΛܾఆ ػೳ$ ʢۄػೳͷՃʣ ػೳ" ʢόοΫάϥϯυʣ ػೳ# ʢσβΠϯͷมߋʣ
ˠˠ ˠˠ ˠˠ ׂͯ͠ϦϦʔε͢Δ͜ͱͰɺτϥϒϧͷӨڹΛ࠷খԽ
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ϦϦʔεલʹνʔϜͰຊ൪Ϧϋʔαϧ w ϦϦʔεͷिؒલ͘Β͍ʹ࣮ࢪ w ڥґଘͷͷνΣοΫ w ৽نʹߏஙͨ͠ωοτϫʔΫ
w ຊ൪༻ͷ"1*,FZͰಈ࡞νΣοΫ w ϦϦʔε࣌ͷखॱΛࣄલʹ࣮ࢪՄೳ
'FBUVSF5PHHMFTͷσϝϦοτ w ίʔυ͕Ԛ͘ͳΓ͕ͪ w దͳϦϑΝΫλϦϯά͕ඞཁ w ΰϛ͕Γଓ͚Δ w
ϦϦʔε͕Λ͑ͨΒίʔυΛফ͢श׳͕ඞཁ w ςετ߲͕૿͑Δ w ϦάϨογϣϯςετ͕࠷ॏཁ
·ͱΊ
·ͱΊ ҆શʹϦϦʔε͢ΔͨΊʹɺ'FBUVSF5PHHMFT༗ޮͳखஈ w ສ͕Ұͷ3PMMCBDLखॱ͕ϑϨʔϜϫʔΫͱ͠ ͯΈࠐ·Ε͍ͯΔ w ेͳಈ࡞֬ೝΛ͢ΔػձΛ࡞ΕΔ w
ϦϦʔεखॱʹϦεΫϔοδ͕Έࠐ·Εͯ ͍Δ͜ͱ͕֎ͷؔऀʹઆ໌Մೳ w ͦΕʹΑΓɺ։ൃνʔϜ͕ਫ਼ਆతʹ҆ఆ͠ɺ ػೳͷ։ൃมߋΛڪΕͳ͘ͳΔ
ੵۃ࠾༻தʂ