GN⁺: 명령줄 인터페이스 가이드라인 (2021)
(clig.dev)인사말
- 인간 중심의 디자인과 간단한 부품들이 함께 작동하는 것의 중요성.
- 프로그램 간 일관성과 충분한 정보 제공의 필요성.
- 발견의 용이성과 대화형 인터페이스의 표준화.
- 견고함과 공감 능력의 중요성.
- 혼돈을 인정하고 지침을 제공하는 것의 가치.
철학
- 사용자 중심의 디자인과 간단한 부품들이 함께 작동하는 것을 강조.
- 프로그램 간 일관성 유지와 필요한 정보만 제공하는 것의 중요성.
- 사용자가 쉽게 기능을 발견할 수 있도록 하는 것과 대화형 인터페이스의 중요성.
- 견고함과 사용자에 대한 공감을 강조하며, 혼돈 속에서도 지침을 제공.
지침
- 기본적인 규칙을 따르는 것의 중요성.
- 도움말, 문서화, 출력, 오류, 인자 및 플래그, 상호작용, 하위 명령어, 견고함, 미래 지향적 설계, 신호 및 제어 문자, 구성, 환경 변수, 명명, 배포, 분석 등에 대한 구체적인 지침 제공.
GN⁺의 의견
- 이 가이드는 커맨드 라인 인터페이스(CLI)를 사용하는 소프트웨어 개발자들에게 매우 유용함. 사용자 친화적인 CLI를 만드는 데 필요한 철학과 구체적인 지침을 제공하기 때문.
- CLI는 여전히 개발자들에게 강력한 도구이며, 이 가이드는 그러한 도구를 더욱 효과적으로 사용할 수 있도록 돕는다.
- 이 문서는 CLI의 미래 지향적인 설계를 위한 중요한 자료로, 개발자들이 사용자 경험을 향상시키고, 견고하며, 확장 가능한 프로그램을 만드는 데 기여할 것임.
Hacker News 의견
-
현재 많은 사람들이 커맨드 라인이 무엇인지 모르며, 왜 그것을 사용해야 하는지에 대해서도 관심이 없음.
- 1980년대에도 이러한 상황은 마찬가지였지만, 현재는 그 어느 때보다 커맨드 라인을 아는 사람들이 많아졌음. CLI(커맨드 라인 인터페이스)의 황금기라고 할 수 있음.
-
스크립트에서는 서브커맨드의 임의 축약을 허용하지 말 것. 예를 들어, mycmd install 대신 mycmd ins 또는 mycmd i를 허용하면, i로 시작하는 새로운 커맨드를 추가할 수 없게 됨.
- 스크립트에서 짧은 인자 사용을 피해야 함. 짧은 인자는 사람이 사용할 때 타이핑을 줄이기 위한 편의성을 제공하지만, 스크립트에서는 명시적으로 작성하는 것이 비용이 적고, 읽기와 쓰기 비율을 고려할 때 더 바람직함.
-
--dry-run 옵션을 고려해볼 것. 실제 변경을 하지 않고 어떤 작업이 수행될지 미리 보여주는 기능은 도구를 배우고 복잡한 옵션을 올바르게 설정했는지 확인하는 데 매우 유용함.
-
stdout이 대화형 터미널이 아닌 경우, 애니메이션을 표시하지 말 것. 이는 CI 로그 출력에서 진행 상황 바가 크리스마스트리처럼 변하는 것을 방지함.
- stdout에서는 절대 애니메이션을 표시하지 말 것. stderr는 로깅, 정보 제공 등을 위한 것이며, stdout은 tty 여부와 관계없이 유용한 출력을 제공해야 함.
-
심볼과 이모지는 명확성을 높일 때만 사용할 것.
- 심볼과 이모지는 터미널 간에 렌더링이 일관되지 않을 수 있으며, 사용자의 취향에 따라 호불호가 갈릴 수 있으므로 매우 신중하게 사용해야 함.
-
현재 Unix 커맨드 라인은 한편으로는 "놀라울 정도로 유용"하고 다른 한편으로는 "설계상의 결함"이 있음.
- Unix 커맨드 라인이 유용한 이유는 C나 Rust로 같은 작업을 수행하는 데 걸리는 시간을 생각해보면 알 수 있음.
- 설계상의 결함은 커맨드 라인 인터페이스가 동시에 인간과 기계가 읽을 수 있어야 한다는 점에서 비롯됨. 이 문제를 해결하는 정석적인 방법은 없음.
-
CLI가 매우 크고 중첩이 필요한 경우(예: aws)를 제외하고, 대부분의 앱은 모든 옵션을 도움말에 출력하고 사용자가 less를 사용하여 필요한 내용을 찾게 하는 것을 선호함.
-
전통적으로 UNIX 명령어는 다른 프로그램에 의해 주로 사용될 것이라고 가정하에 작성됨.
- 실제로는 대화형 로그인 쉘 내에서 상호작용적으로 사용되기 위해 의도되었음. 출력을 생성하는 프로그램과 "조용한" 텍스트 필터로 나뉘며, 복잡한 프로그램은 C로 작성됨.
-
환경 변수에서 비밀번호를 읽지 말 것.
- 비밀번호는 크리덴셜 파일, 파이프, AF_UNIX 소켓, 비밀 관리 서비스 또는 다른 IPC 메커니즘을 통해서만 받아야 함.
-
CLI 가이드라인에 대한 가장 포괄적인 책은 Eric Raymond의 저서임.
- 오랜 시간이 지났지만, clig.dev를 훑어보니 시간이 지남에 따라 의견이 많이 변화했음을 알 수 있음.