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
750
FeatureFlagを用いた新機能の安全なマージ&リリース / FeatureFlag
lni_T
October 30, 2019
Tweet
Share
More Decks by lni_T
See All by lni_T
ActiveRecordの力でDBのメタデータを迅速に解析する
lnit
6
2.6k
ruby.wasm × Service Workerでサーバーのいらないモックサーバーを作る
lnit
0
230
Railsアプリの仕様書を一瞬で作りたい話 - Omotesando.rb #99
lnit
1
250
ruby.wasm 最前線 2024 - wasmでMockServerをつくる #rubykaigi
lnit
2
3.6k
Turbolinksアレルギー患者に捧げるTurbo & Stimulusでの時短実装術 / Kaigi on Rails 2023
lnit
4
5.4k
ruby.wasmでブラウザを酷使してみよう / 2023-MatsueRubyKaigi
lnit
0
1.4k
ブラウザで「今すぐ」gemを読み込む方法 / Load-gem-from-browser-JUST-NOW
lnit
0
1.1k
Ruby Wasmのおさらいと活用方法を探る / After-Rubykaigi-2022-ruby-wasm
lnit
0
460
Rails JSON APIとサービス高速化 / JSON Serializer 2020
lnit
9
5.3k
Other Decks in Programming
See All in Programming
SpringBoot3.4の構造化ログ #kanjava
irof
2
990
CloudNativePGがCNCF Sandboxプロジェクトになったぞ! 〜CloudNativePGの仕組みの紹介〜
nnaka2992
0
230
Pythonでもちょっとリッチな見た目のアプリを設計してみる
ueponx
1
560
Amazon Bedrock Multi Agentsを試してきた
tm2
1
280
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1k
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
140
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
160
昭和の職場からアジャイルの世界へ
kumagoro95
1
370
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
190
ファインディの テックブログ爆誕までの軌跡
starfish719
2
1.1k
Ruby on cygwin 2025-02
fd0
0
140
仕様変更に耐えるための"今の"DRY原則を考える / Rethinking the "Don't repeat yourself" for resilience to specification changes
mkmk884
0
120
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Music & Morning Musume
bryan
46
6.3k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Typedesign – Prime Four
hannesfritz
40
2.5k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
How GitHub (no longer) Works
holman
314
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
Making Projects Easy
brettharned
116
6k
We Have a Design System, Now What?
morganepeng
51
7.4k
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,ʂ ҆શͳϦϦʔεͷʲಛޮༀʳͰͳ͍Αʂ