Slide 1

Slide 1 text

GoαʔόͷϦϦʔεΛ͍͔ʹͯ͠ݮΒ͔ͨ͠ Gunosy Inc. 2016.5 @azihsoyn

Slide 2

Slide 2 text

©Gunosy Inc. 2 ࣗݾ঺հ ■ azihsoyn – Twitter – Github – …etc ■ ۀ຿ – GoͰAPIαʔόͷ։ൃɾӡ༻ ■ झຯ – ௼Γ(5ׂ) ● γʔόεΛϧΞʔͰ ● ←͸ઌ೔௼ͬͨγʔόεͰ͢ – Ξχϝ(4ׂ) ● ࠓظNo.1͸ࡾऀࡾ༿ – ։ൃ(1ׂ) ● Androidͱ͔ @azihsoyn (͋͡;ͦ΍ΜͬͯಡΉΒ͍͠)

Slide 3

Slide 3 text

©Gunosy Inc. 3 ͍͖ͳΓͰ͕͢ɺA/Bςετͯ͠·͔͢ʁ

Slide 4

Slide 4 text

©Gunosy Inc. 4 Gunosyͷࣾ෩ ■ ৽ػೳͷެ։ ■ هࣄͷॱং ■ νϡʔτϦΞϧ ■ จݴมߋ ■ ޿ࠂग़͠෼͚ ■ …etc ਺ࣈ͕ਆΑΓਖ਼͍͠ = (جຊతʹ) ͲΜͳࢪࡦ΋A/Bςετͯ͠ɺޮՌ͕ͳ͔ͬͨΒ΍ΊΔ શ෦A/Bςετ͠·͢

Slide 5

Slide 5 text

©Gunosy Inc. 5 ͲͷΑ͏ʹӡ༻͍͔ͯͨ͠ ͦ΋ͦ΋ϋʔυίʔσΟϯάͩͬͨ

Slide 6

Slide 6 text

©Gunosy Inc. 6 ͲͷΑ͏ʹӡ༻͍͔ͯͨ͠ ͦ΋ͦ΋ϋʔυίʔσΟϯάͩͬͨ ݻఆ஋ʂʂA/Bͱ͸… ·͔͞ͷ਺஋ʂʂ ͜ͷϢʔβʔʹͨ͠ҙຯ͕ίʔυ͔ΒΘ͔Βͳ͍

Slide 7

Slide 7 text

©Gunosy Inc. 7 ͲͷΑ͏ʹӡ༻͍͔ͯͨ͠ ■ A/B։͍࢝ͨ͠ਓ͕ϓϧϦΫΛૹΔ – ίʔυमਖ਼ – ςετ௥Ճ ■ APIνʔϜ͕ϨϏϡʔ ■ Ϛʔδ ■ ϦϦʔε࡞ۀ – git flow – stagingͰಈ࡞֬ೝ – ϦϦʔε࿈བྷ – σϓϩΠ ϋʔυίʔσΟϯάͱ͍͏͜ͱ͸ɺɺɺ ऴྃ࣌΋ಉ༷ͷϑϩʔʂʂ

Slide 8

Slide 8 text

©Gunosy Inc. 8 ͜͏͍͏ґཔׂ͕ΓͱΧδϡΞϧʹདྷΔ

Slide 9

Slide 9 text

