Slide 1

Slide 1 text

APIγφϦΦςετπʔϧͱͯ͠ͷ runn খࢁ݈Ұ࿠ / GMO PEPABO inc. 2023.11.30 APIςετπʔϧ̐બʂ։ൃऀ͕ޠΔ֤πʔϧͷಛ௃ͱັྗ 1

Slide 2

Slide 2 text

ࣗݾ঺հ ٕज़෦ɹٕज़ج൫νʔϜ 2018೥ த్ೖࣾ খࢁ ݈Ұ࿠ Ken’ichiro Oyama গ࣮͠༻తͰখ͞ͳOSSΛॻ͘ͷ͕झຯɻ ● GitHub : k1LoW ● Twitter : @k1LoW 2

Slide 3

Slide 3 text

GMOϖύϘʹ͍ͭͯ 3 https://pepabo.com

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

• runn ( means "Run N". is pronounced /rʌ́n én/. ) is a package/tool for running operations following a scenario. • https://github.com/k1LoW/runn • γφϦΦΛYAMLͰॻ͍ͯͦΕΛ΋ͱʹૢ࡞ʢΦϖϨʔγϣϯʣΛࣗಈԽͰ͖Δύο έʔδ/πʔϧ • ίϚϯυͱͯ͠΋GoͷύοέʔδʢϥΠϒϥϦʣͱͯ͠΋࢖͑Δ • APIςετ΋ϢʔεέʔεͷϑΝʔετϓϥΠΦϦςΟͱͯ͠Ґஔ෇͚͍ͯΔ 5 https://github.com/k1LoW/runn runnʢϥϯΤψʣ

Slide 6

Slide 6 text

6 https://github.com/k1LoW/runn runnʹ͓͚ΔAPIςετͷ࣮ߦ > runn run **/*.yml

Slide 7

Slide 7 text

7 γφϦΦYAMLϑΝΠϧ ʢϥϯϒοΫʣ

Slide 8

Slide 8 text

8 https://github.com/k1LoW/runn

Slide 9

Slide 9 text

9 https://github.com/k1LoW/runn

Slide 10

Slide 10 text

10 https://github.com/k1LoW/runn

Slide 11

Slide 11 text

11 https://github.com/k1LoW/runn

Slide 12

Slide 12 text

12 https://github.com/k1LoW/runn

Slide 13

Slide 13 text

13 https://github.com/k1LoW/runn

Slide 14

Slide 14 text

14 https://github.com/k1LoW/runn

Slide 15

Slide 15 text

15 https://github.com/k1LoW/runn Runnerͷઃఆ ม਺ͷઃఆ ɹɹɹɹ֤εςοϓ 0 1 2 3

Slide 16

Slide 16 text

16 runnͷػೳ

Slide 17

Slide 17 text

• 1όΠφϦͷγφϦΦ࣮ߦͷCLIίϚϯυʢπʔϧʣͱͯ͠࢖༻Ͱ͖Δ • 1όΠφϦ = CIϑϨϯυϦ • ͞·͟·ͳϓϩτίϧʹରԠ͓ͯ͠Γɺ1ͭͷγφϦΦ಺Ͱෳ਺૊Έ߹ΘͤΔ͜ͱ͕Մೳ • HTTP • gRPC • DatabaseʢSQLʣ • Chrome DevTools Protocol • ೚ҙίϚϯυͷ࣮ߦʢϩʔΧϧ/SSHʣ • GoͷTest Helperʢύοέʔδʣͱͯ͠࢖༻Ͱ͖Δ 17 https://github.com/k1LoW/runn runnͷػೳʢv0.91.0ʣʢ1/2ʣ

Slide 18

Slide 18 text

18 https://github.com/k1LoW/runn runnͷػೳʢv0.91.0ʣʢ2/2ʣ • γφϦΦϑΝΠϧʢYAMLʣͷϑΥʔϚοτ͕OpenAPI SpecϥΠΫ • γφϦΦ಺ͷεςοϓؒͷ஋͕ࣗಈͰ࿈ܞ͞Ε͍ͯΔ • ʮεςοϓAΛ࣮ߦ͔ͯ͠Βͦͷ݁ՌΛ࢖ͬͯεςοϓBΛ࣮ߦ͢Δʯͱ͍͏γφϦΦΛߏங͠΍͍͢ • ෳ਺ͷγφϦΦͷ࣮ߦΛ૝ఆ࣮ͨ͠૷ • ෳ਺ͷγφϦΦͷ෼ׂ࣮ߦɺαϯϓϦϯά࣮ߦɺϥϯμϜ࣮ߦͳͲ͕Մೳ • ϧʔϓ࣮ߦ΍ϦτϥΠ࣮ߦͷ࢓૊Έ͕૊ΈࠐΈͰඋΘ͍ͬͯΔ • ಉ͡γφϦΦϑΝΠϧΛ࢖ͬͨෛՙςετʢϩʔυςετʣ͕Մೳ • ίϚϯυΛ runn run ͔Β runn loadt ʹมߋ͢Δ͚ͩɻෳ਺γφϦΦ࣮ߦ΋ͦͷ··Մೳ • γφϦΦ࣮ߦͷϩά΋ه࿥Մೳ • γφϦΦ࣮ߦͷϓϩϑΝΠϧ΋औಘՄೳʢ֤εςοϓͷܦա࣌ؒʣ

Slide 19

Slide 19 text

19 runn͸ ͲͷΑ͏ͳઃܭࢥ૝Ͱ ࡞ΒΕ͍ͯΔͷ͔

Slide 20

Slide 20 text

• ϝΠϯͰ։ൃ͍ͯ͠Δͷ͸ @k1LoW ɹɹɹͱ @k2tzumi ɹɹɹ ͷ2ਓ • ͦΕͧΕrunnΛυοΫϑʔσΟϯά͍ͯͯ͠ɺ@k1LoW͕Goύοέʔδͱͯ͠ͷ runnɺ@k2tzumi͕ίϚϯυͱͯ͠ͷrunnΛओʹ࢖͍ͬͯΔ • υοΫϑʔσΟϯάΛ͍ͯ͠ΔதͰඞཁͱײͨ͡΋ͷ͕࣮૷͞ΕΔ͜ͱ͕ଟ͍ • GitHubͷIssue/Pull Request΍X(Twitter)ͷϋογϡλά #runn։ൃऀձٞ Λத৺ʹ ํ਑΍։ൃΛਐΊΔʢ࣌ʑϦϞʔτɺ࣌ʑΧϯϑΝϨϯεͷ࿓Լʣ 20 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ runnͷ։ൃମ੍

Slide 21

Slide 21 text

γφϦΦͷॻ͖৺஍͕ྑ͍͜ͱ 21

Slide 22

Slide 22 text

• ૝ఆ͍ͯ͠ΔϝΠϯͷϢʔβ͸ʮAPIΛ։ൃ͍ͯ͠ΔΤϯδχΞʯ • OpenAPI SpecϥΠΫͳϑΥʔϚοτΛ࠾༻ͨ͠ͷ΋ɺγφϦΦςετΛॻ͘ ΤϯδχΞͱOpenAPIυΩϡϝϯτΛॻ͘ΤϯδχΞΛಉҰਓ෺ͱͯ͠ߟ͑ͯ ͍ͨͨΊ • ॻ͖׳Ε͍ͯΔϢʔβ͕Ͱ͖Δ͚ͩ௚ײతʹॻ͚ΔΑ͏ʹɻͦΕ͕γφϦΦΛॻ͘ ίετΛԼ͛Δͱ৴͍ͯ͡Δ • ෳ਺ͷγϯλοΫεͷαϙʔτΛ͢Δ͜ͱͰॻ͖΍͘͢ • εςοϓؒͷ҉໧ͷ஋ͷड͚౉͠Λ͢Δ͜ͱͰඞཁҎ্ʹॻ͘͜ͱΛݮΒ͢ 22 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ γφϦΦͷॻ͖৺஍͕ྑ͍͜ͱ

