Rust для CLI-утилит: clap и примеры

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

rustclapcli

Rust отлично подходит для CLI-инструментов: высокая скорость, один бинарник без лишних зависимостей, строгая типизация и предсказуемое поведение. А библиотека clap стала фактическим стандартом для разбора аргументов командной строки.

Почему именно clap

  • удобное описание команд, флагов и параметров
  • автогенерация --help
  • поддержка сабкоманд
  • валидация аргументов «из коробки»
  • derive-макросы, которые сильно сокращают код

Быстрый старт

Добавьте зависимость в Cargo.toml:

[dependencies]
clap = { version = "4", features = ["derive"] }

Простой пример

CLI, который принимает имя пользователя и число повторов:

use clap::Parser;

#[derive(Parser, Debug)]
#[command(name = "hello")]
#[command(about = "Простая CLI-утилита на Rust")]
struct Args {
    #[arg(short, long)]
    name: String,

    #[arg(short, long, default_value_t = 1)]
    count: u8,
}

fn main() {
    let args = Args::parse();

    for _ in 0..args.count {
        println!("Привет, {}!", args.name);
    }
}

Запуск:

cargo run -- --name Alice --count 3
cargo run -- -n Alice -c 3

Пример с флагом

Частый кейс — включение подробного режима:

use clap::Parser;

#[derive(Parser)]
struct Args {
    #[arg(short, long)]
    verbose: bool,
}

fn main() {
    let args = Args::parse();
    if args.verbose {
        println!("Подробный режим включён");
    }
}

Сабкоманды для реальных утилит

Так строят CLI наподобие git, docker, npm 📦

use clap::{Parser, Subcommand};

#[derive(Parser)]
struct Cli {
    #[command(subcommand)]
    command: Commands,
}

#[derive(Subcommand)]
enum Commands {
    Add { name: String },
    Remove { id: u32 },
}

fn main() {
    let cli = Cli::parse();

    match cli.command {
        Commands::Add { name } => println!("Добавлен: {}", name),
        Commands::Remove { id } => println!("Удалён ID: {}", id),
    }
}

Практические советы

  • Для простых утилит используйте derive, а не ручную конфигурацию
  • Всегда добавляйте about и понятные имена аргументов — это улучшает --help
  • Используйте default_value_t, если нужен безопасный дефолт
  • Для сложных сценариев применяйте subcommand
  • Проверяйте UX: короткие флаги, читаемые ошибки, логичные названия 🧩

Когда Rust + clap особенно хороши

  • DevOps-скрипты и internal tools
  • генераторы файлов и шаблонов
  • обёртки над API
  • CLI для автоматизации CI/CD 🚀
  • утилиты, где важны скорость и надёжность

Итог: если нужен современный CLI с хорошим UX, clap закрывает почти всё — от простых флагов до многоуровневых команд. Для Rust-разработки это один из самых полезных инструментов в повседневной практике. ✅

Подборку полезных каналов про IT стоит сохранить в закладки — там часто публикуют практические материалы, разборы инструментов и кейсы из разработки.

🗣 Подборки каналов
🧠 Каталог ботов и приложений
🗺 Навигация

Читайте так же