Slide 1

Slide 1 text

Command-line interface tool design খࢁ݈Ұ࿠ / GMO PEPABO inc. 2024.3.8 PHPerKaigi 2024 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 ࠷ۙྗΛೖΕ͍ͯΔOSSͷ঺հ runnʢϥϯΤψʣ • 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Ͱॻ͍ͯͦΕΛ΋ͱʹૢ࡞ʢΦϖϨʔγϣϯʣΛࣗಈԽͰ͖Δύο έʔδ/πʔϧ • ओʹAPIςεςΟϯάπʔϧͱͯ͠࠾༻͞Ε͍ͯΔ • νϡʔτϦΞϧ΍ΫοΫϒοΫ΋͋Δ

Slide 5

Slide 5 text

ΞδΣϯμ • Command-line interface • Command-line interface tool design • ίϚϯυମܥͷσβΠϯ • έʔεελσΟ • πʔϧͱͯ͠ͷ࣮૷ͷσβΠϯ • έʔεελσΟ • ͓ΘΓʹ 5

Slide 6

Slide 6 text

6 Command-line interface

Slide 7

Slide 7 text

7 Command-line interface Command-line interfaceͱ͸ • Ϣʔβ͕จࣈྻʢίϚϯυʣΛೖྗͯ͠ϓϩάϥϜʹ໋ྩ͢ΔϢʔβΠϯλʔϑΣʔε • Α͘ରͱͳΔͷ͕GUIʢGraphical user interfaceʣ • ༨ஊ: ʮCUIʢCharacter user interfaceʣʯΛ࢖͏ͷ͸೔ຊޠͰͷ࢖༻͕ओྲྀΒ͍͠ʢWikipediaௐ΂ʣ

Slide 8

Slide 8 text

8 Command-line interface ίϚϯυϥΠϯΠϯλϓϦλ • Ϣʔβ͔Βೖྗ͞ΕΔจࣈྻͷߦͷίϚϯυΛղऍ͠ɺOS΍ϓϩάϥϛϯάݴޠॲཧܥͳͲʹ ౉͢΋ͷ • ίϚϯυϥΠϯΠϯλϓϦλ͸࣍ͷ4ͭΛॱʹߦ͏ʢREPLʣɻ 1. ೖྗͷಡΈऔΓ…Read 2. ೖྗจࣈʢίϚϯυʣΛ࣮ߦʢධՁʣ...Eval 3. ࣮ߦ݁ՌΛදࣔ…Print 4. ೖྗͷಡΈऔΓʹ໭Δ…Loop • Bash΍Bourne Shellͱ͍ͬͨUNIXγΣϧ΍RubyͷirbɺPHPͷ`php -a`ͳͲ

Slide 9

Slide 9 text

9 Command-line interface CLIπʔϧʢCommand-line interface toolʣ • ຊൃදͰ͸ίϚϯυΛೖྗ͢Δ͜ͱͰUNIXγΣϧ͔Β࣮ߦ͞ΕΔϓϩάϥϜΛCLIπʔϧͱݺͿ • lsͳͲɻcomposer΋ͦ͏ɻ • ʢ࣮͸cd΍pwd͸shell built-in commandͳͷͰҧ͏͜ͱͳΔʣ • ίϚϯυϥΠϯΠϯλϓϦλΛ௨࣮ͯ͡ߦ͞Εग़ྗΛฦ͢ϓϩάϥϜ = CLIπʔϧ • CLIπʔϧ͸࣮ߦ࣌ʹ Ҿ਺ʢargsʣ΍ ϑϥάʢflagsʣɺඪ४ೖྗʢSTDINʣͳͲΛೖྗͱͯ͠ ड͚औΔʢਖ਼֬ʹ͸Ҿ਺ͱϑϥάͷ۠ผ͸CLIπʔϧ಺Ͱߦ͏ʣ • CLIπʔϧ͸ʮCommand-line interfaceΛ࣋ͭπʔϧʯ

Slide 10

Slide 10 text

10 Command-line interface tool design

Slide 11

Slide 11 text

