Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TypeScriptのコマンドラインパーサー

 TypeScriptのコマンドラインパーサー

Akito0107

June 27, 2019
Tweet

More Decks by Akito0107

Other Decks in Technology

Transcript

  1. TypeScriptͰ
    ίϚϯυϥΠϯ

    ύʔαʔ
    NodeֶԂ34ݶ໨
    ҏ౻ɹӯ

    View Slide

  2. ࣗݾ঺հ
    • ҏ౻ɹӯ (͍ͱ͏ɹ͖͋ͱʣ
    • @akito0107
    • όοΫΤϯυΤϯδχΞ
    • Go / TypeScriptΛॻ͍͍ͯ·͢
    • https://blog.akito0107.dev

    View Slide

  3. ໨࣍
    • ίϚϯυϥΠϯύʔαʔΛ࡞ͬͨ࿩
    • ͳͥ࡞͔ͬͨ
    • Demo
    • ࢖͍ํʹ͍ͭͯ

    View Slide

  4. Node.jsͰ

    ίϚϯυϥΠϯπʔϧΛ࡞Δ
    • ҎԼͷΑ͏ͳϥΠϒϥϦ͕༗໊
    • substack/minimist
    • tj/commander
    • cacjs/cac
    • yargs/yargs
    • ෳࡶͳΦϓγϣϯΛύʔε͢Δͱ͖ʹਏ͍

    View Slide

  5. Option Hell
    • ex) kubectl


    View Slide

  6. Sub command΋
    ͭΒ͍

    View Slide

  7. ίϚϯυϥΠϯͷΦϓγϣϯ
    • ͋Δఔ౓ෳࡶͳίϚϯυΛ࣮૷͠Α͏ͱͨ͠
    ৔߹ɺΦϓγϣϯͷ਺͕Ͳ͏ͯ͠΋๲Ε্
    ͕ͬͯ͠·͏
    • طଘϥΠϒϥϦͰෳࡶͳΦϓγϣϯΛѻ͓͏
    ͱ͢Δͱݫ͍͠(ͱࢥͬͯΔ)

    View Slide

  8. ex) commander

    View Slide

  9. ex) commander
    ܕ͕΄͍͠ʂʂʂʂ

    View Slide

  10. ܕ͕ͭ͘΍ͭΛ࡞ͬͨ
    • https://github.com/akito0107/marron-glace
    • σϞ

    View Slide

  11. ϑϥάͷఆٛͷ࢓ํ
    • makeStringFlag / makeBooleanFlag …
    • ͜ΕΒͷؔ਺ʹɺϑϥάͷ໊લͱΦϓγϣϯ
    ʢσϑΥϧτ࣌ͷ஋ɺhelpͰදࣔ͢Δจݴͳ
    ͲʣΛ౉͢

    View Slide

  12. <= Stringͷͱ͖͸stringҎ֎ڐ༰͠ͳ͍
    <=helpͷͱ͖ͷจݴ
    <= -s Ͱ΋ड͚ΒΕΔΑ͏ʹ
    —flag1 ͷϑϥάΛఆٛ
    —flag2 ͷϑϥάΛఆٛ

    View Slide

  13. ϑϥάͷreduce
    • reduceFlagͰෳ਺ͷϑϥάΛ·ͱΊΔ
    • reduceFlagͷฦΓ஋΋flagͳͷͰɺ࠶౓
    reduce͢Δ͜ͱ͕Ͱ͖Δ

    View Slide

  14. makeCommand
    • flagΛmakeCommandͷύϥϝʔλʹ౉͢
    <= ͜ͷ͋ͨΓ͸helpͰग़͢΍ͭ

    View Slide

  15. (positional)Arguments
    • `mv src target` ͷsrc, targetͷΑ͏ʹɺίϚϯ
    υʹΘͨ͢Ҿ਺΋ܕ෇͖Ͱαϙʔτ

    View Slide

  16. makeCommandʹΘͨ͢
    <= ͜͜ʹิ׬͕ޮ͘

    View Slide

  17. Sub commands
    • makeSubcommandHandlerΛ࢖͏
    <= ͜͜ʹsubCommandΛ͍ΕΔ

    View Slide

  18. Sub commandΛ࡞Δ
    <= ਌ίϚϯυͷflag
    <= subίϚϯυͷflag
    ↑ ਌ίϚϯυͱreduce͢Δ
    <- ਌ίϚϯυͷflagͱ

    subίϚϯυͷflag͕྆ํ࢖͑Δ

    View Slide

  19. ͦͷଞ
    • —helpͰϔϧϓίϚϯυ
    • ಠࣗܕͷflag
    • ৄ͘͠͸ϒϩάʹ

    View Slide

  20. ·ͱΊ
    • TypeScriptܕਪ࿦͕όϦόϦޮ͘ίϚϯυϥ
    ΠϯπʔϧΛ࡞ͬͨ
    • όάͳͲ͋Γ·ͨ͠Β࿈བྷ͍ͯͩ͘͠͞ʂ

    View Slide

  21. ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide