🔥 ArgumentParser의 실험 기능

397자
4분

주의

현재 이 문서는 ArgumentParser 공식 문서 버전 1.3.1 을 편역한 것입니다. 실험 기능은 ArgumentParser 버전이 업데이트 되면서 변경되거나 삭제될 수 있으므로 주의하세요.

https://swiftpackageindex.com/apple/swift-argument-parser/1.3.1/documentation/argumentparser/

ArgumentParser를 사용하여 만든 명령행 프로그램은 --experimental 접두사와 함께 몇 가지 내장된 실험 기능을 포함할 수 있어요. 이러한 기능들은 접두사가 붙어 있는 동안에는 안정적이라고 간주되어서는 안 되는데, 이는 향후 릴리스에서 동작이 변경되거나 제거될 수 있기 때문이에요.

실험 기능에 대한 의견이 있다면 GitHub 이슈를 열어주시길 바랍니다.

실험 기능 목록

이름설명관련 PR버전
--experimental-dump-help명령/인자/도움말 정보를 JSON으로 덤프합니다#310 #3350.5.0 이상
  • -experimental-dump-help 기능을 사용하면 ArgumentParser로 정의한 명령, 인자, 도움말 정보를 JSON 형식으로 덤프할 수 있습니다. 다음은 이 기능을 사용하는 예시 코드예요:
import ArgumentParser
 
struct MyCommand: ParsableCommand {
    @Flag(help: "Activate verbose mode")
    var verbose = false
 
    @Argument(help: "The input file path")
    var inputFile: String
 
    func run() throws {
        print("Verbose: \(verbose)")
        print("Input file: \(inputFile)")
    }
}
 
MyCommand.main(["--experimental-dump-help"])
 
swift

이 코드를 실행하면 다음과 같은 JSON 출력이 터미널에 나타납니다:

{
  "command" : {
    "arguments" : [
      {
        "abstract" : "Activate verbose mode",
        "isOptional" : true,
        "isRepeating" : false,
        "kind" : "flag",
        "names" : [
          {
            "kind" : "long",
            "name" : "verbose"
          }
        ],
        "preferredName" : {
          "kind" : "long",
          "name" : "verbose"
        },
        "shouldDisplay" : true,
        "valueName" : "verbose"
      },
      {
        "abstract" : "The input file path",
        "isOptional" : false,
        "isRepeating" : false,
        "kind" : "positional",
        "shouldDisplay" : true,
        "valueName" : "input-file"
      },
      {
        "abstract" : "Show help information.",
        "isOptional" : true,
        "isRepeating" : false,
        "kind" : "flag",
        "names" : [
          {
            "kind" : "short",
            "name" : "h"
          },
          {
            "kind" : "long",
            "name" : "help"
          }
        ],
        "preferredName" : {
          "kind" : "long",
          "name" : "help"
        },
        "shouldDisplay" : true,
        "valueName" : "help"
      }
    ],
    "commandName" : "my-command"
  },
  "serializationVersion" : 0
}
 
json

이 JSON 출력에는 MyCommand 타입에 정의된 명령(my-command), 플래그(verbose), 인자(inputFile)에 대한 정보가 포함되어 있습니다. 각각의 요소에는 이름, 도움말 메시지, 기본값 등의 메타데이터가 함께 제공되지요.

  • -experimental-dump-help 기능은 ArgumentParser로 만든 CLI 도구의 인터페이스를 프로그래밍 방식으로 검사하고 문서화하는 데 유용하게 활용할 수 있습니다. 이를 통해 자동화된 도구 통합이나 사용자 지향적인 도움말 생성 등의 작업을 수행할 수 있게 되는 거예요.

하지만 앞서 언급했듯이 이 기능은 아직 실험 단계에 있으므로, 향후 릴리스에서는 동작이 변경되거나 심지어 제거될 수도 있다는 점을 유념해야 합니다. 따라서 프로덕션 환경에서 이 기능에 크게 의존하는 것은 권장하지 않습니다.