11 Command-line interface tool design CLIπʔϧͷσβΠϯ 2ͭͷଆ໘͔ΒͷCommand-line interface tool design 1. ίϚϯυମܥͷσβΠϯ … interface design • ͲͷΑ͏ͳίϚϯυମܥΛϢʔβʹఏڙ͢Δͷ͔ 2. πʔϧͱͯ͠ͷ࣮૷ͷσβΠϯ … tool design • ͲͷΑ͏ͳΞʔΩςΫνϟʹ͢Δͷ͔

Slide 12

Slide 12 text

12 ίϚϯυମܥͷσβΠϯ

Slide 13

Slide 13 text

13 ίϚϯυମܥͷσβΠϯ CLIπʔϧ͕࣋ͭϢʔβΠϯλʔϑΣʔεʹٻΊΒΕΔ͜ͱ • WebΞϓϦέʔγϣϯͱରൺͯ͠ΈΔͱɺWebΞϓϦέʔγϣϯʹ͓͚ΔϢʔβΠϯλʔϑΣʔε ͸େ͖͘2ͭ 1. ϒϥ΢βʢ͔ΒݟΔHTMLϖʔδʣ 2. Web API • GUIͱϒϥ΢βɺCLIͱWebAPI͕ରൺ͞ΕΔΑ͏ʹΈ͑Δ͕ͦ͏Ͱ͸ͳ͍ 1. ϒϥ΢β = ਓΛϢʔβͱͨ͠ϢʔεέʔεʢͱϢʔβΠϯλʔϑΣʔεʣ 2. Web API = ػցΛϢʔβͱͨ͠ϢʔεέʔεʢͱϢʔβΠϯλʔϑΣʔεʣ • CLIπʔϧ΋WebΞϓϦέʔγϣϯͱಉ༷ʹਓͱػցͷ2ͭͷϢʔεέʔε͕͋Γɺ
 1ͭͷϢʔβΠϯλʔϑΣʔεͰ2ͭͷϢʔεέʔεΛಉ࣌ʹຬͨ͢ඞཁ͕͋Δ

Slide 14

Slide 14 text

14 ίϚϯυମܥͷσβΠϯ ͳͥ2ͭͷϢʔεέʔεΛಉ࣌ʹຬͨ͢ඞཁ͕͋Δͷ͔ • CLI͕࣋ͭ࠷΋େ͖ͳϝϦοτ͸ʮ༷ʑͳૢ࡞Λ୯ҰͷϢʔβΠϯλʔϑΣʔεͰ࣮ݱͰ͖Δʯ ͜ͱ • ʢ͋͑ͯɺผͷݴ͍ํΛ͢Δͱʮ୯ҰͷϢʔβΠϯλʔϑΣΠε͔͠ఏڙͰ͖ͳ͍ʯͱ΋͍͑Δʣ • CLIπʔϧ͸ภΓͦ͋͜Δ͕ʮਓʯͱʮػցʯͷ྆ํͷϢʔεέʔεͰ࢖ΘΕΔ͜ͱ͕΄ͱΜͲɻ

Slide 15

Slide 15 text

15 ίϚϯυମܥͷσβΠϯ ʮ୯ҰͷϢʔβΠϯλϑΣʔεʯʹ͋ΔϨΠϠʔ • ͱ͜ΖͰʮ୯ҰͷϢʔβΠϯλʔϑΣʔεʯʹ΋2ͭͷϨΠϠʔ͕͋Δ 1. 1ͭͷCLIπʔϧͱ͍͏୯ҰͷϢʔβΠϯλʔϑΣʔε 2. UNIXγΣϧ্ͱ͍͏୯ҰͷϢʔβΠϯλʔϑΣʔε • ͜ͷ2ͭͷϨΠϠʔʹ͍ͭͯ΋෼͚ͯߟྀ͢Δඞཁ͕͋Δ

Slide 16

Slide 16 text

16 ίϚϯυମܥͷσβΠϯ 2ͭͷϢʔεέʔεɺ2ͭϨΠϠʔ • ίϚϯυମܥͷσβΠϯʹ͓͍ͯ͸2ͭͷϢʔεέʔεͱ2ͭͷϨΠϠʔΛߟྀ͢Δ • CLIπʔϧͷಛੑʹΑͬͯภΓ͕͋Γͭͭ΋ɺ͜ͷ4ͭʹ͍ͭͯҙࣝͯ͠σβΠϯ͢Δ͜ͱ͕େࣄ