Slide 23

Slide 23 text

23 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ ෳ਺ͷγϯλοΫεͷαϙʔτʢsteps:ͷListͱMapʣ • steps: ηΫγϣϯͷॻ͖ํʹListํࣜͱMapํࣜͷ2ͭΛ༻ҙ

Slide 24

Slide 24 text

24 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ ෳ਺ͷγϯλοΫεͷαϙʔτʢγϯλοΫεγϡΨʔʣ • γϯλοΫεγϡΨʔΛ༻ҙɻৄࡉΛॻ͖͍ͨͱ͖͚ͩৄࡉΛॻ͚ΔΑ͏ʹ

Slide 25

Slide 25 text

25 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ ෳ਺ͷγϯλοΫεͷαϙʔτʢγφϦΦؒͷ஋ͷ࠶ར༻ʣ • ֤εςοϓͷϨεϙϯε͸҉໧తʹอ࣋͢Δʢ໌ࣔతʹॻ͘ඞཁ͸ͳ͍ʣ • ྫ͑͹࠷ॳͷεςοϓͰ͋ΔAPI΁HTTPϦΫΤετΛͯ࣍͠ͷεςοϓͰϨεϙϯεΛ ࢖༻͍ͨ࣌͠ • ʮલεςοϓͷΠϯσοΫε͸3ʯ͕಄ʹ͋Ε͹ steps[3].res Ͱऔಘ • Listه๏ • ʮલεςοϓͷΩʔ͸fooʯ͕಄ʹ͋Ε͹ steps.foo.res Ͱऔಘ • Mapه๏ • ʮલͷεςοϓʯ͕಄ʹ͋Ε͹ previous.res Ͱऔಘ

Slide 26

Slide 26 text

γϯϓϧʹݟ͑Δ͜ͱ 26

Slide 27

Slide 27 text

