Slide 1

Slide 1 text

৽ػೳ࡞੒࣌ʹ։ൃϒϥϯν ʹࡉ͔͘merge͍ͯ͘͠ઓུ ࣾ಺ٕज़ษڧձ 2017/08/03 id:shiba_yu36

Slide 2

Slide 2 text

࠷ۙ͸େ͖Ίͳ৽ػೳΛ࡞Δ࣌ɺ ։ൃϒϥϯνʹࡉ͔͘merge͢ ΔઓུΛ࢖͍ͬͯΔͷͰ঺հ

Slide 3

Slide 3 text

جຊతͳઓུ • Ϣʔβʔʹ৽ػೳ͕ݟ͑ͳ͍Α͏ʹ͢Δ޻෉Λ͠ɺ ৽ػೳͷbranch΋ͲΜͲΜmerge͍ͯ͘͠ • PR͸ՄೳͳݶΓࡉ͔͘ • ࠷ޙʹϢʔβʔʹ৽ػೳΛݟ͑ΔΑ͏ͳϦϦʔεΛ ͢Δ

Slide 4

Slide 4 text

Πϝʔδ NBTUFS EFWFMPQ G SFMFBTF G G ࠷ऴSFMFBTF

Slide 5

Slide 5 text

͍ΖΜͳࣦഊ͔Β ͜ͷઓུʹࢸͬͨ

Slide 6

Slide 6 text

Α͋͘Δࣦഊύλʔϯͦͷ1 ڊେPRύλʔϯ

Slide 7

Slide 7 text

ڊେPRύλʔϯ • ৽ػೳͷͨΊͷίʔυΛҰͭͷPRʹ·ͱΊͯ mergeͯ͠ϦϦʔε GCJHCBOH EFWFMPQ

Slide 8

Slide 8 text

ࠔΔ͜ͱ • ௒ίϯϑϦΫτ໰୊ • ϨϏϡʔ͢Δ؍఺͕ଟ͗ͯ͢ݟམͱ͢ -> ҆ఆੑ× • ࢦఠ͕ଟ͘ͳΓ͕ͪ -> ϨϏϡʔ͞ΕΔଆ͕ർฐ • ϨϏϡʔͷԠुͰർฐ͢Δ -> Ͳͬͪ΋ਏ͍

Slide 9

Slide 9 text

ײ֮తʹ500ߦ ௒͖͑ͯͨลΓͰਏ͍

Slide 10

Slide 10 text

Α͋͘Δࣦഊύλʔϯͦͷ2 ৽ػೳϦϦʔεϒϥϯνύλʔϯ

Slide 11

Slide 11 text

৽ػೳϦϦʔεϒϥϯν • ৽ػೳͷϦϦʔε༻ϒϥϯνΛҰͭ༻ҙͯ͠ɺͦ͜ ʹPRΛૹΔύλʔϯ • PR͸ࡉ͔͘ϨϏϡʔ͞ΕɺϦϦʔε༻ϒϥϯν΁

Slide 12

Slide 12 text

GSFMFBTF EFWFMPQ G G

Slide 13

Slide 13 text

ࠔΔ͜ͱ • ௒ίϯϑϦΫτ໰୊࠶ͼ • ࠷ޙʹϦϦʔεPRΛશνΣοΫ͠ͳ͍ͱ҆৺Ͱ ͖ͳ͍ • ଞͷػೳͰඞཁʹͳͬͨϝιουΛcherry-pick ͠·͘Δ

Slide 14

Slide 14 text

ࠔΔ͜ͱ • ௒ίϯϑϦΫτ໰୊࠶ͼ • ࠷ޙʹϦϦʔεPRΛશνΣοΫ͠ͳ͍ͱ҆৺Ͱ ͖ͳ͍ • ଞͷػೳͰඞཁʹͳͬͨϝιουΛcherry-pick ͠·͘Δ ಛʹ͜Ε͕΍͹͍

Slide 15

Slide 15 text

• feature1Ͱfind_hoge_blogͱ͍͏ϝιουΛ࡞Δ • feature2Ͱ΋ಉ͡ϝιουΛ࢖͏͜ͱʹͳͬͨ • find_hoge_blogΛ࡞ͬͨcommitΛcherry-pick͢ Δ? • ͔ͦ͠͠ͷcommitΛcherry-pick͢Δͱมͳίʔ υ΋ฆΕͯ͘Δ • ίϐϖ͢Δ͔͠ͳ͍ʁʁʁ

Slide 16

Slide 16 text

͍͍ײ͡ʹ΍Δํ๏΋͋Γ ͦ͏͚ͩͲɺͱʹ͔͘େม

Slide 17

Slide 17 text