Slide 17

Slide 17 text

17 ίϚϯυମܥͷσβΠϯ ʮ1ͭͷCLIπʔϧʯͱ͍͏ϨΠϠʔ • ίϚϯυೖྗͱ͍͏୯७ͳΠϯλʔϑΣΠεʹ࣮͸ଟ͘ͷػೳΛؚΊΔ͜ͱ͕Ͱ͖Δ • αϒίϚϯυ • ྫ͑͹ɺaws-cliͱ͍͏CLIπʔϧ͸୯ҰͷϢʔβΠϯλʔϑΣʔεͰ༷ʑͳAWSϦιʔεͷૢ࡞ ͕Ͱ͖Δ • ϒϥ΢β্ʢAWS Management Console্ʣͰ͸ෳ਺ͷϖʔδΛߦ͖དྷ͢Δඞཁ͕͋Δ • ͜Ε͚ͩͰ΋े෼ϝϦοτʹͳΔ • ҰํͰଟ͘ͷػೳΛ1ͭͷCLIπʔϧͰૢ࡞͢Δඞཁ͕͋Δ • େલఏͱͯ͠CLIπʔϧͷதͰ౷Ұ͞ΕͨίϚϯυମܥͰ͋Δ͜ͱ͕ٻΊΒΕΔ

Slide 18

Slide 18 text

18 ίϚϯυମܥͷσβΠϯ ʮUNIXγΣϧ্ʯͱ͍͏ϨΠϠʔ • UNIXγΣϧ্ͷCLIπʔϧ͸࣮ߦํ๏ͱೖग़ྗ͕౷Ұ͞Ε͍ͯΔ • fork, execve • STDIN, STDOUT, STDOUTʢExit code, args, flagsʣ • ύΠϓͱ͍͏ίϚϯυΛ૊Έ߹ΘͤΔͨΊͷڧྗͳػೳ • UNIXγΣϧ্ͰධՁ͞ΕΔϓϩάϥϜʢ·ͨ͸ผͷϓϩάϥϜʹΑͬͯධՁ͞ΕΔϓϩάϥ Ϝʣ͸ඃ࣮ߦ΋࣮ߦ΋͜ͷ୯ҰͷΠϯλʔϑΣʔεʹରԠ͢Ε͹ྑ͍ • ݁Ռͱͯ͠࿈ܞ΍ࣗಈԽ͕༰қʹͳΔɻͭ·Γ૊Έ߹ΘͤΔ͜ͱ͕͋Δ • ૊Έ߹ΘͤΛߟྀͨ͠ίϚϯυମܥͰ͋Ε͹͋Δ΄Ͳ࢖͍΍͍͢

Slide 19

Slide 19 text

19 ίϚϯυମܥͷσβΠϯ UNIX఩ֶ • ʢ਺͋ΔʣUNIX఩ֶʢͷ͏ͪͷ1ͭʣ͔ΒCLIπʔϧͷσβΠϯʹؔ܎͢ΔՕॴΛڧௐ • μάϥεɾϚΩϧϩΠଞόʔδϣϯʢ1978೥ Bell System Technical Journalʣ 1. ͦΕͧΕͷϓϩάϥϜ͕1ͭͷ͜ͱΛ͏·͘͜ͳ͢Α͏ʹɻ৽͍͠࢓ࣄΛ͢ΔͨΊʹɺ৽͍͠ʮػೳʯ Λ௥Ճͯ͠ݹ͍ϓϩάϥϜΛෳࡶʹ͢ΔͷͰ͸ͳ͘ɺ৽͍͠ϓϩάϥϜΛߏங͢Δɻ 2. ͢΂ͯͷϓϩάϥϜͷग़ྗ͕ɺ·ͩݟ͵ผͷϓϩάϥϜͷೖྗʹͳΔ͜ͱɻग़ྗʹ༨ܭͳ৘ใΛೖΕͳ ͍Α͏ʹɻݫີʹྻڍ͞Εͨೖྗܗࣜ΍όΠφϦܗࣜ͸ආ͚ΔɻΠϯλϥΫςΟϒͳೖྗʹͩ͜ΘΒͳ ͍ 3. ιϑτ΢ΣΞ͸΋ͪΖΜOSͰ͋ͬͯ΋ɺૣظʹɺཧ૝ͱͯ͠͸਺िؒҎ಺ʹࢼͤΔΑ͏ઃܭɾߏங͢Δɻෆث༻ͳ෦෼͸᪳᪯ͳࣺͯͯ͘࡞Γ௚ ͢Α͏ʹ 4. ճΓಓΛͯ͠΋ɺ࢖͍ऴΘͬͨޙʹࣺͯΔ͜ͱʹͳͬͯ΋ɺϓϩάϥϛϯάͷ࡞ۀΛܰݮ͢ΔͨΊʹ͸ɺ͓ख఻͍͞ΜͰ͸ͳ͘πʔϧΛ࢖͏ https://ja.wikipedia.org/wiki/UNIX఩ֶ ΑΓҾ༻

