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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ShoheiMitani
July 18, 2019
Programming
1
520
安全なリリースに向けた技術的アプローチ
大規模な新機能のリリース時に利用した段階的リリースの実装パターンの紹介をします。
ShoheiMitani
July 18, 2019
Tweet
Share
More Decks by ShoheiMitani
See All by ShoheiMitani
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.2k
プロポーザルに込める段取り八分
shoheimitani
1
650
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
13
16k
2重リクエスト完全攻略HANDBOOK / Double Request Handbook
shoheimitani
9
11k
AIの全社活用を推進するための安全なレールを敷いた話
shoheimitani
3
1.4k
The Citadel
shoheimitani
0
210
Rails-ishなActiveRecordの操作方法
shoheimitani
0
220
自己実現のためのキャリア選択 / Choosing a Career Path for Self-Realization
shoheimitani
2
480
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
3
1.6k
Other Decks in Programming
See All in Programming
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
230
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
990
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
630
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
230
AtCoder Conference 2025
shindannin
0
1.1k
ぼくの開発環境2026
yuzneri
0
240
MUSUBIXとは
nahisaho
0
140
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
sira's awesome portfolio website redesign presentation
elsirapls
0
150
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
Producing Creativity
orderedlist
PRO
348
40k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Building AI with AI
inesmontani
PRO
1
710
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
170
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 ͦΕʹΑΓɺ։ൃνʔϜ͕ਫ਼ਆతʹ҆ఆ͠ɺ ػೳͷ։ൃมߋΛڪΕͳ͘ͳΔ
ੵۃ࠾༻தʂ