͜ͷΑ͏ͳࣦഊ͔Β ࠷ॳͷઓུΛऔΔΑ͏ʹ

Slide 18

Slide 18 text

(࠶ܝ)جຊతͳઓུ • Ϣʔβʔʹ৽ػೳ͕ݟ͑ͳ͍Α͏ʹ͢Δ޻෉Λ͠ɺ ৽ػೳͷbranch΋ͲΜͲΜmerge͍ͯ͘͠ • PR͸ՄೳͳݶΓࡉ͔͘ • ࠷ޙʹϢʔβʔʹ৽ػೳΛݟ͑ΔΑ͏ͳϦϦʔεΛ ͢Δ

Slide 19

Slide 19 text

(࠶ܝ)جຊతͳઓུ • Ϣʔβʔʹ৽ػೳ͕ݟ͑ͳ͍Α͏ʹ͢Δ޻෉Λ͠ɺ ৽ػೳͷbranch΋ͲΜͲΜmerge͍ͯ͘͠ • PR͸ՄೳͳݶΓࡉ͔͘ • ࠷ޙʹϢʔβʔʹ৽ػೳΛݟ͑ΔΑ͏ͳϦϦʔεΛ ͢Δ

Slide 20

Slide 20 text

ύλʔϯ • ϩδοΫͷϝιου͔Β࡞Δ • Ϣʔβʔʹݟ͑ͳ͍෦෼͔Β࡞Δ • ΤϯυϙΠϯτΛຊ൪Ͱ͸ݟ͑ͳ͍Α͏ʹ͢Δ • Ұ෦ͷHTML͚ͩຊ൪Ͱ͸Ӆ͓ͯ͘͠ • ϦχϡʔΞϧύλʔϯ

Slide 21

Slide 21 text

ύλʔϯ1 ϩδοΫͷϝιου͔Β࡞Δ

Slide 22

Slide 22 text

• Logic::Blog->find_public_blogsͱ͔ɺLogic::Blog- >createͱ͔͚ͩ࡞ͬͯPR • ϩδοΫΛϢʔβʔʹݟ͑ΔControllerͱ͔Ͱ࢖Θ ͳ͚Ε͹౰વӨڹͳ͠

Slide 23

Slide 23 text

஫ҙ • ϢʔεέʔεΛ෼ੳ͓͔ͯ͠ͳ͍ͱɺ࣮ࡍʹ࢖͏࣌ ʹ࢖͑ͳ͍͜ͱʹؾͮ͘ • ࢖͍ํٖࣅίʔυΛॻ͖ͭͭɺͦΕ΋߹ΘͤͯϨ Ϗϡʔͯ͠΋Β͏ͱྑ͍

Slide 24

Slide 24 text

sub endpoint { my ($req, $res) = @_; # λΠτϧͱઆ໌จΛrequest͔Β # ͜͜Ͱvalidate΋͢Δ my ($title, $desc) = validate( title => $req->param('title'), desc => $req->param('desc'), ); # titleͱdescriptionΛ౉͢ Logic::Blog->create(...) }

Slide 25

Slide 25 text

ύλʔϯ2 Ϣʔβʔʹݟ͑ͳ͍෦෼͔Β࡞Δ

Slide 26

Slide 26 text

ྫ) MySQLͷLIKEݕࡧ͔ΒɺElasticsearch ʹஔ͖׵͑ͯࣗ༝ͳιʔτ΋ར༻Մೳʹ

Slide 27

Slide 27 text

෼ׂ͢Δ 1. Elasticsearchͷ։ൃ؀ڥ࡞Γ(खݩɺ։ൃ؀ڥɺຊ൪) 2. ݕࡧ͍ͨ͠σʔλͷElasticsearch΁ͷಉظ 3. ݕࡧΫΤϦͰͷݕࡧཪଆΛMySQL͔ΒElasticsearchʹ ஔ͖׵͑ 4. ElasticsearchΛ࢖ͬͯιʔτΛ࣮૷

Slide 28

Slide 28 text

3൪·Ͱ͸Ϣʔβʔ͔Β͸ݟ͑ ͳ͍ͷͰɺਵ࣌ϦϦʔεՄೳ

Slide 29

Slide 29 text

෼ׂ͢Δ 1. Elasticsearchͷ։ൃ؀ڥ࡞Γ(खݩɺ։ൃ؀ڥɺຊ൪) 2. ݕࡧ͍ͨ͠σʔλͷElasticsearch΁ͷಉظ 3. ݕࡧΫΤϦͰͷݕࡧཪଆΛMySQL͔ΒElasticsearch ʹஔ͖׵͑ 4. ElasticsearchΛ࢖ͬͯιʔτΛ࣮૷

Slide 30

Slide 30 text