Slide 20

Slide 20 text

20 ίϚϯυମܥͷσβΠϯ ਓΛϢʔβͱͨ͠Ϣʔεέʔε • CLIͷσϝϦοτ͸ʮίϚϯυΛ͍֮͑ͯͳ͍ͱ࣮ߦͰ͖ͳ͍ʯͱ͍͏͜ͱ • Կ΋ೖྗ͍ͯ͠ͳ͍UNIXγΣϧ্ʹ͸Կ΋ώϯτ͸ͳ͍ʢݟ͍͑ͯͳ͍ʣ • ༷ʑͳίϚϯυମܥ͕ଘࡏ͠ɺෳࡶͳ͜ͱΛ΍Ζ͏ͱ͢Δͱେ఍ෳࡶͳίϚϯυΛ هड़͢Δඞཁ͕͋Γɺͦͷ݁Ռਓͷ೴಺ϝϞϦΛଟ͘ফඅͯ͠͠·͏ɻ • ਓʹͱͬͯೖྗ͠΍͍͢ཧղ͠΍͍͢ίϚϯυମܥ͕ٻΊΒΕΔ

Slide 21

Slide 21 text

21 ίϚϯυମܥͷσβΠϯ ʮೖྗ͠΍͍͢ʯͱ͸ • ૝૾͠΍͍͢ɻ֮͑΍͍͢ • ౷Ұ͞Εͨϑϥά΍αϒίϚϯυͷମܥ • ϑϥά΍αϒίϚϯυ͸໊ࢺͳͷ͔ಈࢺͳͷ͔ɺओޠ͸Կͳͷ͔ • ଞͷΑ͘஌ΒΕͨCLIπʔϧͱಉ͡Α͏ͳίϚϯυମܥ • ʮৄࡉग़ྗ͸ `-v (--verbose)` ʯͳͲ • ίϚϯυ͸૊Έ߹ΘͤΔ͜ͱ͕૝ఆ͞ΕΔͨΊʮࣗ෼ͷίϚϯυମܥʯ͚ͩΛߟ͍͑ͯͯ͸࢖͍ ʹ͘͘ͳΔ • ೖྗ͢Δจࣈ͕୯७ʹগͳ͍ • ֮͑Εͯ͠·͑͹࣮ߦͰ͖Δɻͦ͏͢Δͱසൟʹ࣮ߦ͢ΔίϚϯυͷλΠϓ਺͸গͳ͍ํ͕ྑ͍ ʢγϣʔτΧοτͱಉ͡ʣ • γϣʔτϑϥάͷఏڙ

Slide 22

Slide 22 text

22 ίϚϯυମܥͷσβΠϯ ʮཧղ͠΍͍͢ʯͱ͸ • ࣮ߦ݁Ռ͕Θ͔Γ΍͍͢ • ࣮ߦ݁Ռͷग़ྗ͕ɺಡΜͰҙຯΛཧղͰ͖Δ • ࣮ߦ݁Ռͷग़ྗ͕ɺಡ·ͳͯ͘΋ݟͨ໨ͰཧղͰ͖Δ • ৭ʢ੒ޭͳΒ྘ɺࣦഊͳΒ੺ʣ • ࣮ߦ͢ΔίϚϯυ͕ԿΛ࣮ߦ͢Δͷ͔͕Θ͔Γ΍͍͢ • ಡΜͰҙຯ͕Θ͔ΔίϚϯυମܥɻϩϯάϑϥάͷఏڙ

