🔥 도움말 화면에서 인자 그룹화하기

252자
3분

@OptionGroup 선언에서 제목을 제공하면 해당 타입의 속성들이 도움말 화면에서 제목 아래에 그룹화됩니다. 아래 예제를 살펴보면서 이해해 보세요:

struct BuildOptions: ParsableArguments {
    @Option(help: "컴파일러에 전달할 설정입니다.")
    var compilerSetting: [String] = []
    // 컴파일러에 전달할 설정 옵션을 배열로 받습니다.
 
    @Option(help: "링커에 전달할 설정입니다.")
    var linkerSetting: [String] = []
    // 링커에 전달할 설정 옵션을 배열로 받습니다.
}
 
struct Example: ParsableCommand {
    @Argument(help: "처리할 입력 파일입니다.")
    var inputFile: String
    // 처리할 입력 파일 경로를 인자로 받습니다.
 
    @Flag(help: "추가 출력을 보여줍니다.")
    var verbose: Bool = false
    // 추가 출력 여부를 Bool 플래그로 받습니다. 기본값은 false입니다.
 
    @Option(help: "설정 파일의 경로입니다.")
    var configFile: String?
    // 설정 파일 경로를 옵션으로 받습니다. 옵셔널 타입입니다.
 
    @OptionGroup(title: "Build Options")
    var buildOptions: BuildOptions
    // BuildOptions 타입의 buildOptions 속성을 "Build Options" 그룹으로 묶습니다.
}
 
swift

위 코드에서 BuildOptions 구조체는 compilerSettinglinkerSetting 두 개의 옵션을 가지고 있어요. 이들은 @OptionGroup을 사용해서 Example 명령에서 "Build Options"라는 제목으로 그룹화됩니다.

이제 터미널에서 example --help 명령을 실행하면 다음과 같은 도움말 화면이 표시되는 걸 볼 수 있어요:

USAGE: example <input-file> [--verbose] [--config-file <config-file>] [--compiler-setting <compiler-setting> ...] [--linker-setting <linker-setting> ...]

ARGUMENTS:
  <input-file>            처리할 입력 파일입니다.

BUILD OPTIONS:
  --compiler-setting <compiler-setting>
                          컴파일러에 전달할 설정입니다.
  --linker-setting <linker-setting>
                          링커에 전달할 설정입니다.

OPTIONS:
  --verbose               추가 출력을 보여줍니다.
  --config-file <config-file>
                          설정 파일의 경로입니다.
  -h, --help              도움말 정보를 표시합니다.
text

보시다시피 compilerSettinglinkerSetting 옵션이 "BUILD OPTIONS" 섹션 아래에 그룹화되어 표시되네요. 이렇게 관련된 옵션들을 그룹으로 묶어주면 사용자가 명령의 구조를 더 쉽게 이해할 수 있답니다. 또한 도움말 메시지의 내용도 깔끔하게 정렬되어 있고, 각 옵션에 대한 설명도 명확하게 제공되고 있죠? 이런 식으로 사용자 친화적인 CLI 도구를 만들 수 있어요.