Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

ࣗݾ঺հ w 5XJUUFS!MOJ@5
 (JU)VC!MOJU w .FE1FFS&OHJOFFS ʙ w ޷͖ͳ3BJMTͷϝιου
 QSFTFODF w ݏ͍ͳ3BJMTͷϝιου
 BDDFQUT@OFTUFE@BUUSJCVUFT@GPS

Slide 3

Slide 3 text

ΫϦχοΫ։ۀࢧԉ ϓϥοτϑΥʔϜ

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

ʮ৽αʔϏε࡞Δͧʂʯ

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

ڊେ'FBUVSF#SBODI

Slide 9

Slide 9 text

ڊେ'FBUVSF#SBODI ৽ػೳ׬੒·Ͱͷಛେػೳϒϥϯν ͭΒ͍ ϨϏϡʔ͕Ͱ͖ͳ͍ ຊମϒϥϯνͱͷဃ཭ ଞνʔϜͱͷڝ߹ ϦϑΝΫλϦϯάͯ͠িಥ

Slide 10

Slide 10 text

EFWຊͰ͍͖͍ͨ

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

ʮΑ͠ɺϦϦʔεͩʜʯ Α͏΍͘ʜ

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

ͳΜͱ͔͍ͨ͠ ϒϥϯν͍ͨ΁Μ໰୊ ຊ൪͜Θ͍໰୊

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

ૉૣ͘ϦϦʔεՄೳʹ͠ ຊ൪Ͱݕূ͠Α͏

Slide 21

Slide 21 text

'FBUVSF'MBH 5PHHMF

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

࣮૷ͯ͠Ͳ͏ͳ͔ͬͨ

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

'MJQQFS

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

อଘઌ͸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

Slide 32

Slide 32 text

ݸผϢʔβʔରԠ΋؆୯ 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

Slide 33

Slide 33 text

؅ཧ6*༻qJQQFSVJHFN

Slide 34

Slide 34 text

ར༻ྫ $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

Slide 35

Slide 35 text

৽ن1+ະ࣮૷1+ ಋೖݕ౼ͯ͠Έͯ͸ʂ

Slide 36

Slide 36 text

'FBUVSF'MBH ڧΈɾऑΈ

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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


Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

·ͱΊ ػೳ0/0''ͷػߏΛ࡞ͬͯ޾ͤʹͳΖ͏ʂ 'FBUVSF'MBH ·ͨ͸'FBUVSF5PHHMF 3VCZͷ৔߹ʮ'MJQQFSʯͱ͍͏HFN͕࢖͑Δ ଞʹ΋ʮ3PMMPVUʯͱ͔͍Ζ͍Ζ ΋ͪΖΜࣗલ࣮૷Ͱ΋0,ʂ ҆શͳϦϦʔεͷʲಛޮༀʳͰ͸ͳ͍Αʂ