🔥 ArgumentParser의 실험 기능
강의 목차
주의
현재 이 문서는 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 #335 | 0.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"])
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"])
이 코드를 실행하면 다음과 같은 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
}
{
"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 출력에는 MyCommand 타입에 정의된 명령(my-command), 플래그(verbose), 인자(inputFile)에 대한 정보가 포함되어 있습니다. 각각의 요소에는 이름, 도움말 메시지, 기본값 등의 메타데이터가 함께 제공되지요.
-experimental-dump-help기능은 ArgumentParser로 만든 CLI 도구의 인터페이스를 프로그래밍 방식으로 검사하고 문서화하는 데 유용하게 활용할 수 있습니다. 이를 통해 자동화된 도구 통합이나 사용자 지향적인 도움말 생성 등의 작업을 수행할 수 있게 되는 거예요.
하지만 앞서 언급했듯이 이 기능은 아직 실험 단계에 있으므로, 향후 릴리스에서는 동작이 변경되거나 심지어 제거될 수도 있다는 점을 유념해야 합니다. 따라서 프로덕션 환경에서 이 기능에 크게 의존하는 것은 권장하지 않습니다.











