TypeScriptͰίϚϯυϥΠϯ ύʔαʔNodeֶԂ34ݶҏ౻ɹӯ
View Slide
ࣗݾհ• ҏ౻ɹӯ (͍ͱ͏ɹ͖͋ͱʣ• @akito0107• όοΫΤϯυΤϯδχΞ• Go / TypeScriptΛॻ͍͍ͯ·͢• https://blog.akito0107.dev
࣍• ίϚϯυϥΠϯύʔαʔΛ࡞ͬͨ• ͳͥ࡞͔ͬͨ• Demo• ͍ํʹ͍ͭͯ
Node.jsͰ ίϚϯυϥΠϯπʔϧΛ࡞Δ• ҎԼͷΑ͏ͳϥΠϒϥϦ͕༗໊• substack/minimist• tj/commander• cacjs/cac• yargs/yargs• ෳࡶͳΦϓγϣϯΛύʔε͢Δͱ͖ʹਏ͍
Option Hell• ex) kubectl
Sub commandͭΒ͍
ίϚϯυϥΠϯͷΦϓγϣϯ• ͋ΔఔෳࡶͳίϚϯυΛ࣮͠Α͏ͱͨ͠߹ɺΦϓγϣϯͷ͕Ͳ͏ͯ͠Ε্͕ͬͯ͠·͏• طଘϥΠϒϥϦͰෳࡶͳΦϓγϣϯΛѻ͓͏ͱ͢Δͱݫ͍͠(ͱࢥͬͯΔ)
ex) commander
ex) commanderܕ͕΄͍͠ʂʂʂʂ
ܕ͕ͭͭ͘Λ࡞ͬͨ• https://github.com/akito0107/marron-glace• σϞ
ϑϥάͷఆٛͷํ• makeStringFlag / makeBooleanFlag …• ͜ΕΒͷؔʹɺϑϥάͷ໊લͱΦϓγϣϯʢσϑΥϧτ࣌ͷɺhelpͰදࣔ͢ΔจݴͳͲʣΛ͢
<= Stringͷͱ͖stringҎ֎ڐ༰͠ͳ͍<=helpͷͱ͖ͷจݴ<= -s Ͱड͚ΒΕΔΑ͏ʹ—flag1 ͷϑϥάΛఆٛ—flag2 ͷϑϥάΛఆٛ
ϑϥάͷreduce• reduceFlagͰෳͷϑϥάΛ·ͱΊΔ• reduceFlagͷฦΓflagͳͷͰɺ࠶reduce͢Δ͜ͱ͕Ͱ͖Δ
makeCommand• flagΛmakeCommandͷύϥϝʔλʹ͢<= ͜ͷ͋ͨΓhelpͰग़ͭ͢
(positional)Arguments• `mv src target` ͷsrc, targetͷΑ͏ʹɺίϚϯυʹΘͨ͢Ҿܕ͖Ͱαϙʔτ
makeCommandʹΘͨ͢<= ͜͜ʹิ͕ޮ͘
Sub commands• makeSubcommandHandlerΛ͏<= ͜͜ʹsubCommandΛ͍ΕΔ
Sub commandΛ࡞Δ<= ίϚϯυͷflag<= subίϚϯυͷflag↑ ίϚϯυͱreduce͢Δ<- ίϚϯυͷflagͱ subίϚϯυͷflag͕྆ํ͑Δ
ͦͷଞ• —helpͰϔϧϓίϚϯυ• ಠࣗܕͷflag• ৄ͘͠ϒϩάʹ
·ͱΊ• TypeScriptܕਪ͕όϦόϦޮ͘ίϚϯυϥΠϯπʔϧΛ࡞ͬͨ• όάͳͲ͋Γ·ͨ͠Β࿈བྷ͍ͯͩ͘͠͞ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