27 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ ಋೖ͸γϯϓϧʹ • 1όΠφϦ • ؆୯Πϯετʔϧʢ brew install k1LoW/tap/runn ʣ • θϩίϯϑΟάͰςετ࣮ߦʢ runn run **/*.yml ʣ • cURL΍ΞΫηεϩά͔ΒͷγφϦΦϑΝΠϧͷੜ੒ʢ runn new ʣ • ͳΜͳΒϦϞʔτͷγφϦΦϑΝΠϧΛ࣮ߦʢ —-scopes run:remote ʣ

Slide 28

Slide 28 text

28 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ ֮͑Δ͜ͱ͸γϯϓϧɻͨͩɺ֮͑ͨ͜ͱͰͰ͖ͦ͏ͳ͜ͱ͕ʮ࣮͸Ͱ͖ΔʯΑ͏ʹ • ࣮͸ɺloop: ηΫγϣϯͰϦτϥΠͷઃఆ͕Ͱ͖Δ • ࣮͸ɺSSHϥϯφʔΛ࢖ͬͯϙʔτϑΥϫʔσΟϯά͕Ͱ͖Δ • ࣮͸ɺγφϦΦͷ࣮ߦΛγϟοϑϧͨ͠Γ෼ׂͨ͠ΓαϯϓϦϯάͨ͠ΓͰ͖Δ • ࣮͸ɺࣦഊͨ͠γφϦΦ͚ͩΛ࠶࣮ߦ͢Δ͜ͱ͕Ͱ͖Δ • ࣮͸ɺ࣮ߦ͕࣌ؒେ͖͍γφϦΦΛ༏ઌ࣮ͯ͠ߦ͢Δ͜ͱ͕Ͱ͖Δ ৽͍͠ػೳΛ1ͭ࡞Δ࣌ɺͦͷػೳͱطଘͷػೳͷ૊Έ߹Θͤ·ͰؚΊͯσβΠϯ͢Δ

Slide 29

Slide 29 text

29 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ runnͷઃܭࢥ૝ • ʢݸਓతʹ͸͡Ίͯઃܭࢥ૝ΛݴޠԽͨ͠ʣ • γφϦΦͷॻ͖͕ͪ͜͝ྑ͍͜ͱ • runnࣗମ͸GoݴޠͰॻ͔Ε͍ͯΔ͕runnͷγφϦΦϑΝΠϧͷγϯλοΫεʹ ͍࣋ͬͯΔΠϝʔδ͸Rubyݴޠ • γϯϓϧʹݟ͑Δ͜ͱ • Θ͔Γ΍͢͞ΛॏࢹɻϔϏʔϢʔεͷͨΊͷػೳ͸ݟ͑ʹͯ͘͘ྑ͍ • ͋ͱ͸࣮ࡍʹग़ݱ͖ͯͨ͠χʔζʹ߹Θͤͯ੒௕͍ͤͯ͘͞

Slide 30

Slide 30 text

30 runn͸ ͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͯ ͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͳ͍ͷ͔

Slide 31

Slide 31 text

31 runn͸ͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͯͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͳ͍ͷ͔ runn͕޲͍͍ͯΔAPIςετ • APIΛ։ൃ͢ΔΤϯδχΞ͕ɺAPIͷ։ൃ։͔࢝࣌Β࣮ࢪ͢ΔAPIςετ • cURLʹΑΔख࡞ۀʹΑΔڍಈ֬ೝͷ୅ΘΓʹಋೖ͢Δͷ͕͍͔ܰ΋ • APIαʔό͕Goͷ৔߹runnΛ૊ΈࠐΉ͜ͱͰ go test Ͱ࣮ߦͰ͖Δ • ෳ਺ͷϦΫΤετΛ·͍ͨͩγφϦΦ͕ଟ͋͘ΔAPIςετ • εΩʔϚۦಈͷ։ൃݱ৔ • γϯλοΫε͕ࣅ͍ͯΔͷͰࢀߟʹ͠΍͍͢ • OpenAPI Spec΍Protocol Buffersʢ.protoϑΝΠϧʣʹΑΔϦΫΤετ/Ϩεϙϯε ͷγφϦΦࣗମͷόϦσʔγϣϯ΋Ͱ͖Δ

Slide 32

Slide 32 text

32 runn͸ͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͯͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͳ͍ͷ͔ runn͕޲͍͍ͯͳ͍APIςετ • ϦΫΤετ/Ϩεϙϯεͷ1ϖΞ͚ͩͰࡁΉΑ͏ͳAPIςετ͕ଟ͍৔߹ • ςετʹରͯ͠runnͷγφϦΦϑΝΠϧͷهड़͕ଟগ৑௕͔΋͠Εͳ͍ • OpenAPI Spec΍Protocol Buffersʢ.protoϑΝΠϧʣʹ׳Ε͍ͯͳ͍։ൃݱ৔ • runnͷγφϦΦϑΝΠϧͷγϯλοΫε͕ཪ໨ʹͰͦ͏ • ٯʹrunnͷγϯλοΫεʹͳΕͨΒOpenAPI Spec͕ಡΈ΍͘͢ͳΔੈք… •

Slide 33

Slide 33 text

33 PR

Slide 34

Slide 34 text

34 PR • by @k2tzumi • https://qiita.com/advent-calendar/2023/runn- tutorial • ໌೔2023೥12݄1೔͔Β։࢝!!!! runn։ൃऀʹΑΔrunnνϡʔτϦΞϧ

Slide 35

Slide 35 text

35 PR runn։ൃऀʹΑΔrunnΫοΫϒοΫ • by @k1LoW • https://zenn.dev/k1low/books/runn-cookbook • Ұ෦༗ྉͰ͕͢ଟ͘Λແྉެ։͍ͯ͠ΔͷͰ ͚ͦͩ͜Ͱ΋Ͱ͖Δ͜ͱ͕ݟ͖͑ͯ·͢

Slide 36

Slide 36 text

36 Thank you!!!