CLI фреймворки для Kotlin: создаём мощные консольные приложения
Kotlin — современный язык, который отлично подходит не только для Android или серверной разработки, но и для создания консольных (CLI) приложений. Чтобы не писать парсинг аргументов вручную, существуют специализированные фреймворки. В этой статье мы разберём три самых популярных решения: Clikt, kotlinx-cli и picocli. Вы узнаете их особенности, увидите примеры кода и сможете выбрать подходящий инструмент для своего проекта.
Зачем нужен CLI фреймворк?
Создание утилит командной строки — задача, которая быстро усложняется: нужно обрабатывать флаги, опции, позиционные аргументы, выводить справку. Ручная реализация ведёт к ошибкам и дублированию кода. Фреймворки предлагают готовые механизмы:
- Декларативное описание интерфейса команд
- Автоматическая генерация справки (--help)
- Валидация ввода
- Поддержка подкоманд (git style)
- Типобезопасность
1. Clikt — самый "котлиновский" фреймворк
Clikt (https://github.com/ajalt/clikt) — это чистая Kotlin-библиотека, которая использует DSL и делегированные свойства. Она не зависит от Java-аннотаций и предлагает интуитивный API.
Установка
// build.gradle.kts
implementation("com.github.ajalt.clikt:clikt:4.2.2")
Пример: простой калькулятор
import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.int
class Calc : CliktCommand() {
val a: Int by argument()
val b: Int by argument()
val multiply by option("--mult", "-m", help = "Умножить, а не сложить").flag()
override fun run() {
val result = if (multiply) a * b else a + b
echo("Результат: $result")
}
}
fun main(args: Array<String>) = Calc().main(args)
Запуск: kotlin calc 5 3 --mult → Результат: 15.
Преимущества Clikt:
- Полная интеграция с Kotlin (DSL, делегаты)
- Мощная система валидации (custom validators)
- Поддержка подкоманд любой глубины
- Автоматическая генерация man-страниц
- Активное сообщество и обновления
2. kotlinx-cli — лёгкое решение от JetBrains
kotlinx-cli — экспериментальная библиотека, входящая в экосистему Kotlin. Она минималистична и подходит для небольших утилит.
Установка
// build.gradle.kts
implementation("org.jetbrains.kotlinx:kotlinx-cli:0.3.6")
Пример: приветствие
import kotlinx.cli.*
fun main(args: Array<String>) {
val parser = ArgParser("greet")
val name by parser.option(ArgType.String, shortName = "n", description = "Имя")
.default("мир")
val times by parser.option(ArgType.Int, shortName = "t", description = "Количество раз")
.default(1)
parser.parse(args)
repeat(times) {
println("Привет, $name!")
}
}
Запуск: kotlin greet -n Котлин -t 2 → Привет, Котлин! (дважды).
Особенности kotlinx-cli:
- Очень простой API — минимум кода
- Поддержка базовых типов (String, Int, Boolean)
- Плохо подходит для сложных иерархий команд
- Статус экспериментальности (может меняться API)
- Нет встроенной валидации и подсказок
3. picocli — мощный фреймворк с Java-корнями
picocli — это популярный фреймворк, который работает как с Java, так и с Kotlin. Он использует аннотации, но имеет специальную поддержку Kotlin DSL.
Установка