Swift ArgumentParser ã«ãããããããã£ã®å®ç¾©é ã®éè¦æ§
ä»åã¯ã¿ã¤ãã«éã ArgumentParser ã使ã£ã¦ããæã®ããããã£ã®å®ç¾©é ã®éè¦æ§ã«ã¤ãã¦æ¸ãã¾ããv0.0.2 ã§å®éã«çµé¨ãã¦ããç¯å²ã§ãããã¾ã ArgumentParser ã®ã½ã¼ã¹ã³ã¼ããèªãã å 容ã§ã¯ãªããã¨ãä»å¾ã®ãã¼ã¸ã§ã³ã§å¤ãããããã¨ããäºæ¿ãã ããã
ååã®ã¨ã³ããªã®ã¤ã¥ã
import ArgumentParser struct MyEcho: ParsableCommand { static var configuration = CommandConfiguration(commandName: "myEcho") struct Version: ParsableArguments { @Flag() var version: Bool func validate() throws { if version { throw CleanExit.message("1.0.0") } } } @OptionGroup() var version: Version @Argument() var text: String func run() throws { print(text) } } MyEcho.main()
ä¸è¨ãµã³ãã«ã³ã¼ãã¯ååã®ã¨ã³ããªã§ç´¹ä»ãããå¿ é 弿°ã¨ãã¼ã¸ã§ã³ãã©ã°ã®ä¸¡ç«ãããããã®ã³ã¼ãä¾ã§ãã詳ããå 容ã¯ååã®ã¨ã³ããªãåç §ãã ããã
å®ã¯ãã®ä¸è¨ã®ã³ã¼ãã§ãåå解決ããåé¡ãåã³çºçããããã¨ãåºæ¥ã¾ãã
åé¡åçãµã³ãã«
import ArgumentParser struct MyEcho: ParsableCommand { static var configuration = CommandConfiguration(commandName: "myEcho") struct Version: ParsableArguments { @Flag() var version: Bool func validate() throws { if version { throw CleanExit.message("1.0.0") } } } @Argument() var text: String @OptionGroup() var version: Version func run() throws { print(text) } } MyEcho.main()
ä½ãå¤ãã£ãããããã¾ããï¼
text ããããã£ã¨ version ããããã£ã®å®ç¾©é ã夿´ã㦠text ããããã£ãå ã«æã£ã¦ãã¾ãããããã ãã§
% myEcho --version Error: Missing expected argument '<text>' Usage: myEcho <text> [--version]
ã¨ããã¨ã©ã¼ã«ãªãã¾ãã
çµè«ï¼çµé¨ä¸ï¼
ããããã£ã®å®ç¾©é ã«å¦çãé²ãã®ã§å ã«è§£æ±ºãã¦æ¬²ãããã®ã¯å ã«æ¸ãã¹ãã
ããã㯠@Argument()
ã¯å¿
ãæå¾ã«æ¸ãã¹ãã¨ãè¨ãã¾ãã
@OptionGroup()
ã® Property Wrapper ã® init æã« ParsableArguments
ã® func validate() throws
ãå®è¡ããã¾ããä¸ããããããã£ãåãã¦ããããã« ArgumentParser ã¯åä½ãã¦ãããããªã®ã§ã弿°ãå¦çãã¦ããæä¸ã« struct Version
ã®ã¤ãã·ã£ã©ã¤ãºã®æ®µéã§ããªãã¼ã·ã§ã³å¦çã§ãããï¼ãã¼ã¸ã§ã³çªå·ãåºåãã¦æ£å¸¸æ±ãã§çµäºï¼ããã«ã@Argument() var text: String
ã«å°éããªããããããæå¾
ããåä½ãæã«å
¥ãã¦ããããã®ã³ã¼ãã§ããã
ããããã£ã®å®ç¾©é ã text ãå ã«ããã¨ãArgumentParser ã弿°ã®å¦çããã¦ããã¨ãã« text ããããã£ã«ä»£å ¥ããã¹ãå¤ãåå¨ããªããã version ããããã£ã®å¦çãããåã«å¿ é é ç®ãæ¬ å¦ãã¦ããã¨ãã¦ã¨ã©ã¼ã«ãªãã¾ãã
Help ã Usage ã«ãå½±é¿ãã
% myEcho --version Error: Missing expected argument '<text>' Usage: myEcho <text> [--version]
ãã®ã¨ã©ã¼æã® Usage ã®åºåãã¿ãã¨å¼æ° text ã®å¾ãã« version ãã©ã°ãæ¸ããã¦ãã¾ãã
ãããã«ååã®ã¨ã³ããªã®å®æå½¢ã³ã¼ãã弿°ããã©ã°ããªãã§å®è¡ããã¨
Error: Missing expected argument '<text>' Usage: myEcho [--version] <text>
ãã®ããã« version ã®ãã¨ã« text ãæ¥ã¦ãã¾ãã
ããããã£ã®å®ç¾©é ã«ãã£ã¦åºåããã説æã®é çªã«ãå½±é¿ãä¸ãã¦ãã¾ãã
ããã«åãããã£ãç½
åãå®éã«æ¸ãã¦ããã³ã¼ãã§ãå¤ãã弿°ã¨ãã¦ä¸ãããã¯ããªãåºå®å¤ã¨ãã¦ããããã£ã«ä¿æããããã®ãããã¾ããã仿å
ã§åç¾ã§ããªãã®ã§ãããããã Decodable ã«å¯¾å¿ãã¦ãªãã¨ããã³ã³ãã¤ã«ã¨ã©ã¼ãåºã¦ãã¾ãããParsableCommand
㯠ParsableArguments
ã«æºæ ãã¦ãã¾ããããã« ParsableArguments
㯠Decodable
ã«æºæ ãã¦ãã¾ãããã£ã¦ã ParsableCommand
㯠Decodable
ã§ããå¿
è¦ãããã®ã§ãããã ããå¥ã« Decodable ã§ããå¿
è¦æ§ããªãã£ãããããã£ã ã£ãã®ã§ CodingKey ãå®ç¾©ãã¦é¤å¤ã§ããããã«ãã¾ããã
ããã¨ãã£ãã¾ã§åãã¦ãããã¼ã¸ã§ã³çªå·ã®åºåã弿°ããªãã¨æãããããã«ãªãã¾ããã
ãã£ã¨è¬ã ã£ãã®ã§ãããæçµçã«åãã£ããã¨ã¯ CodingKey ã«åæãã¦ãã case ãããããã£ã®å®ç¾©é éãã«ãªã£ã¦ããªãã£ãããã§ããã
ãã®ããã§çµæ§ãªæéãæº¶ãã¦ãã¾ããã
ã¾ã¨ã
ããããã£ã®å®ç¾©é ã¯
- ãã¼ã¹å¦çã®é çª
- Usage ã Help ã®åºåã®é çª
- CodingKey ãå®ç¾©ããå ´åã¯ããããã£ã®å®ç¾©é ã«æãã
ã¨ãããã¨ã§ããã
常ã«é çªãæèãã¦ã³ã¼ããæ¸ãã¾ãããï¼