Rust로 명령줄 툴 만들기: clap으로 CLI 앱 개발하기
Rust는 고성능 시스템 언어로 잘 알려져 있지만, 명령줄 애플리케이션(CLI) 개발에도 매우 강력한 언어입니다. Rust의 clap
라이브러리를 사용하면 손쉽게 명령줄 인자 파싱이 가능하며, 강력한 사용자 인터페이스를 갖춘 CLI 툴을 만들 수 있습니다.
이 글에서는 clap을 이용한 Rust CLI 앱 개발의 기초를 다루며, 실전 예제를 통해 빠르게 시작할 수 있도록 안내합니다.
clap이란 무엇인가요?
clap
은 "Command Line Argument Parser"의 줄임말로, Rust 생태계에서 가장 널리 사용되는 CLI 프레임워크입니다. 주요 기능은 다음과 같습니다:
- 명령줄 인자 자동 파싱
- 자동 도움말(
--help
) 생성 - 서브커맨드 지원
- derive 매크로를 통한 간결한 정의
프로젝트 생성 및 clap 설치
먼저 새로운 CLI 프로젝트를 생성하고, clap
을 의존성에 추가합니다.
$ cargo new mycli
$ cd mycli
# Cargo.toml
[dependencies]
clap = { version = "4", features = ["derive"] }
기본 CLI 앱 예제: 인자 받기
간단한 “인사말” 명령어를 만들어보겠습니다. 사용자로부터 이름을 입력받아 출력하는 CLI 앱입니다.
use clap::Parser;
#[derive(Parser, Debug)]
#[command(name = "hello")]
#[command(about = "이름을 입력받아 인사하는 CLI 도구", long_about = None)]
struct Args {
/// 사용자 이름
#[arg(short, long)]
name: String,
}
fn main() {
let args = Args::parse();
println!("안녕하세요, {}님!", args.name);
}
실행 예시:
$ cargo run -- --name Alice
안녕하세요, Alice님!
서브 커맨드 추가하기
clap
은 서브커맨드 기능도 지원하여 Git, Docker 같은 복잡한 CLI 도구도 구현할 수 있습니다.
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "toolbox")]
#[command(about = "Rust CLI 툴 예제", long_about = None)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// 이름을 인사합니다
Greet {
#[arg(short, long)]
name: String,
},
/// 숫자를 제곱합니다
Square {
#[arg(short, long)]
number: i32,
},
}
fn main() {
let cli = Cli::parse();
match &cli.command {
Commands::Greet { name } => {
println!("안녕하세요, {}님!", name);
}
Commands::Square { number } => {
println!("{}의 제곱은 {}입니다.", number, number * number);
}
}
}
실행 예시:
$ cargo run -- greet --name Bob
안녕하세요, Bob님!
$ cargo run -- square --number 5
5의 제곱은 25입니다.
필수 vs 선택 인자, 기본값 지정
clap
은 인자에 기본값(default)을 지정하거나 선택 인자로 설정할 수 있습니다.
#[derive(Parser, Debug)]
struct Args {
/// 나이 (기본값: 20)
#[arg(short, long, default_value_t = 20)]
age: u8,
/// 지역 (선택사항)
#[arg(short, long)]
region: Option<String>,
}
이렇게 하면 인자가 누락되어도 에러가 발생하지 않고, 기본값이나 None
처리로 유연하게 동작합니다.
자동 --help, --version 지원
clap은 도움말과 버전 정보도 자동 생성해줍니다.
$ cargo run -- --help
$ cargo run -- --version
이 기능은 사용자 경험을 크게 향상시키며, CLI 도구를 배포할 때 매우 유용합니다.
결론: clap을 활용하면 Rust CLI 개발이 쉬워진다
Rust로 명령줄 도구를 만들고 싶다면 clap은 최고의 선택지입니다. 간단한 파싱부터 서브커맨드, 옵션 처리, 자동 도움말까지 모든 기능이 잘 갖춰져 있어 생산성과 안정성을 모두 확보할 수 있습니다.
이제 간단한 CLI 툴은 물론, 파일 처리, 네트워크 제어, 빌드 자동화 툴까지 다양하게 개발해볼 수 있습니다. Rust의 성능과 안정성, 그리고 clap의 유연함을 결합하여 나만의 강력한 커맨드라인 앱을 만들어보세요!