ύλʔϯ3 ΤϯυϙΠϯτΛຊ൪Ͱ͸ ݟ͑ͳ͍Α͏ʹ

Slide 31

Slide 31 text

༻్ • ৽ػೳΛಛఆͷURLͰఏڙ͢Δ࣌ʹ ࢖͑Δ

Slide 32

Slide 32 text

΍Γํ • ։ൃ؀ڥͰ͸URLͰͦͷػೳʹΞΫηε Ͱ͖ΔΑ͏ʹ • ຊ൪؀ڥͰ͸Not Foundʹ͢Δ • ୯ͳΔϑϥά͚ͩͰ࣮૷Մೳ

Slide 33

Slide 33 text

# /feature1ͰΞΫηεͰ͖ΔΤϯυϙΠϯτ sub feature1 { my ($req, $res) = @_; # ։ൃ؀ڥͰͷΈONʹͳΔϑϥά # TODO(feature1_release): ϦϦʔεલʹফ͢ if (!$ENV{CAN_SHOW_NEW_FEATURE}) { return $res->not_found; } ... }

Slide 34

Slide 34 text

ϑϥά͸؀ڥม਺Ͱ΋ Config::ENVతͳ΋ͷ࢖͏ͷͰ ΋ͳΜͰ΋

Slide 35

Slide 35 text

׬੒ͨ͠ΒϑϥάΛ࢖ͬͨif จΛফͨ͠ΒϦϦʔεͰ͖Δ

Slide 36

Slide 36 text

ύλʔϯ4 Ұ෦ͷHTML͚ͩຊ൪Ͱ͸ Ӆ͓ͯ͘͠

Slide 37

Slide 37 text

༻్ • ͋ΔϖʔδͷҰ෦ʹ৽ػೳ௥Ճ ͢Δ࣌

Slide 38

Slide 38 text

΍Γํ • ςϯϓϨʔτΤϯδϯΛ࢖͍ͬͯΔ ͱ؆୯ • ϑϥάΛςϯϓϨʔτʹ౉ͯ͠ɺಛఆ HTMLΛফͨ͠Γ͢Δ͚ͩ

Slide 39

Slide 39 text

... [%- IF can_show_new_feature %] ... [%- END %] ...

Slide 40

Slide 40 text

JSͱ͔΋ཁૉ͕͋Δ࣌ͷ Έ༗ޮʹ͢ΔͷͰରॲՄೳ

Slide 41

Slide 41 text

׬੒ͨ͠ΒϑϥάΛ࢖ͬͨif จΛফͨ͠ΒϦϦʔεͰ͖Δ

Slide 42

Slide 42 text

ύλʔϯ5 ϦχϡʔΞϧύλʔϯ

Slide 43

Slide 43 text

༻్ • ৽ػೳͰϖʔδ͕ΨϥοͱมΘΓɺ ಛఆHTMLΛӅ͢ͱ͔Ͱରॲෆೳͳ࣌

Slide 44

Slide 44 text

΍Γํ • ίϯτϩʔϥͱςϯϓϨʔτͷηοτΛ ΋͏1ͭ༻ҙ͢Δ • ৽͍͠ίϯτϩʔϥ͸ຊ൪Ͱ͸ݟ͑ͳ͍ Α͏ʹ • ࠷ޙʹલͷ΍ͭͱͦͬ͝ͱೖΕସ͑Δ

Slide 45

Slide 45 text

# /feature1_renewalͰΞΫηεͰ͖ΔΤϯυϙΠϯτ sub feature1_renewal { my ($req, $res) = @_; # ։ൃ؀ڥͰͷΈONʹͳΔϑϥά # TODO(feature1_release): ϦϦʔεલʹফ͢ if (!$ENV{CAN_SHOW_NEW_FEATURE}) { return $res->not_found; } ... }

Slide 46

Slide 46 text

feature1_renewal.html lessͱ͔JSͱ͔͸͍͍ײ͡ʹ

Slide 47

Slide 47 text

• sub feature1_renewal -> sub feature1 • feature1_renewal.html -> feature1.html • lessͱ͔΋ҰؾʹҠಈ • ࠷ޙ͚ͩͪΐͬͱେมͰ͸͋Δ

Slide 48

Slide 48 text

·ͱΊ • େ͖Ίͳ৽ػೳ࡞Γͷ࣌ͷmergeઓུʹͭ ͍ͯͷ࿩ • ࣦഊܦݧ͔ΒϢʔβʔʹݟ͑ͳ͍Α͏ʹͲ ΜͲΜ։ൃϒϥϯνʹmerge͢ΔΑ͏ʹ ͳͬͨ • ݟ͑ͳ͍Α͏ʹ͢Δύλʔϯ͸͍Ζ͍Ζ