FeatureFlagを用いた新機能の安全なマージ&リリース / FeatureFlag

88493e31e8ac7540094d35f7cda46c8a?s=47 lni_T
October 30, 2019

FeatureFlagを用いた新機能の安全なマージ&リリース / FeatureFlag

88493e31e8ac7540094d35f7cda46c8a?s=128

lni_T

October 30, 2019
Tweet

Transcript

  1. 'FBUVSF'MBHΛ༻͍ͨ ৽ػೳͷ҆શͳϚʔδϦϦʔε !MOJ@5 .FFUVQGPS3BJMTFOHJOFFST

  2. ࣗݾ঺հ w 5XJUUFS!MOJ@5
 (JU)VC!MOJU w .FE1FFS&OHJOFFS ʙ  w ޷͖ͳ3BJMTͷϝιου


    QSFTFODF w ݏ͍ͳ3BJMTͷϝιου
 BDDFQUT@OFTUFE@BUUSJCVUFT@GPS
  3. ΫϦχοΫ։ۀࢧԉ ϓϥοτϑΥʔϜ

  4. ͭͬͨ͘΋ͷ ஍ਤ্Ͱ ෺݅୳͠ ڝ߹ͷఁ࡯ ױऀ਺༧ଌ ͕Ͱ͖Δ͍͢͝΍ͭ

  5. ͦΜͳ৽ػೳ։ൃͷࠔΓࣄ ͷղܾࣄྫ

  6. ʮ৽αʔϏε࡞Δͧʂʯ

  7. ʮͨ͘͞ΜػೳͰ͖ͨʯ ͦͷޙʜ

  8. ڊେ'FBUVSF#SBODI

  9. ڊେ'FBUVSF#SBODI  ৽ػೳ׬੒·Ͱͷಛେػೳϒϥϯν  ͭΒ͍  ϨϏϡʔ͕Ͱ͖ͳ͍  ຊମϒϥϯνͱͷဃ཭ 

    ଞνʔϜͱͷڝ߹  ϦϑΝΫλϦϯάͯ͠িಥ
  10. EFWຊͰ͍͖͍ͨ

  11. ϒϥϯνઓུ  ϓϧϦΫΤετΛࡉ͔͘ຊମʹϚʔδ͢Δઓུ  Կ΋ߟ͑ͣʹ࠾༻͢ΔͱϦεΩʔ  ػೳ׬੒·Ͱίʔυ͕ϦϦʔεෆՄঢ়ଶʹ  ࡞Γ͔͚ͷػೳͰϝϯόʔશһͷ؀ڥ͕յΕͨΓ ϒϥϯν؅ཧ͍ͨ΁Μ

  12. None
  13. ʮΑ͠ɺϦϦʔεͩʜʯ Α͏΍͘ʜ

  14. ʮ͋ʂຊ൪ʹมͳ ɹσʔλ͕ʂʯ

  15. ʮ͋ΕɺઌํͷωοτϫʔΫʹ ͭͳ͕Βͳ͍ʯ

  16. ຊ൪؀ڥ͸όάͷๅݿ  ༧ظͤ͵໰୊ͭΒ͍  σʔλىҼ  ωοτϫʔΫىҼ  ઃఆ஋ىҼ 

    ͦͷଞॾʑ؀ڥࠩ෼
  17. ͳΜͱ͔͍ͨ͠ ϒϥϯν͍ͨ΁Μ໰୊ ຊ൪͜Θ͍໰୊

  18. ղܾΞϓϩʔν͍Ζ͍Ζ  ϒϥϯν͍ͨ΁Μ໰୊  ૊৫ߏ੒ͷมߋ  ίʔυ҆ఆԽ  ػೳΛࡉ͔͘࡞Δ 

    ϦϦʔεՄೳ඼࣭Λอͭ  ຊ൪͜Θ͍໰୊  ݕূ؀ڥͷ੔උ  ຊ൪ʹ͍ۙςετσʔλ  ؀ڥࠩ෼ͷআڈ  ຊ൪Ͱಈ࡞ݕূ͢Δ
  19. ղܾΞϓϩʔν͍Ζ͍Ζ  ϒϥϯν͍ͨ΁Μ໰୊  ૊৫ߏ੒ͷมߋ  ίʔυ҆ఆԽ  ػೳΛࡉ͔͘࡞Δ 

    ϦϦʔεՄೳ඼࣭Λอͭ  ຊ൪͜Θ͍໰୊  ݕূ؀ڥͷ੔උ  ຊ൪ʹ͍ۙςετσʔλ  ؀ڥࠩ෼ͷআڈ  ຊ൪Ͱಈ࡞ݕূ͢Δ
  20. ૉૣ͘ϦϦʔεՄೳʹ͠ ຊ൪Ͱݕূ͠Α͏

  21. 'FBUVSF'MBH 5PHHMF

  22. 'FBUVSF'MBH  ػೳ͕ಈ࡞͢Δಈ࡞͠ͳ͍Λ੾Γସ͑Δػߏ  ιʔείʔυ͸σϓϩΠ͢Δ͕ɺ
 ػೳ͸ʮಈ࡞͠ͳ͍ʯঢ়ଶʹ͓ͯ͘͠  Ϛʔδͯ͠΋ಈ࡞Өڹͳ͠  ϦϦʔεՄೳʂ

    OFX
  23. 'FBUVSF'MBH  ػೳ͕ಈ࡞͢Δಈ࡞͠ͳ͍Λ੾Γସ͑Δػߏ  ςετϢʔβʔʹ͚ͩެ։Ͱ͖ΔΑ͏ʹ͢Δ  Ұൠެ։લʹຊ൪؀ڥͰςετ  ຊ൪΋ා͘ͳ͍ʂ OFX

    5FTUFS
  24. ࣮૷ͯ͠Ͳ͏ͳ͔ͬͨ

  25. 'FBUVSFϒϥϯνͷૣظ߹ྲྀ  όοΫΤϯυଆ͸EFWFMPQຊ 13Ͱ։ൃ  ϑϩϯτΤϯυଆ͸࠷ॳ͸'FBUVSFϒϥϯνʹͳ͕ͬͨʜ  ͦͷޙEFWFMPQʹ߹ྲྀͯ͠13Ͱ։ൃ EFWFMPQ GFBUVSF

  26. ҆৺Ͱ͖ΔϦϦʔε  σϞ༻ΞΧ΢ϯτͰҰ௨Γಈ͘͜ͱΛࣄલ֬ೝ

  27. ҆৺Ͱ͖ΔϦϦʔε  Τϥʔ௨஌͕དྷͯ΋མͪண͍ͯ֬ೝͰ͖Δ

  28. ࣮૷ํ๏ ࣗϓϩμΫτͰͷҰྫ

  29. 'MJQQFS

  30. 'MJQQFSHFN  IUUQTHJUIVCDPNKOVOFNBLFSqJQQFS  ϑϥά؅ཧͱ෼ذ੍ޚͷ࢓૊ΈΛఏڙͯ͘͠ΕΔ if Flipper.enabled?(:search) search_hoge else puts

    'nothing...' end Flipper.enable(:search)
  31. อଘઌ͸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
  32. ݸผϢʔβʔରԠ΋؆୯ 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
  33. ؅ཧ6*༻qJQQFSVJHFN

  34. ར༻ྫ  $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
  35. ৽ن1+ະ࣮૷1+ ಋೖݕ౼ͯ͠Έͯ͸ʂ

  36. 'FBUVSF'MBH ڧΈɾऑΈ

  37. ҆ఆͨ͠։ൃͷॿ͚ʹ  ϒϥϯνΛຊମʹ߹ྲྀͤ͞΍͍͢  িಥ͕ى͖ͮΒ͍  ຊ൪؀ڥͰಈ࡞ݕূ͠΍͍͢  ΤϯυϢʔβʔʹެ։͢ΔϦεΫ͕େ෯ݮ 

    ҆৺ײ
  38. ੾Γ໭͕͠༰қ  ΞϓϦɾ%#ͷϩʔϧόοΫ͸ෛՙ͕ߴ͍  'FBUVSF'MBHͷ৔߹ϫϯλονͰ੾Γ໭͠׬ྃ

  39. ҆શ͔͸࣮૷࣍ୈ  ʮຊ౰ʹ'MBHͰ0/0''͢Δ͔ʁʯ͸࣮૷࣍ୈ  ͪΌΜͱ୯ମςετ݁߹ςετ͠Α͏  ʮ$POUSPMMFS͸࠹͍͚ͩͲɺ
 ɹผը໘͔ΒͷϦϯΫ͕࢒Δόά͕ʜʯͱ͔  ʮίʔυ͕σϓϩΠ͞ΕΔʯϦεΫ͸͋Δ

     ςετϦϦʔεઓུ͔ͬ͠ΓཱͯΑ͏
  40. ཞ༻͸Α͘ͳ͍  ͨͩͷ෼ذॲཧͳͷͰɺར༻Օॴ͕૿͑Δͱ൥ࡶʹͳΔɻ  جຊ͸Ϣʔβʹݟ͑ͳ͍෦෼͔Βී௨ʹ࣮૷ͭͭ͠ɺ
 ΤϯυϙΠϯτΛ࠹͍Ͱ͍͘ɹͱྑͦ͞͏ɻ


  41. ର߅Ͱ͖ͳ͍τϥϒϧ΋͋Δ  ྫ%#ϨΠϠʔͷ໰୊  ECNJHSBUF࣮ߦ  ॏ͍ΫΤϦॲཧதʹ৽ػೳ޲͚ͷ"-5&35"#-&ൃߦ  ଧͪͲ͜Ζ͕ѱ͘ॏཁͳςʔϒϧ͕ϩοΫ 

    ˠαʔϏεஅ  ϦϦʔε࣌ͷ໰୊͸ਚ͖ͳ͍ʜ
  42. ·ͱΊ  ػೳ0/0''ͷػߏΛ࡞ͬͯ޾ͤʹͳΖ͏ʂ  'FBUVSF'MBH ·ͨ͸'FBUVSF5PHHMF   3VCZͷ৔߹ʮ'MJQQFSʯͱ͍͏HFN͕࢖͑Δ 

    ଞʹ΋ʮ3PMMPVUʯͱ͔͍Ζ͍Ζ  ΋ͪΖΜࣗલ࣮૷Ͱ΋0,ʂ  ҆શͳϦϦʔεͷʲಛޮༀʳͰ͸ͳ͍Αʂ