©Gunosy Inc. 9 ໰୊఺ ■ A/Bςετͷ։࢝ɾมߋɾऴྃʹ͔͔Δίετ͕ߴ͍ – ࠓ೔தʹ͓ئ͍͠·͢ͱ͔ͩͱ1͙࣌ؒΒ͍༨༟Ͱ௵ΕΔ – ࣗ෼ͷ࡞ۀ͕Ͱ͖ͳ͍ ■ ͍ΖΜͳνʔϜ͔ΒA/Bͷґཔ͕͘ΔͷͰϦϦʔεස౓΋ଟ͘ͳΔ – 1ϦϦʔε/4.4dayͩͬͨ – ϦϦʔε೔ΛίϯτϩʔϧͰ͖ͳ͍ ■ ਖ਼ࣜͳϦϦʔεΛ൐͏ͷͰɺٸͳґཔʹରԠͰ͖ͳ͍ – ΋͏developʹϚʔδͯͨ͠ͷʹɺɺɺͱ͔ – ༵ۚ೔ʹA/BΛ։࢝ͨ͘͠ͳ͍ ■ ίʔυ͔ΒA/Bςετ͕Ͳ͏͍͏ঢ়ଶͳͷ͔Θ͔Βͳ͍ – ΋͏ऴΘͬͨͷ͔ – ͍͔ͭΒ΍ͬͯΔͷ͔

Slide 10

Slide 10 text

©Gunosy Inc. 10 Ͳ͏վળ͔ͨ͠

Slide 11

Slide 11 text

©Gunosy Inc. 11 A/BςετʹؔΘΔίʔυΛ֎෦ઃఆϑΝΠϧԽ

Slide 12

Slide 12 text

©Gunosy Inc. 12 ΍ͬͨ͜ͱ ■ ෆཁͳ(ऴྃͨ͠)A/BςετͷίʔυΛ࡟আ ■ ඞཁͳม਺ͷચ͍ग़͠ – ϢʔβʔID, OSछผ, ΞϓϦόʔδϣϯ,… ■ ඞཁͳϩδοΫͷચ͍ग़͠ – mod, ൣғ, Ұக, … ■ ઃఆϑΝΠϧͷϑΥʔϚοτ – json, yaml, toml, go, ಠࣗDSL… ■ ઃఆϑΝΠϧ͔Βಈతʹܭࢉ͢ΔϥΠϒϥϦ୳͠ ■ ӡ༻ํ๏ ཁ͸ϦϑΝΫλϦϯά

Slide 13

Slide 13 text

©Gunosy Inc. 13 ෆཁͳA/BςετͷίʔυΛ࡟আ ■ ຊ౰ʹϨεϙϯεฦ͞ͳͯ͘໰୊ͳ͍͔ʁ – ݻఆ஋͚ͩͲΞϓϦ͕ύʔεͯ͠Δ͔΋ – →Ϩεϙϯε͔Β࡟আͨ͠ΒΫϥογϡ͢Δ͔΋ ■ ͦ΋ͦ΋android͚ͩɺios͚ͩͷͨΊͷϑΟʔϧυͱ͔͋ͬͨ ؆୯ͳ͜ͱͰ͸ͳ͔ͬͨ… ΞϓϦνʔϜʹڠྗͯ͠΋Β͍ͳ͕ΒͳΜͱ͔ୀ࣏

Slide 14

Slide 14 text

©Gunosy Inc. 14 ඞཁͳม਺ͷચ͍ग़͠ ■ ϢʔβʔID – Θ͔Δ ■ OS – ·͊Θ͔Δ ■ ΞϓϦόʔδϣϯ – ΞϓϦΛߋ৽͠ͳ͍ͱA/B։࢝Ͱ͖ͳ͍͸ͣͳͷͰ͍Βͳ͍͸ͣ – ࡟আ ■ ܕ – boolҎ֎ฦ͞ͳ͍ ϢʔβʔID͚ͩͰ͍͍͸ͣ

Slide 15

Slide 15 text

©Gunosy Inc. 15 ඞཁͳϩδοΫͷચ͍ग़͠ ■ mod ■ in ■ is ■ and/or ■ ݻఆ஋ – ݻఆ஋ฦͯ͠ΔͳΒA/BऴྃͰ͍͍͸ͣ – ޙํޓ׵ͷͨΊʹ࢓ํͳ͘ɺɺɺ ■ span – ظؒࢦఆͰ͖ΔΑ͏ʹ௥Ճ ͕͜͜Ұ൪೰Μͩɺɺɺ

Slide 16

Slide 16 text