Slide 23

Slide 23 text

23 ίϚϯυମܥͷσβΠϯ ػցΛϢʔβͱͨ͠Ϣʔεέʔε • ίϚϯυͱͯ͠ొ࿥Ͱ͖Ε͹͍͍ɻͲΜͳίϚϯυମܥͰ΋Ұ౓ొ࿥ͯ͠͠·͑͹ͳΜͰ΋OK • CRON΍Consul health checksͳͲ • Ұ౓ొ࿥ͯ͠͠·͑͹OKͳͷ͔ͩΒΉ͠Ζೖྗ͸͠ʹ͘͘ͱ΋Մಡੑͷߴ͍ίϚϯυ͕هड़Ͱ ͖Δํ͕ྑ͍ • ొ࿥ͨ͠ίϚϯυɺޙͰݟͯͦͷҙຯ͸Θ͔Γ·͔͢ʁ͍֮͑ͯ·͔͢ʁ • ػցʹΘ͔Γ΍͍࣮͢ߦ݁Ռ • ऴྃεςʔλεʢExit codeʣ • STDOUTɺSTDERRͷ࢖͍෼͚

Slide 24

Slide 24 text

24 ίϚϯυମܥͷσβΠϯ ίϚϯυମܥͷσβΠϯ • 2ͭͷϨΠϠʔͱ2ͭͷϢʔεέʔεɺ߹ܭ4ͭͷྖҬΛҙࣝͯ͠όϥϯεΛͱΔ • ѹ౗తʹ୯ҰίϚϯυͰਓ͕࢖͏ͳΒ1ʹภͬͨίϚϯυମܥ • ଞͷCLIπʔϧͱ૊Έ߹Θͤͯ׆༻͞ΕΔͳΒɺ3ͱ4Λॏࢹͨ͠ίϚϯυମܥ • 4ͭͷྖҬ͕͋Δͱ͍͏͜ͱΛҙࣝ͢Δ͜ͱ͕ॏཁ

Slide 25

Slide 25 text

25 έʔεελσΟ

Slide 26

Slide 26 text

26 έʔεελσΟ ʮௐࠪ࣌ʹҰ࣌తʹ࢖༻͢ΔίϚϯυͳͷͰ֮͑ΒΕͳ͍ʯ • ࣮ߦ͢ΔͱόοΫάϥ΢ϯυϓϩηε্ཱ͕͕ͪΓࢦఆظ͚ؒͩαʔόͷϝτϦΫεΛ؂ࢹ͠ɺ ࣄલʹઃఆͨ͠৚݅ʹୡͨ࣌͠ʹ೚ҙͷίϚϯυͷ࣮ߦ΍Slack௨஌Λߦ͏CLIπʔϧ • ʮࠓ౓CPUར༻཰͕80%Λ௒͑ͨ࣌ʹtopίϚϯυͷ݁ՌΛͱΓ͍ͨʯͳͲ • ෳࡶͳ৚݅ઃఆ͕Ͱ͖Δ͕ɺௐࠪ࣌ʹҰ࣌తʹ࢖༻͢ΔίϚϯυͳͷͰͦ΋ͦ΋ίϚϯυࣗମ֮ ͑ΒΕͳ͍ • sheer-heart-attack launch ͚ͩΛ֮͑ͯ΋Β͍ɺΠϯλϥΫςΟϒϞʔυʹͨ͠ • ೖྗ׬ྃޙʹ sheer-heart-attack launch ͷϓϩηε͔Βೖྗͨ͠஋Λflagsʹม׵ͨ͠͏͑Ͱ sheer-heart-attack task ʢϝΠϯͷ؂ࢹίϚϯυʣΛόοΫάϥ΢ϯυ࣮ߦ sheer-heart-attack https://github.com/k1LoW/sheer-heart-attack

Slide 27

Slide 27 text

27 έʔεελσΟ

Slide 28

Slide 28 text

28 έʔεελσΟ ʮͨͩͨͩϩάʹ৭෇͚Λ͍ͨ͠ʯ • ϩάͷ͏ͪಛఆͷΩʔϫʔυ͚ͩ৭෇͚Λ͢Δπʔϧ • ʮ৭Λ͚͍ͭͨʯͷ໨త͸໨ཱ͍ͨͤͨ • ͦΕ͚ͩɻ৭Λࢦఆ͍ͨ͠Θ͚Ͱ͸ͳ͍ • ໨ཱ͍ͨͤͨͱߟ͍͑ͯΔͷ͸ਓɺػցͰ͸ͳ͍ • tail -F /var/log/nginx/access.log | colr POST GET 404 500 search • argsʹΩʔϫʔυΛฒ΂ͯ΋Β͏͚ͩͷίϚϯυମܥʹͨ͠ • ϩάͳͲͷೖྗ͸ඪ४ೖྗܦ༝ʹݶఆ͢Δ͜ͱͰίϚϯυମܥΛγϯϓϧʹ • ৭ͷࢦఆػೳ΋ͳ͠ colr https://github.com/k1LoW/colr

Slide 29

Slide 29 text

29 έʔεελσΟ ʮجຊ͸CIʹ૊ΈࠐΉ͜ͱ͕ϝΠϯɻ͔͠͠ϩʔΧϧͰ΋ผͷϢʔεέʔε͕͋Δʯ • CI্ͰίʔυΧόϨοδ͚ͩͰͳ͘CIʢGitHub ActionsʣͷAPIΛୟ͍ͯςετ࣮ߦ࣌ؒͷܭଌ ΍ΧόϨοδϨϙʔτͷૹ৴ͳͲΛߦ͏πʔϧ • CI্ͷ؀ڥม਺ͱઃఆϑΝΠϧͰڍಈΛܾఆ͢Δ • ҰํͰʮίʔυΧόϨοδΛ֬ೝ͍ͨ͠ʯ͸ϩʔΧϧ্ͷϢʔεέʔεͰ΋͋Δɻ • ಉ͡ octocov ίϚϯυͰ΋ɺ؀ڥม਺ʹΑͬͯڍಈΛมߋ͢ΔΑ͏ʹ͠ɺCI্ͰͷॲཧΛޡͬ ࣮ͯߦ͠ͳ͍Α͏ʹ͍ͯ͠Δɻ • ػցͷϢʔεέʔεΛϝΠϯͱͭͭ͠΋ਓͷϢʔεέʔεͷ৔߹Λߟྀͨ͠ύλʔϯ octocov https://github.com/k1LoW/octocov

Slide 30

Slide 30 text

30 πʔϧͱͯ͠ͷ࣮૷ͷσβΠϯ

Slide 31

Slide 31 text

31 πʔϧͱͯ͠ͷ࣮૷ͷσβΠϯ CLIπʔϧͱWebΞϓϦέʔγϣϯͱͷൺֱ • WebΞϓϦέʔγϣϯͱରൺͯ͠ΈΔͱɺ • WebΞϓϦέʔγϣϯ • ೖग़ྗ͸HTTPϦΫΤετ-Ϩεϙϯε • ػೳΛ࣮ݱ͢ΔͨΊʹσʔλϕʔε΍ϑΝΠϧ΁ͷಡΈॻ͖΍֎෦APIͱͷ௨৴ͳͲ͕ߦΘΕ Δɻ • CLIπʔϧ • ೖྗ͸ίϚϯυ/STDINɺग़ྗ͸STDOUT/STDERRʢͱExit codeʣ • ػೳΛ࣮ݱ͢ΔͨΊʹσʔλϕʔε΍ϑΝΠϧ΁ͷಡΈॻ͖΍֎෦APIͱͷ௨৴ͳͲ͕ߦΘΕ Δɻ • ࣮͸ͱͯ΋͍ۙɻWebΞϓϦέʔγϣϯͷϓϥΫςΟεΛͦͷ··࢖͏͜ͱ͕Ͱ͖Δ͜ͱ͕΄ͱΜͲɻ

Slide 32

Slide 32 text

32 πʔϧͱͯ͠ͷ࣮૷ͷσβΠϯ WebΞϓϦέʔγϣϯͱҟͳΔಛੑ • ࣮ߦ৔ॴ͕ෆಛఆଟ਺ • ʮಛఆͷαʔό্ʯͱ͍͏Θ͚Ͱ͸ͳ͍ʢʮͦΕͧΕͷϩʔΧϧʯͳͲʣ • 1ճͷ࣮ߦ͕׬ྃ͢ΔͱCLIπʔϧͷϓϩηε͸ऴྃ͢Δ • ΩϟογϡͳͲͷҰ࣌৘ใͷอ࣋Λ͢Δ৔߹ɺΠϯϝϞϦΛબ୒Ͱ͖ͳ͍ • ෆಛఆଟ਺ͷϢʔβ͔ΒͷೖྗΛಉ࣌ʹड͚෇͚Δ͜ͱ͸ͳ͍ • ͦͷ࢓༷͕ඞཁͳ৔߹ɺͦΕ͸΋͏CLIπʔϧͰ͸ͳ͍΄͏͕ྑͦ͞͏ • Web-DBͷΑ͏ͳӨڹ͕ดͨ͡ߏ੒ʹͳΔ͜ͱ͸গͳ͘ɺ֎෦ͷཁૉ΁࡞༻͢ΔػೳΛ࣋ͭ͜ͱ ͕ଟ͍

Slide 33

Slide 33 text

33 πʔϧͱͯ͠ͷ࣮૷ͷσβΠϯ CLIπʔϧͷΞʔΩςΫνϟ • ೖग़ྗ͸ܾ·͓ͬͯΓɺ࣮૷͢΂͖ϏδωεϩδοΫ΋ఆٛͰ͖Δ఺͸WebΞϓϦέʔγϣϯͱಉ ͡ɻWebΞϓϦέʔγϣϯͰ࢖͍ͬͯΔΞʔΩςΫνϟύλʔϯ΍ݪଇ͸CLIπʔϧͰ΋༗ޮ • ҰํͰɺCLIπʔϧ͸ • UNIX఩ֶΑΓʮ1ͭͷ͜ͱΛ͏·͘΍ΔʯΑ͏ʹ࣮૷͞Ε
 Δ͜ͱ͕ଟ͍ͨΊEntities΍Use Cases͸খ͘͞ͳΓ͕ͪ • Presenters/UI͸͍ͭ΋
 ίϚϯυ/STDIN/STDOUT/STDERR/Exit codeͰࣗ໌ • ֎෦ͷཁૉ΁࡞༻͢ΔػೳΛ࣋ͭ͜ͱ͕ଟ͍ͨΊGateways
 ʹଟ༷ੑ͕ੜ·Ε΍͍͢

Slide 34

Slide 34 text

34 πʔϧͱͯ͠ͷ࣮૷ͷσβΠϯ πʔϧͱͯ͠ͷ࣮૷ͷσβΠϯ • WebΞϓϦέʔγϣϯͱಉ͡ΞʔΩςΫνϟύλʔϯ΍ݪଇ͸ͦͷ··׆༻Ͱ͖Δ • ͔͠͠ɺCLIπʔϧͷಛੑʹΑΓॏ఺తʹ࣮૷Λߟ͑ΔϨΠϠʔ͕มΘΔ͜ͱ͕Α͋͘Δ • ͦΕͰ΋WebΞϓϦέʔγϣϯͱಉ͡ΞʔΩςΫνϟύλʔϯ΍ݪଇ͸ͦͷ··׆༻Ͱ͖Δ • ύλʔϯ΍ݪଇʹଇΕ͹໰୊ͳ͍

Slide 35

Slide 35 text

35 έʔεελσΟ

Slide 36

Slide 36 text

36 έʔεελσΟ ʮ͍Ζ͍Ζͳσʔλϕʔεͷ৘ใΛऔಘ͍ͨ͠ʯ • σʔλϕʔεʹ઀ଓͯ͠σʔλϕʔεεΩʔϚυΩϡϝϯτΛੜ੒͢Δπʔϧ • ෳ਺ͷछྨͷσʔλϕʔεΛαϙʔτ • ͲͷछྨͷσʔλϕʔεͰ΋ಉ͡Α͏ͳεΩʔϚυΩϡϝϯτ
 Λੜ੒͢Δඞཁ͕͋Δ • Gateways͕େ׆༂ • WebΞϓϦέʔγϣϯͷٞ࿦ʹ͋Γ͕ͪͳ
 ʮDBΛஔ͖׵͑ΔͳΜͯΞϓϦέʔγϣϯͷण໋͔Β
 Έͯ΋ଘࡏ͠ͳ͍ʯͱ͍͏͜ͱʹͳΒͳ͍ɻΉ͠Ζ૿͑Δ tbls https://github.com/k1LoW/tbls

