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
FeatureFlagを用いた新機能の安全なマージ&リリース / FeatureFlag
Search
lni_T
October 30, 2019
Programming
1
700
FeatureFlagを用いた新機能の安全なマージ&リリース / FeatureFlag
lni_T
October 30, 2019
Tweet
Share
More Decks by lni_T
See All by lni_T
Railsアプリの仕様書を一瞬で作りたい話 - Omotesando.rb #99
lnit
0
120
ruby.wasm 最前線 2024 - wasmでMockServerをつくる #rubykaigi
lnit
2
3.2k
Turbolinksアレルギー患者に捧げるTurbo & Stimulusでの時短実装術 / Kaigi on Rails 2023
lnit
4
4.9k
ruby.wasmでブラウザを酷使してみよう / 2023-MatsueRubyKaigi
lnit
0
1.1k
ブラウザで「今すぐ」gemを読み込む方法 / Load-gem-from-browser-JUST-NOW
lnit
0
980
Ruby Wasmのおさらいと活用方法を探る / After-Rubykaigi-2022-ruby-wasm
lnit
0
420
Rails JSON APIとサービス高速化 / JSON Serializer 2020
lnit
9
5.2k
Other Decks in Programming
See All in Programming
CSC305 Lecture 01
javiergs
PRO
0
130
Интеграционное тестирование: как приручить хаос
mariyasaygina
0
250
API Platform for Laravel
dunglas
1
1.1k
あなたのアプリ、ログはでてますか?あるいはログをだしてますか? (Funabashi.dev用 軽量版)
uzulla
2
140
What is TDD?
urakawa_jinsei
0
130
GraphQLとGigaViewer for Apps
numeroanddev
4
760
AWS CDKを用いたセキュアなCI/CDパイプラインの構築 / Build a secure CI/CD pipeline using AWS CDK
seike460
PRO
3
420
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
1k
いまあるチームにフィットさせる Serverless そして Platform Engineeringへの挑戦 / Serverless Fits the Team You Have and Platform Engineering
seike460
PRO
3
1.1k
Kotlin 2.0が与えるAndroid開発の進化
masayukisuda
2
770
The Shape of a Service Object
inem
0
590
宿泊予約サイトにおける検索と料金計算の両立
skaji
1
190
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
86
5.6k
Git: the NoSQL Database
bkeepers
PRO
425
64k
How to Ace a Technical Interview
jacobian
274
23k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
23
1.7k
Clear Off the Table
cherdarchuk
91
320k
Building Applications with DynamoDB
mza
90
6k
How GitHub Uses GitHub to Build GitHub
holman
472
290k
Building a Scalable Design System with Sketch
lauravandoore
458
32k
Speed Design
sergeychernyshev
22
450
BBQ
matthewcrist
83
9.2k
Producing Creativity
orderedlist
PRO
340
39k
Web Components: a chance to create the future
zenorocha
309
42k
Transcript
'FBUVSF'MBHΛ༻͍ͨ ৽ػೳͷ҆શͳϚʔδϦϦʔε !MOJ@5 .FFUVQGPS3BJMTFOHJOFFST
ࣗݾհ w 5XJUUFS!MOJ@5 (JU)VC!MOJU w .FE1FFS&OHJOFFS ʙ w ͖ͳ3BJMTͷϝιου
QSFTFODF w ݏ͍ͳ3BJMTͷϝιου BDDFQUT@OFTUFE@BUUSJCVUFT@GPS
ΫϦχοΫ։ۀࢧԉ ϓϥοτϑΥʔϜ
ͭͬͨ͘ͷ ਤ্Ͱ ݅୳͠ ڝ߹ͷఁ ױऀ༧ଌ ͕Ͱ͖Δ͍ͭ͢͝
ͦΜͳ৽ػೳ։ൃͷࠔΓࣄ ͷղܾࣄྫ
ʮ৽αʔϏε࡞Δͧʂʯ
ʮͨ͘͞ΜػೳͰ͖ͨʯ ͦͷޙʜ
ڊେ'FBUVSF#SBODI
ڊେ'FBUVSF#SBODI ৽ػೳ·Ͱͷಛେػೳϒϥϯν ͭΒ͍ ϨϏϡʔ͕Ͱ͖ͳ͍ ຊମϒϥϯνͱͷဃ
ଞνʔϜͱͷڝ߹ ϦϑΝΫλϦϯάͯ͠িಥ
EFWຊͰ͍͖͍ͨ
ϒϥϯνઓུ ϓϧϦΫΤετΛࡉ͔͘ຊମʹϚʔδ͢Δઓུ Կߟ͑ͣʹ࠾༻͢ΔͱϦεΩʔ ػೳ·Ͱίʔυ͕ϦϦʔεෆՄঢ়ଶʹ ࡞Γ͔͚ͷػೳͰϝϯόʔશһͷڥ͕յΕͨΓ ϒϥϯνཧ͍ͨΜ
None
ʮΑ͠ɺϦϦʔεͩʜʯ Α͏͘ʜ
ʮ͋ʂຊ൪ʹมͳ ɹσʔλ͕ʂʯ
ʮ͋ΕɺઌํͷωοτϫʔΫʹ ͭͳ͕Βͳ͍ʯ
ຊ൪ڥόάͷๅݿ ༧ظͤ͵ͭΒ͍ σʔλىҼ ωοτϫʔΫىҼ ઃఆىҼ
ͦͷଞॾʑڥࠩ
ͳΜͱ͔͍ͨ͠ ϒϥϯν͍ͨΜ ຊ൪͜Θ͍
ղܾΞϓϩʔν͍Ζ͍Ζ ϒϥϯν͍ͨΜ ৫ߏͷมߋ ίʔυ҆ఆԽ ػೳΛࡉ͔͘࡞Δ
ϦϦʔεՄೳ࣭Λอͭ ຊ൪͜Θ͍ ݕূڥͷඋ ຊ൪ʹ͍ۙςετσʔλ ڥࠩͷআڈ ຊ൪Ͱಈ࡞ݕূ͢Δ
ղܾΞϓϩʔν͍Ζ͍Ζ ϒϥϯν͍ͨΜ ৫ߏͷมߋ ίʔυ҆ఆԽ ػೳΛࡉ͔͘࡞Δ
ϦϦʔεՄೳ࣭Λอͭ ຊ൪͜Θ͍ ݕূڥͷඋ ຊ൪ʹ͍ۙςετσʔλ ڥࠩͷআڈ ຊ൪Ͱಈ࡞ݕূ͢Δ
ૉૣ͘ϦϦʔεՄೳʹ͠ ຊ൪Ͱݕূ͠Α͏
'FBUVSF'MBH 5PHHMF
'FBUVSF'MBH ػೳ͕ಈ࡞͢Δಈ࡞͠ͳ͍ΛΓସ͑Δػߏ ιʔείʔυσϓϩΠ͢Δ͕ɺ ػೳʮಈ࡞͠ͳ͍ʯঢ়ଶʹ͓ͯ͘͠ Ϛʔδͯ͠ಈ࡞Өڹͳ͠ ϦϦʔεՄೳʂ
OFX
'FBUVSF'MBH ػೳ͕ಈ࡞͢Δಈ࡞͠ͳ͍ΛΓସ͑Δػߏ ςετϢʔβʔʹ͚ͩެ։Ͱ͖ΔΑ͏ʹ͢Δ Ұൠެ։લʹຊ൪ڥͰςετ ຊ൪ා͘ͳ͍ʂ OFX
5FTUFS
࣮ͯ͠Ͳ͏ͳ͔ͬͨ
'FBUVSFϒϥϯνͷૣظ߹ྲྀ όοΫΤϯυଆEFWFMPQຊ 13Ͱ։ൃ ϑϩϯτΤϯυଆ࠷ॳ'FBUVSFϒϥϯνʹͳ͕ͬͨʜ ͦͷޙEFWFMPQʹ߹ྲྀͯ͠13Ͱ։ൃ EFWFMPQ GFBUVSF
҆৺Ͱ͖ΔϦϦʔε σϞ༻ΞΧϯτͰҰ௨Γಈ͘͜ͱΛࣄલ֬ೝ
҆৺Ͱ͖ΔϦϦʔε Τϥʔ௨͕དྷͯམͪண͍ͯ֬ೝͰ͖Δ
࣮ํ๏ ࣗϓϩμΫτͰͷҰྫ
'MJQQFS
'MJQQFSHFN IUUQTHJUIVCDPNKOVOFNBLFSqJQQFS ϑϥάཧͱذ੍ޚͷΈΛఏڙͯ͘͠ΕΔ if Flipper.enabled?(:search) search_hoge else puts
'nothing...' end Flipper.enable(:search)
อଘઌHFNͰΓସ͑ ྫ"DUJWF3FDPSEͰ%#ʹอଘ NJHSBUJPOϑΝΠϧ࡞ 'MJQQFSར༻࣌ʹ"EBQUFSΛࢦఆ ଞʹ3FEJT .POHP%#ͳͲͳͲ
adapter = Flipper::Adapters::ActiveRecord.new flipper = Flipper.new(adapter) $ gem install flipper-active_record $ rails g flipper:active_record
ݸผϢʔβʔରԠ؆୯ class User def flipper_id "User;#{id}" end end # ----
Flipper[:stats].enable(user) Flipper[:stats].enabled?(user) # true Flipper[:stats].disable(user) Flipper[:stats].enabled?(user) # false
ཧ6*༻qJQQFSVJHFN
ར༻ྫ $POUSPMMFS7JFXͰ͍͍͢Α͏ϥοϓ CFGPSF@BDUJPOͳͲͰ0/0''֬ೝͯ͠ʹ͢ΔͳͲ module DarkLaunch extend ActiveSupport::Concern included
do helper_method :authorized_feature? end private def authorized_feature?(sym) Flipper[sym].enabled? current_user end end
৽ن1+ະ࣮1+ ಋೖݕ౼ͯ͠Έͯʂ
'FBUVSF'MBH ڧΈɾऑΈ
҆ఆͨ͠։ൃͷॿ͚ʹ ϒϥϯνΛຊମʹ߹ྲྀ͍ͤ͢͞ িಥ͕ى͖ͮΒ͍ ຊ൪ڥͰಈ࡞ݕূ͍͢͠ ΤϯυϢʔβʔʹެ։͢ΔϦεΫ͕େ෯ݮ
҆৺ײ
Γ͕͠༰қ ΞϓϦɾ%#ͷϩʔϧόοΫෛՙ͕ߴ͍ 'FBUVSF'MBHͷ߹ϫϯλονͰΓྃ͠
҆શ͔࣮࣍ୈ ʮຊʹ'MBHͰ0/0''͢Δ͔ʁʯ࣮࣍ୈ ͪΌΜͱ୯ମςετ݁߹ςετ͠Α͏ ʮ$POUSPMMFS࠹͍͚ͩͲɺ ɹผը໘͔ΒͷϦϯΫ͕Δόά͕ʜʯͱ͔ ʮίʔυ͕σϓϩΠ͞ΕΔʯϦεΫ͋Δ
ςετϦϦʔεઓུ͔ͬ͠ΓཱͯΑ͏
ཞ༻Α͘ͳ͍ ͨͩͷذॲཧͳͷͰɺར༻Օॴ͕૿͑ΔͱࡶʹͳΔɻ جຊϢʔβʹݟ͑ͳ͍෦͔Βී௨ʹ࣮ͭͭ͠ɺ ΤϯυϙΠϯτΛ࠹͍Ͱ͍͘ɹͱྑͦ͞͏ɻ
ର߅Ͱ͖ͳ͍τϥϒϧ͋Δ ྫ%#ϨΠϠʔͷ ECNJHSBUF࣮ߦ ॏ͍ΫΤϦॲཧதʹ৽ػೳ͚ͷ"-5&35"#-&ൃߦ ଧͪͲ͜Ζ͕ѱ͘ॏཁͳςʔϒϧ͕ϩοΫ
ˠαʔϏεஅ ϦϦʔε࣌ͷਚ͖ͳ͍ʜ
·ͱΊ ػೳ0/0''ͷػߏΛ࡞ͬͯͤʹͳΖ͏ʂ 'FBUVSF'MBH ·ͨ'FBUVSF5PHHMF 3VCZͷ߹ʮ'MJQQFSʯͱ͍͏HFN͕͑Δ
ଞʹʮ3PMMPVUʯͱ͔͍Ζ͍Ζ ͪΖΜࣗલ࣮Ͱ0,ʂ ҆શͳϦϦʔεͷʲಛޮༀʳͰͳ͍Αʂ