©Gunosy Inc. 16 ઃఆϑΝΠϧͷϑΥʔϚοτ jsonҰ୒(طʹଞͷઃఆϑΝΠϧ΋jsonͩͬͨ)

Slide 17

Slide 17 text

©Gunosy Inc. 17 ઃఆϑΝΠϧ͔Βಈతʹܭࢉ͢ΔϥΠϒϥϦ୳͠ ■ ͋Δʹ͸͋ͬͨ – https://github.com/mattn/anko – https://github.com/Knetic/govaluate ■ ࣗ༝ա͗ΔͱٯʹࣄނΓͦ͏ – ͔ͿͬͪΌ͍͚ͳ͍Ϣʔβʔʹద༻ͪ͠Όͬͨͱ͔ ■ goͷ੩తܕ෇͚ͷϝϦοτ͕ࣦΘΕΔ ■ ٯʹ੍ݶ͍ͯ͘͠ํ޲ʹγϑτ phpͷeval(bashͷexpr)Έ͍ͨͳͷ͕ཉ͍͠ɺɺɺ ͦ͏ࢥ͍ͬͯͨ࣌ظ͕Զʹ΋͋Γ·ͨ͠ ࣗલͰϥΠϒϥϦ࡞ͬͨ

Slide 18

Slide 18 text

©Gunosy Inc. 18 ӡ༻ํ๏ ■ ઃఆϑΝΠϧΛ௚઀ฤू͢Δͷʁ – ؆୯ͳjsonͩͬͨΒ·ͩ͠΋… – ଞͷਓʹઃఆϑΝΠϧฤूͯ͠΋Β͏ͱࣄނ͕ා͍ ■ A/Bςετ͕Ͳ͏͍͏ঢ়ଶ͔෼͔Βͳ͍໰୊΋ղܾͯ͠ͳ͍ – ͔ͱ͍ͬͯ؅ཧπʔϧΘ͟Θ͟࡞Δͷ΋… issueͰ؅ཧ͢Δͷ͸͙ܾ͢·͕ͬͨ

Slide 19

Slide 19 text

©Gunosy Inc. 19 ͦΕɺGoogle εϓϨουγʔτͰͰ͖·͢Α GAS+S3Λ࢖ͬͯαʔϏεӡӦ޲͚ઃఆπʔϧΛ௒ઈ؆୯ʹ࡞੒͢Δํ๏ http://qiita.com/hirokidaichi/items/769e330284302a799095

Slide 20

Slide 20 text

©Gunosy Inc. 20 ͜ΜͳεϓϨουγʔτ͔Β

Slide 21

Slide 21 text

©Gunosy Inc. 21 ͜ΜͳjsonΛੜ੒ { "enable_A_ab_test": [ { "fixed": true } ],... "enable_F_ab_test": [ { "span": { "start": "2016-02-15T00:00:00+09:00", "end": null }, "mod": { "value_key": "user_id", "divisor": 20, "values": [ 0,1,2,3,4,5,6,7,10 ] }, "is": { "value_key": "os", "value": "ios" } } ],... }

Slide 22

Slide 22 text

©Gunosy Inc. 22 Ϙλϯ1ൃͰS3ʹΞοϓϩʔυ ͋ͱ͸OpsWorksͰۭσϓϩΠ͢Δ͚ͩ

Slide 23

Slide 23 text

©Gunosy Inc. 23 ӡ༻ํ๏ ■ A/B։͍࢝ͨ͠ਓ͕issueΛىථ – 1 A/B 1 issue – ׂ߹มߋ͸௥ه – ऴྃ࣌ʹclose ■ APIνʔϜ͕εϓϨουγʔτͰϙνϙνฤू – Ϙλϯ1ͭͰjsonʹม׵ͯ͠S3ʹΞοϓϩʔυ ■ ઃఆϑΝΠϧΛ࠶ಡࠐ͢ΔͨΊʹۭσϓϩΠ – εςʔδϯάͰͷݕূ͸جຊ͍ͯ͠ͳ͍ – → ͢Ͱʹಈ͍͍ͯͨίʔυͳͷͰͳΜͷෆ҆΋ͳ͍ͨΊ ࠷ऴతʹ͜͏ͳͬͨ 15෼͙Β͍ͰऴΘΔ