Slide 37

Slide 37 text

37 έʔεελσΟ ʮ͍Ζ͍ΖͳσʔλετΞʹϨϙʔτΛૹΓ͍ͨʯ • ઌ΄Ͳ΋Ͱ͖ͯͨίʔυϝτϦΫεऩूπʔϧ • ऩूͨ͠ϝτϦΫεΛGitHubͷPull Requestʹίϝϯτ͢ΔҎ֎ʹ
 ༷ʑͳσʔλετΞʹϨϙʔτ͍ͨ͠ • ूܭ͢ΔͨΊ • ʮϨϙʔτʯͰந৅Խ্ͨ͠Ͱଟ͘ͷAPIʹରԠ͍ͤͯ͞Δ • ͜͜Ͱ΋Gatewaysେ੝گ octocov https://github.com/k1LoW/octocov

Slide 38

Slide 38 text

38 έʔεελσΟ ʮྲྀΕΔϩάΛ͍͍ײ۠͡੾ͬͯॲཧ͍ͨ͠ʯʢ1/2ʣ • ྲྀΕ͍ͯΔϩάʹରͯ͠ʮ3ඵִؒͰΧ΢ϯτ͍ͨ͠ʯͱ͔ʮ1000ߦ͝ͱʹ౷ܭΛऔΓ͍ͨʯ͕ Ͱ͖ΔCLIπʔϧ evry https://github.com/k1LoW/evry

Slide 39

Slide 39 text

39 έʔεελσΟ ʮྲྀΕΔϩάΛ͍͍ײ۠͡੾ͬͯॲཧ͍ͨ͠ʯʢ2/2ʣ evry https://github.com/k1LoW/evry • ྲྀΕ͍ͯΔϩά=ετϦʔϜͳͷͰͰ͖Δ͚ͩඪ४ೖྗΛܭࢉίετখ͘͞ॲཧ͍ͨ͠ • ϨΠϠʔΛΘ͚ͯஸೡͳDTOͳͲ͸΍ͬͯΒΕͳ͍ • ʮೖྗͱग़ྗʯͱ͍͏ΠϝʔδͰ͸ͳ͘
 ʮೖྗ͔Βग़ྗʯͱ͍͏ύΠϓϥΠϯΛ૊Ή • CLIπʔϧʹٻΊΒΕΔϢʔεέʔεͱͯ͠͸
 Α͋͘Δ

Slide 40

Slide 40 text

͓ΘΓʹ 40

Slide 41

Slide 41 text

• Command-line interface tool designͱ୊ͯ͠ίϚϯυମܥͷσβΠϯͱ࣮૷ͷσβΠϯʹ͍ͭͯ έʔεελσΟΛަ͑ͯ঺հͨ͠ • CLIπʔϧ͸ը໘ͷͳ͍୯७ͳϓϩάϥϜͱࢥ͍͖΍ҙ֎ʹߟྀͨ͠΄͏͕͍͍͜ͱ͸ଟ͘ɺΑ Γྑ͍ϢʔβମݧΛఏڙ͢ΔͨΊʹ͸WebΞϓϦέʔγϣϯͱ΋উΔͱ΋ྼΒͳ͍σβΠϯ͕ඞ ཁ • σβΠϯ͕ఆ·Βͳͯ͘ख͕ࢭ·ͬͨΓਤʹىͨ͜͠Γ͢Δͷ΋WebΞϓϦέʔγϣϯͱ ಉ͡ • օ͞Μ͕CLIπʔϧΛ։ൃ͢Δࡍͷॿ͚ʹͳΕ͹޾͍Ͱ͢ɻ 41 ͓ΘΓʹ ͓ΘΓʹ

Slide 42

Slide 42 text

Thank You! Thank You! 42