Slide 24

Slide 24 text

©Gunosy Inc. 24 վળ఺ ■ Ұճͷ࡞ۀ͕࣌ؒ15෼ʹ୹ॖʂ – ࡞ۀͷ߹ؒʹͰ͖Δ ■ ϦϦʔεස౓͕1ճ/4.4day → 1ճ/7.5dayʹʂ – ϦϦʔε೔ΛίϯτϩʔϧͰ͖ΔΑ͏ʹͳͬͨ ■ ༵ۚ೔Ͱ΋A/Bͷ։࢝ɾมߋɾऴ͕ྃͰ͖ΔΑ͏ʹͳͬͨ – ࢪࡦΛ஗Βͤͳ͍ ■ εϓϨουγʔτͰA/Bςετͷঢ়ଶ͕ݟ΍͘͢ͳͬͨ େମ໰୊఺͸ղܾͰ͖ͨ

Slide 25

Slide 25 text

©Gunosy Inc. 25 ՝୊΋·ͩ͋Δ ■ ͦ΋ͦ΋εϓϨουγʔτͰ؅ཧͬͯͲ͏ͳͷʁ – ཤྺͱ͔ݖݶͱ͔ – ཧ૝͸ผγεςϜʹ͍ͨ͠… ■ ؾܰʹมߋͰ͖Δͷ͸͍͍͚ͲɺώϡʔϚϯΤϥʔ͕ى͖΍͘͢ͳͬͨ – A/BࢭΊͨ͸͕ͣࢭ·ͬͯͳ͔ͬͨͱ͔ ■ ۭσϓϩΠ΋ΊΜͲ͍͘͞ – ఆظతʹ࠶ಡࠐ͢Δʁ(͜Ε͸͍ۙ͏ͪʹͰ͖ͦ͏) ■ ϩδοΫͷมߋ࣌͸ʁ – ௚ۙͷ՝୊

Slide 26

Slide 26 text

©Gunosy Inc. 26 ·ͱΊ ■ jsonศར ■ ϓϩηεΩϟογϡ΋ศར – ىಈ࣌ʹઃఆϑΝΠϧಡΈࠐΉ ■ ൚༻ੑΑΓ੍ݶ͢Δํ޲Ͱߟ͑Δ – interfaceଟ༻͢Δ͜ͱʹͳΔͷͰGoͷ੩తܕ෇͚ͷϝϦοτ͕ࣦΘ Εͯ͠·͏ ■ શ෦ࣗલͰ࡞ΔͷͰ͸ͳ͘ɺ͋Δ΋ͷΛ૊Έ߹Θͤͯ࡞Δ – ؤுͬͯ؅ཧπʔϧ࡞Ζ͏ͱ͠ͳͯ͘Α͔ͬͨ – εϓϨουγʔτ࠷ߴա͗Δ

Slide 27

Slide 27 text

©Gunosy Inc. 27 ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

Slide 28

Slide 28 text

©Gunosy Inc. 28 ͦͷଞࢿྉ ■ https://github.com/mattn/anko – phpͷevalతͳͷΛgoͰ୳ͯ͠ ■ https://github.com/Knetic/govaluate – phpͷevalతͳͷΛgoͰ୳ͯ͠ ■ https://github.com/guregu/buildver – όʔδϣϯ൪߸ൺֱ͢ΔϥΠϒϥϦ ■ http://qiita.com/hirokidaichi/items/769e330284302a799095 – εϓϨουγʔτ͔ΒS3ʹΞοϓϩʔυ ͓ੈ࿩ʹͳͬͨϥΠϒϥϦͱ͔